Received: by 2002:a05:6a10:16a7:0:0:0:0 with SMTP id gp39csp2925685pxb; Sun, 8 Nov 2020 19:24:46 -0800 (PST) X-Google-Smtp-Source: ABdhPJyL5Pab1NVeJc4fxrgnvQxkDo2TDlPOYvz27GXnHwhNutPubXol+xV6HTOyf+8zKKClVMxl X-Received: by 2002:a17:906:804:: with SMTP id e4mr12873555ejd.420.1604892286721; Sun, 08 Nov 2020 19:24:46 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1604892286; cv=none; d=google.com; s=arc-20160816; b=Li8RPSLL8wOv31Les71nGsph16o524gSAg29k9XmBxJcgrTjtt6yllAhlt0OSB8CUI elq/zzbyfYqRgGjdhjV0t6gMW5rGIsixN5a/wmXDDSc4e3uC8FfR2heCcgE8TlmEJ6Kk Fw1FfO73Ml8Qgo79l1D351SBMNvhoh0cjaOqqdd34LUHiEXT2sC1t6jaOkDngqd+wqdQ L9un5g4W+rSp6tjeP+kFsiL4FBr7Cfv4V8Nhm9CvHVA2d4uT+WSLuDR9yPVIqqXHxuzy OYeuBr9NZMGjebGZ22QsxIeHg07dxHaJOca48WN51uJueSis2q3/Sj96z6KOY4hNRJwg yE4Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:references:in-reply-to:message-id :date:subject:cc:to:from; bh=jtjcMs7zkvmbD8oraeVm4O5TF4vF9v0n1fjTmInnA/Y=; b=eD38ODYIutqo4Bx2Lzg6EiGR2Jyntdjwmkv3/d6D0yaqrEhirbuoN7oISUkMmPZWsA 863Y0904sJ7lVg2QpenUg7BESn8f+ZHhspGcmg9LEPRwidMCHCK3SIvm3JHXuso9IJlJ ZoLzQSttzeb2SH2X8HucRvsdUvddULVixFF6w6oPTvWsioZHdSqqui1kxVufCqM9Gm5u djhPi6P1Uv2WvCxFUVgi0jgYncshGXPeslD5Yvecg2Vrr2kfCRe5+pWLL27qPEg5fqxH 1+DdW/4ouqa3FHo5IZZmvP1wC99YYA5vDmUIx8/BApTdZzoXKsi4MCzREvh+1M13CmTD JA8w== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id y16si6080366edo.544.2020.11.08.19.24.24; Sun, 08 Nov 2020 19:24:46 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729410AbgKIDWo (ORCPT + 99 others); Sun, 8 Nov 2020 22:22:44 -0500 Received: from szxga07-in.huawei.com ([45.249.212.35]:7434 "EHLO szxga07-in.huawei.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729316AbgKIDWg (ORCPT ); Sun, 8 Nov 2020 22:22:36 -0500 Received: from DGGEMS405-HUB.china.huawei.com (unknown [172.30.72.59]) by szxga07-in.huawei.com (SkyGuard) with ESMTP id 4CTxBN55g6z74nK; Mon, 9 Nov 2020 11:22:20 +0800 (CST) Received: from localhost.localdomain (10.69.192.56) by DGGEMS405-HUB.china.huawei.com (10.3.19.205) with Microsoft SMTP Server id 14.3.487.0; Mon, 9 Nov 2020 11:22:18 +0800 From: Huazhong Tan To: CC: , , , , , , Huazhong Tan Subject: [PATCH V2 net-next 11/11] net: hns3: add debugfs support for interrupt coalesce Date: Mon, 9 Nov 2020 11:22:39 +0800 Message-ID: <1604892159-19990-12-git-send-email-tanhuazhong@huawei.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1604892159-19990-1-git-send-email-tanhuazhong@huawei.com> References: <1604892159-19990-1-git-send-email-tanhuazhong@huawei.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [10.69.192.56] X-CFilter-Loop: Reflected Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Since user may need to check the current configuration of the interrupt coalesce, so add debugfs support for query this info, which includes DIM profile, coalesce configuration of both software and hardware. Signed-off-by: Huazhong Tan --- drivers/net/ethernet/hisilicon/hns3/hns3_debugfs.c | 126 +++++++++++++++++++++ 1 file changed, 126 insertions(+) diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3_debugfs.c b/drivers/net/ethernet/hisilicon/hns3/hns3_debugfs.c index a5ebca8..26fa69a 100644 --- a/drivers/net/ethernet/hisilicon/hns3/hns3_debugfs.c +++ b/drivers/net/ethernet/hisilicon/hns3/hns3_debugfs.c @@ -12,6 +12,93 @@ static struct dentry *hns3_dbgfs_root; +static ssize_t hns3_dbg_coal_write(struct file *filp, const char __user *buffer, + size_t count, loff_t *ppos) +{ + struct hnae3_handle *h = filp->private_data; + struct hns3_nic_priv *priv = h->priv; + struct hns3_enet_tqp_vector *tqp_vector; + struct hns3_enet_coalesce *coal; + u8 __iomem *base_addr; + int uncopied_bytes; + unsigned int idx; + struct dim *dim; + char *cmd_buf; + + if (*ppos != 0) + return 0; + + if (!test_bit(HNS3_NIC_STATE_INITED, &priv->state)) { + dev_err(&h->pdev->dev, "device is not initialized\n"); + return -EFAULT; + } + + cmd_buf = kzalloc(count + 1, GFP_KERNEL); + if (!cmd_buf) + return -ENOMEM; + + uncopied_bytes = copy_from_user(cmd_buf, buffer, count); + if (uncopied_bytes) { + kfree(cmd_buf); + return -EFAULT; + } + + cmd_buf[count] = '\0'; + + if (kstrtouint(cmd_buf, 0, &idx)) + idx = 0; + + if (idx >= priv->vector_num) { + dev_err(&h->pdev->dev, + "vector index(%u) is out of range(0-%u)\n", idx, + priv->vector_num - 1); + kfree(cmd_buf); + return -EINVAL; + } + + tqp_vector = &priv->tqp_vector[idx]; + coal = &tqp_vector->tx_group.coal; + dim = &tqp_vector->tx_group.dim; + base_addr = tqp_vector->mask_addr; + + dev_info(&h->pdev->dev, "vector[%u] interrupt coalesce info:\n", idx); + dev_info(&h->pdev->dev, + "TX DIM info state = %d profile_ix = %d mode = %d tune_state = %d steps_right = %d steps_left = %d tired = %d\n", + dim->state, dim->profile_ix, dim->mode, dim->tune_state, + dim->steps_right, dim->steps_left, dim->tired); + + dev_info(&h->pdev->dev, "TX GL info sw_gl = %u, hw_gl = %u\n", + coal->int_gl, + readl(base_addr + HNS3_VECTOR_GL1_OFFSET)); + + if (coal->ql_enable) + dev_info(&h->pdev->dev, "TX QL info sw_ql = %u, hw_ql = %u\n", + coal->int_ql, + readl(base_addr + HNS3_VECTOR_TX_QL_OFFSET)); + + coal = &tqp_vector->rx_group.coal; + dim = &tqp_vector->rx_group.dim; + + dev_info(&h->pdev->dev, + "RX dim_info state = %d profile_ix = %d mode = %d tune_state = %d steps_right = %d steps_left = %d tired = %d\n", + dim->state, dim->profile_ix, dim->mode, dim->tune_state, + dim->steps_right, dim->steps_left, dim->tired); + + dev_info(&h->pdev->dev, "RX GL info sw_gl = %u, hw_gl = %u\n", + coal->int_gl, + readl(base_addr + HNS3_VECTOR_GL0_OFFSET)); + + if (coal->ql_enable) + dev_info(&h->pdev->dev, "RX QL info sw_ql = %u, hw_ql = %u\n", + coal->int_ql, + readl(base_addr + HNS3_VECTOR_RX_QL_OFFSET)); + + kfree(cmd_buf); + cmd_buf = NULL; + + return count; +} + static int hns3_dbg_queue_info(struct hnae3_handle *h, const char *cmd_buf) { @@ -352,6 +439,35 @@ static void hns3_dbg_dev_specs(struct hnae3_handle *h) dev_info(priv->dev, "MAX INT GL: %u\n", dev_specs->max_int_gl); } +static ssize_t hns3_dbg_coal_read(struct file *filp, char __user *buffer, + size_t count, loff_t *ppos) +{ + int uncopy_bytes; + char *buf; + int len; + + if (*ppos != 0) + return 0; + + if (count < HNS3_DBG_READ_LEN) + return -ENOSPC; + + buf = kzalloc(HNS3_DBG_READ_LEN, GFP_KERNEL); + if (!buf) + return -ENOMEM; + + len = scnprintf(buf, HNS3_DBG_READ_LEN, "%s\n", + "Please echo index to coal"); + uncopy_bytes = copy_to_user(buffer, buf, len); + + kfree(buf); + + if (uncopy_bytes) + return -EFAULT; + + return (*ppos = len); +} + static ssize_t hns3_dbg_cmd_read(struct file *filp, char __user *buffer, size_t count, loff_t *ppos) { @@ -452,6 +568,13 @@ static const struct file_operations hns3_dbg_cmd_fops = { .write = hns3_dbg_cmd_write, }; +static const struct file_operations hns3_dbg_coal_fops = { + .owner = THIS_MODULE, + .open = simple_open, + .read = hns3_dbg_coal_read, + .write = hns3_dbg_coal_write, +}; + void hns3_dbg_init(struct hnae3_handle *handle) { const char *name = pci_name(handle->pdev); @@ -460,6 +583,9 @@ void hns3_dbg_init(struct hnae3_handle *handle) debugfs_create_file("cmd", 0600, handle->hnae3_dbgfs, handle, &hns3_dbg_cmd_fops); + + debugfs_create_file("coal", 0600, handle->hnae3_dbgfs, handle, + &hns3_dbg_coal_fops); } void hns3_dbg_uninit(struct hnae3_handle *handle) -- 2.7.4