121 lines
5.0 KiB
Diff
121 lines
5.0 KiB
Diff
From 0da9cf5bd89d57ff5cb0e14e52cdc9af4b37e075 Mon Sep 17 00:00:00 2001
|
|
From: Jie Wang <wangjie125@huawei.com>
|
|
Date: Thu, 18 Nov 2021 20:44:56 +0800
|
|
Subject: [PATCH 154/283] net: hns3: fix ROCE base interrupt vector
|
|
initialization bug
|
|
|
|
mainline inclusion
|
|
from mainline-v5.16-rc1
|
|
commit beb27ca451a57a1c0e52b5268703f3c3173c1f8c
|
|
category: bugfix
|
|
bugzilla: https://gitee.com/src-openeuler/kernel/issues/I8EMYT
|
|
CVE: NA
|
|
|
|
Reference: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=beb27ca451a57a1c0e52b5268703f3c3173c1f8c
|
|
|
|
----------------------------------------------------------------------
|
|
|
|
Currently, NIC init ROCE interrupt vector with MSIX interrupt. But ROCE use
|
|
pci_irq_vector() to get interrupt vector, which adds the relative interrupt
|
|
vector again and gets wrong interrupt vector.
|
|
|
|
So fixes it by assign relative interrupt vector to ROCE instead of MSIX
|
|
interrupt vector and delete the unused struct member base_msi_vector
|
|
declaration of hclgevf_dev.
|
|
|
|
Fixes: 46a3df9f9718 ("net: hns3: Add HNS3 Acceleration Engine & Compatibility Layer Support")
|
|
Signed-off-by: Jie Wang <wangjie125@huawei.com>
|
|
Signed-off-by: Guangbin Huang <huangguangbin2@huawei.com>
|
|
Signed-off-by: David S. Miller <davem@davemloft.net>
|
|
Reviewed-by: Yongxin Li <liyongxin1@huawei.com>
|
|
Signed-off-by: Junxin Chen <chenjunxin1@huawei.com>
|
|
Signed-off-by: Zheng Zengkai <zhengzengkai@huawei.com>
|
|
Signed-off-by: Xiaodong Li <lixiaodong67@huawei.com>
|
|
---
|
|
drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c | 6 +-----
|
|
drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.h | 2 --
|
|
drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.c | 5 +----
|
|
drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.h | 2 --
|
|
4 files changed, 2 insertions(+), 13 deletions(-)
|
|
|
|
diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c
|
|
index 6d41c3151916..e0ef00440f79 100644
|
|
--- a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c
|
|
+++ b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c
|
|
@@ -2513,7 +2513,7 @@ static int hclge_init_roce_base_info(struct hclge_vport *vport)
|
|
if (hdev->num_msi < hdev->num_nic_msi + hdev->num_roce_msi)
|
|
return -EINVAL;
|
|
|
|
- roce->rinfo.base_vector = hdev->roce_base_vector;
|
|
+ roce->rinfo.base_vector = hdev->num_nic_msi;
|
|
|
|
roce->rinfo.netdev = nic->kinfo.netdev;
|
|
roce->rinfo.roce_io_base = hdev->hw.io_base;
|
|
@@ -2549,10 +2549,6 @@ static int hclge_init_msi(struct hclge_dev *hdev)
|
|
hdev->num_msi = vectors;
|
|
hdev->num_msi_left = vectors;
|
|
|
|
- hdev->base_msi_vector = pdev->irq;
|
|
- hdev->roce_base_vector = hdev->base_msi_vector +
|
|
- hdev->num_nic_msi;
|
|
-
|
|
hdev->vector_status = devm_kcalloc(&pdev->dev, hdev->num_msi,
|
|
sizeof(u16), GFP_KERNEL);
|
|
if (!hdev->vector_status) {
|
|
diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.h b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.h
|
|
index 5ff61230d79f..51f46d68c05f 100644
|
|
--- a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.h
|
|
+++ b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.h
|
|
@@ -853,12 +853,10 @@ struct hclge_dev {
|
|
u16 num_msi;
|
|
u16 num_msi_left;
|
|
u16 num_msi_used;
|
|
- u32 base_msi_vector;
|
|
u16 *vector_status;
|
|
int *vector_irq;
|
|
u16 num_nic_msi; /* Num of nic vectors for this PF */
|
|
u16 num_roce_msi; /* Num of roce vectors for this PF */
|
|
- int roce_base_vector;
|
|
|
|
unsigned long service_timer_period;
|
|
unsigned long service_timer_previous;
|
|
diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.c b/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.c
|
|
index 082361e3713c..2457feb0e95f 100644
|
|
--- a/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.c
|
|
+++ b/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.c
|
|
@@ -2482,7 +2482,7 @@ static int hclgevf_init_roce_base_info(struct hclgevf_dev *hdev)
|
|
hdev->num_msi_left == 0)
|
|
return -EINVAL;
|
|
|
|
- roce->rinfo.base_vector = hdev->roce_base_vector;
|
|
+ roce->rinfo.base_vector = hdev->roce_base_msix_offset;
|
|
|
|
roce->rinfo.netdev = nic->kinfo.netdev;
|
|
roce->rinfo.roce_io_base = hdev->hw.io_base;
|
|
@@ -2738,9 +2738,6 @@ static int hclgevf_init_msi(struct hclgevf_dev *hdev)
|
|
hdev->num_msi = vectors;
|
|
hdev->num_msi_left = vectors;
|
|
|
|
- hdev->base_msi_vector = pdev->irq;
|
|
- hdev->roce_base_vector = pdev->irq + hdev->roce_base_msix_offset;
|
|
-
|
|
hdev->vector_status = devm_kcalloc(&pdev->dev, hdev->num_msi,
|
|
sizeof(u16), GFP_KERNEL);
|
|
if (!hdev->vector_status) {
|
|
diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.h b/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.h
|
|
index 45313a59a380..a9624b9adcfd 100644
|
|
--- a/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.h
|
|
+++ b/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.h
|
|
@@ -303,8 +303,6 @@ struct hclgevf_dev {
|
|
u16 num_nic_msix; /* Num of nic vectors for this VF */
|
|
u16 num_roce_msix; /* Num of roce vectors for this VF */
|
|
u16 roce_base_msix_offset;
|
|
- int roce_base_vector;
|
|
- u32 base_msi_vector;
|
|
u16 *vector_status;
|
|
int *vector_irq;
|
|
|
|
--
|
|
2.34.1
|
|
|