netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH net 0/3] net: qed disable aRFS in NPAR and 100G
@ 2020-08-19 20:29 Dmitry Bogdanov
  2020-08-19 20:29 ` [PATCH net 1/3] net: qed: Disable aRFS for " Dmitry Bogdanov
                   ` (6 more replies)
  0 siblings, 7 replies; 19+ messages in thread
From: Dmitry Bogdanov @ 2020-08-19 20:29 UTC (permalink / raw)
  To: netdev, David S . Miller; +Cc: Dmitry Bogdanov

This patchset fixes some recent issues found by customers.

Dmitry Bogdanov (3):
  net: qed: Disable aRFS for NPAR and 100G
  net: qede: Disable aRFS for NPAR and 100G
  qed: RDMA personality shouldn't fail VF load

 drivers/net/ethernet/qlogic/qed/qed_dev.c      | 11 ++++++++++-
 drivers/net/ethernet/qlogic/qed/qed_l2.c       |  3 +++
 drivers/net/ethernet/qlogic/qed/qed_main.c     |  2 ++
 drivers/net/ethernet/qlogic/qed/qed_sriov.c    |  1 +
 drivers/net/ethernet/qlogic/qede/qede_filter.c |  3 +++
 drivers/net/ethernet/qlogic/qede/qede_main.c   | 11 +++++------
 include/linux/qed/qed_if.h                     |  1 +
 7 files changed, 25 insertions(+), 7 deletions(-)

-- 
2.17.1


^ permalink raw reply	[flat|nested] 19+ messages in thread

* [PATCH net 1/3] net: qed: Disable aRFS for NPAR and 100G
  2020-08-19 20:29 [PATCH net 0/3] net: qed disable aRFS in NPAR and 100G Dmitry Bogdanov
@ 2020-08-19 20:29 ` Dmitry Bogdanov
  2020-08-20 11:08   ` Dmitry Bogdanov
                     ` (3 more replies)
  2020-08-19 20:29 ` [PATCH net 2/3] net: qede: " Dmitry Bogdanov
                   ` (5 subsequent siblings)
  6 siblings, 4 replies; 19+ messages in thread
From: Dmitry Bogdanov @ 2020-08-19 20:29 UTC (permalink / raw)
  To: netdev, David S . Miller
  Cc: Dmitry Bogdanov, Manish Chopra, Igor Russkikh, Michal Kalderon

In CMT and NPAR the PF is unknown when the GFS block processes the
packet. Therefore cannot use searcher as it has a per PF database,
and thus ARFS must be disabled.

Fixes: d51e4af5c209 ("qed: aRFS infrastructure support")
Signed-off-by: Manish Chopra <mchopra@marvell.com>
Signed-off-by: Igor Russkikh <irusskikh@marvell.com>
Signed-off-by: Michal Kalderon <michal.kalderon@marvell.com>
Signed-off-by: Dmitry Bogdanov <dbogdanov@marvell.com>
---
 drivers/net/ethernet/qlogic/qed/qed_dev.c  | 11 ++++++++++-
 drivers/net/ethernet/qlogic/qed/qed_l2.c   |  3 +++
 drivers/net/ethernet/qlogic/qed/qed_main.c |  2 ++
 include/linux/qed/qed_if.h                 |  1 +
 4 files changed, 16 insertions(+), 1 deletion(-)

diff --git a/drivers/net/ethernet/qlogic/qed/qed_dev.c b/drivers/net/ethernet/qlogic/qed/qed_dev.c
index b3c9ebaf2280..c78a48ae9ea6 100644
--- a/drivers/net/ethernet/qlogic/qed/qed_dev.c
+++ b/drivers/net/ethernet/qlogic/qed/qed_dev.c
@@ -4253,7 +4253,8 @@ static int qed_hw_get_nvm_info(struct qed_hwfn *p_hwfn, struct qed_ptt *p_ptt)
 			cdev->mf_bits = BIT(QED_MF_LLH_MAC_CLSS) |
 					BIT(QED_MF_LLH_PROTO_CLSS) |
 					BIT(QED_MF_LL2_NON_UNICAST) |
-					BIT(QED_MF_INTER_PF_SWITCH);
+					BIT(QED_MF_INTER_PF_SWITCH) |
+					BIT(QED_MF_DISABLE_ARFS);
 			break;
 		case NVM_CFG1_GLOB_MF_MODE_DEFAULT:
 			cdev->mf_bits = BIT(QED_MF_LLH_MAC_CLSS) |
@@ -4266,6 +4267,14 @@ static int qed_hw_get_nvm_info(struct qed_hwfn *p_hwfn, struct qed_ptt *p_ptt)
 
 		DP_INFO(p_hwfn, "Multi function mode is 0x%lx\n",
 			cdev->mf_bits);
+
+		/* In CMT the PF is unknown when the GFS block processes the
+		 * packet. Therefore cannot use searcher as it has a per PF
+		 * database, and thus ARFS must be disabled.
+		 *
+		 */
+		if (QED_IS_CMT(cdev))
+			cdev->mf_bits |= BIT(QED_MF_DISABLE_ARFS);
 	}
 
 	DP_INFO(p_hwfn, "Multi function mode is 0x%lx\n",
diff --git a/drivers/net/ethernet/qlogic/qed/qed_l2.c b/drivers/net/ethernet/qlogic/qed/qed_l2.c
index 4c6ac8862744..07824bf9d68d 100644
--- a/drivers/net/ethernet/qlogic/qed/qed_l2.c
+++ b/drivers/net/ethernet/qlogic/qed/qed_l2.c
@@ -1980,6 +1980,9 @@ void qed_arfs_mode_configure(struct qed_hwfn *p_hwfn,
 			     struct qed_ptt *p_ptt,
 			     struct qed_arfs_config_params *p_cfg_params)
 {
+	if (test_bit(QED_MF_DISABLE_ARFS, &p_hwfn->cdev->mf_bits))
+		return;
+
 	if (p_cfg_params->mode != QED_FILTER_CONFIG_MODE_DISABLE) {
 		qed_gft_config(p_hwfn, p_ptt, p_hwfn->rel_pf_id,
 			       p_cfg_params->tcp,
diff --git a/drivers/net/ethernet/qlogic/qed/qed_main.c b/drivers/net/ethernet/qlogic/qed/qed_main.c
index 2558cb680db3..309216ff7a84 100644
--- a/drivers/net/ethernet/qlogic/qed/qed_main.c
+++ b/drivers/net/ethernet/qlogic/qed/qed_main.c
@@ -444,6 +444,8 @@ int qed_fill_dev_info(struct qed_dev *cdev,
 		dev_info->fw_eng = FW_ENGINEERING_VERSION;
 		dev_info->b_inter_pf_switch = test_bit(QED_MF_INTER_PF_SWITCH,
 						       &cdev->mf_bits);
+		if (!test_bit(QED_MF_DISABLE_ARFS, &cdev->mf_bits))
+			dev_info->b_arfs_capable = true;
 		dev_info->tx_switching = true;
 
 		if (hw_info->b_wol_support == QED_WOL_SUPPORT_PME)
diff --git a/include/linux/qed/qed_if.h b/include/linux/qed/qed_if.h
index cd6a5c7e56eb..cdd73afc4c46 100644
--- a/include/linux/qed/qed_if.h
+++ b/include/linux/qed/qed_if.h
@@ -623,6 +623,7 @@ struct qed_dev_info {
 #define QED_MFW_VERSION_3_OFFSET	24
 
 	u32		flash_size;
+	bool		b_arfs_capable;
 	bool		b_inter_pf_switch;
 	bool		tx_switching;
 	bool		rdma_supported;
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [PATCH net 2/3] net: qede: Disable aRFS for NPAR and 100G
  2020-08-19 20:29 [PATCH net 0/3] net: qed disable aRFS in NPAR and 100G Dmitry Bogdanov
  2020-08-19 20:29 ` [PATCH net 1/3] net: qed: Disable aRFS for " Dmitry Bogdanov
@ 2020-08-19 20:29 ` Dmitry Bogdanov
  2020-08-19 22:49   ` David Miller
                     ` (3 more replies)
  2020-08-19 20:29 ` [PATCH net 3/3] net: qed: RDMA personality shouldn't fail VF load Dmitry Bogdanov
                   ` (4 subsequent siblings)
  6 siblings, 4 replies; 19+ messages in thread
From: Dmitry Bogdanov @ 2020-08-19 20:29 UTC (permalink / raw)
  To: netdev, David S . Miller
  Cc: Dmitry Bogdanov, Manish Chopra, Igor Russkikh, Michal Kalderon

In some configurations ARFS cannot be used, so disable it if device
is not capable.

Fixes: e4917d46a65 ("qede: Add aRFS support")
Signed-off-by: Manish Chopra <mchopra@marvell.com>
Signed-off-by: Igor Russkikh <irusskikh@marvell.com>
Signed-off-by: Michal Kalderon <michal.kalderon@marvell.com>
Signed-off-by: Dmitry Bogdanov <dbogdanov@marvell.com>
---
 drivers/net/ethernet/qlogic/qede/qede_filter.c |  3 +++
 drivers/net/ethernet/qlogic/qede/qede_main.c   | 11 +++++------
 2 files changed, 8 insertions(+), 6 deletions(-)

diff --git a/drivers/net/ethernet/qlogic/qede/qede_filter.c b/drivers/net/ethernet/qlogic/qede/qede_filter.c
index f961f65d9372..c59b72c90293 100644
--- a/drivers/net/ethernet/qlogic/qede/qede_filter.c
+++ b/drivers/net/ethernet/qlogic/qede/qede_filter.c
@@ -311,6 +311,9 @@ int qede_alloc_arfs(struct qede_dev *edev)
 {
 	int i;
 
+	if (!edev->dev_info.common.b_arfs_capable)
+		return -EINVAL;
+
 	edev->arfs = vzalloc(sizeof(*edev->arfs));
 	if (!edev->arfs)
 		return -ENOMEM;
diff --git a/drivers/net/ethernet/qlogic/qede/qede_main.c b/drivers/net/ethernet/qlogic/qede/qede_main.c
index 140a392a81bb..9e1f41ba766c 100644
--- a/drivers/net/ethernet/qlogic/qede/qede_main.c
+++ b/drivers/net/ethernet/qlogic/qede/qede_main.c
@@ -804,7 +804,7 @@ static void qede_init_ndev(struct qede_dev *edev)
 		      NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM |
 		      NETIF_F_TSO | NETIF_F_TSO6 | NETIF_F_HW_TC;
 
-	if (!IS_VF(edev) && edev->dev_info.common.num_hwfns == 1)
+	if (edev->dev_info.common.b_arfs_capable)
 		hw_features |= NETIF_F_NTUPLE;
 
 	if (edev->dev_info.common.vxlan_enable ||
@@ -2274,7 +2274,7 @@ static void qede_unload(struct qede_dev *edev, enum qede_unload_mode mode,
 	qede_vlan_mark_nonconfigured(edev);
 	edev->ops->fastpath_stop(edev->cdev);
 
-	if (!IS_VF(edev) && edev->dev_info.common.num_hwfns == 1) {
+	if (edev->dev_info.common.b_arfs_capable) {
 		qede_poll_for_freeing_arfs_filters(edev);
 		qede_free_arfs(edev);
 	}
@@ -2341,10 +2341,9 @@ static int qede_load(struct qede_dev *edev, enum qede_load_mode mode,
 	if (rc)
 		goto err2;
 
-	if (!IS_VF(edev) && edev->dev_info.common.num_hwfns == 1) {
-		rc = qede_alloc_arfs(edev);
-		if (rc)
-			DP_NOTICE(edev, "aRFS memory allocation failed\n");
+	if (qede_alloc_arfs(edev)) {
+		edev->ndev->features &= ~NETIF_F_NTUPLE;
+		edev->dev_info.common.b_arfs_capable = false;
 	}
 
 	qede_napi_add_enable(edev);
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [PATCH net 3/3] net: qed: RDMA personality shouldn't fail VF load
  2020-08-19 20:29 [PATCH net 0/3] net: qed disable aRFS in NPAR and 100G Dmitry Bogdanov
  2020-08-19 20:29 ` [PATCH net 1/3] net: qed: Disable aRFS for " Dmitry Bogdanov
  2020-08-19 20:29 ` [PATCH net 2/3] net: qede: " Dmitry Bogdanov
@ 2020-08-19 20:29 ` Dmitry Bogdanov
  2020-08-20 11:08   ` Dmitry Bogdanov
                     ` (2 more replies)
  2020-08-20 11:08 ` [PATCH net 0/3] net: qed disable aRFS in NPAR and 100G Dmitry Bogdanov
                   ` (3 subsequent siblings)
  6 siblings, 3 replies; 19+ messages in thread
From: Dmitry Bogdanov @ 2020-08-19 20:29 UTC (permalink / raw)
  To: netdev, David S . Miller; +Cc: Dmitry Bogdanov, Igor Russkikh, Michal Kalderon

Fix the assert during VF driver installation when the personality is iWARP

Fixes: 1fe614d10f45 ("qed: Relax VF firmware requirements")
Signed-off-by: Igor Russkikh <irusskikh@marvell.com>
Signed-off-by: Michal Kalderon <michal.kalderon@marvell.com>
Signed-off-by: Dmitry Bogdanov <dbogdanov@marvell.com>
---
 drivers/net/ethernet/qlogic/qed/qed_sriov.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/net/ethernet/qlogic/qed/qed_sriov.c b/drivers/net/ethernet/qlogic/qed/qed_sriov.c
index f1f75b6d0421..b8dc5c4591ef 100644
--- a/drivers/net/ethernet/qlogic/qed/qed_sriov.c
+++ b/drivers/net/ethernet/qlogic/qed/qed_sriov.c
@@ -71,6 +71,7 @@ static int qed_sp_vf_start(struct qed_hwfn *p_hwfn, struct qed_vf_info *p_vf)
 		p_ramrod->personality = PERSONALITY_ETH;
 		break;
 	case QED_PCI_ETH_ROCE:
+	case QED_PCI_ETH_IWARP:
 		p_ramrod->personality = PERSONALITY_RDMA_AND_ETH;
 		break;
 	default:
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 19+ messages in thread

* Re: [PATCH net 2/3] net: qede: Disable aRFS for NPAR and 100G
  2020-08-19 20:29 ` [PATCH net 2/3] net: qede: " Dmitry Bogdanov
@ 2020-08-19 22:49   ` David Miller
  2020-08-20 11:08   ` Dmitry Bogdanov
                     ` (2 subsequent siblings)
  3 siblings, 0 replies; 19+ messages in thread
From: David Miller @ 2020-08-19 22:49 UTC (permalink / raw)
  To: dbogdanov; +Cc: netdev, mchopra, irusskikh, michal.kalderon

From: Dmitry Bogdanov <dbogdanov@marvell.com>
Date: Wed, 19 Aug 2020 23:29:28 +0300

> Fixes: e4917d46a65 ("qede: Add aRFS support")

This Fixes tag only has 11 digits of SHA1, when you should
provide 12 like the other two patches in this series do.

Thank you.

^ permalink raw reply	[flat|nested] 19+ messages in thread

* [PATCH net 0/3] net: qed disable aRFS in NPAR and 100G
  2020-08-19 20:29 [PATCH net 0/3] net: qed disable aRFS in NPAR and 100G Dmitry Bogdanov
                   ` (2 preceding siblings ...)
  2020-08-19 20:29 ` [PATCH net 3/3] net: qed: RDMA personality shouldn't fail VF load Dmitry Bogdanov
@ 2020-08-20 11:08 ` Dmitry Bogdanov
  2020-08-21 11:45 ` Dmitry Bogdanov
                   ` (2 subsequent siblings)
  6 siblings, 0 replies; 19+ messages in thread
From: Dmitry Bogdanov @ 2020-08-20 11:08 UTC (permalink / raw)
  To: netdev, David S . Miller; +Cc: Dmitry Bogdanov

This patchset fixes some recent issues found by customers.

v2:
  correct hash in Fixes tag

Dmitry Bogdanov (3):
  net: qed: Disable aRFS for NPAR and 100G
  net: qede: Disable aRFS for NPAR and 100G
  qed: RDMA personality shouldn't fail VF load

 drivers/net/ethernet/qlogic/qed/qed_dev.c      | 11 ++++++++++-
 drivers/net/ethernet/qlogic/qed/qed_l2.c       |  3 +++
 drivers/net/ethernet/qlogic/qed/qed_main.c     |  2 ++
 drivers/net/ethernet/qlogic/qed/qed_sriov.c    |  1 +
 drivers/net/ethernet/qlogic/qede/qede_filter.c |  3 +++
 drivers/net/ethernet/qlogic/qede/qede_main.c   | 11 +++++------
 include/linux/qed/qed_if.h                     |  1 +
 7 files changed, 25 insertions(+), 7 deletions(-)

-- 
2.17.1


^ permalink raw reply	[flat|nested] 19+ messages in thread

* [PATCH net 1/3] net: qed: Disable aRFS for NPAR and 100G
  2020-08-19 20:29 ` [PATCH net 1/3] net: qed: Disable aRFS for " Dmitry Bogdanov
@ 2020-08-20 11:08   ` Dmitry Bogdanov
  2020-08-21 11:51   ` [PATCH v2, " Dmitry Bogdanov
                     ` (2 subsequent siblings)
  3 siblings, 0 replies; 19+ messages in thread
From: Dmitry Bogdanov @ 2020-08-20 11:08 UTC (permalink / raw)
  To: netdev, David S . Miller
  Cc: Dmitry Bogdanov, Manish Chopra, Igor Russkikh, Michal Kalderon

In CMT and NPAR the PF is unknown when the GFS block processes the
packet. Therefore cannot use searcher as it has a per PF database,
and thus ARFS must be disabled.

Fixes: d51e4af5c209 ("qed: aRFS infrastructure support")
Signed-off-by: Manish Chopra <manishc@marvell.com>
Signed-off-by: Igor Russkikh <irusskikh@marvell.com>
Signed-off-by: Michal Kalderon <michal.kalderon@marvell.com>
Signed-off-by: Dmitry Bogdanov <dbogdanov@marvell.com>
---
 drivers/net/ethernet/qlogic/qed/qed_dev.c  | 11 ++++++++++-
 drivers/net/ethernet/qlogic/qed/qed_l2.c   |  3 +++
 drivers/net/ethernet/qlogic/qed/qed_main.c |  2 ++
 include/linux/qed/qed_if.h                 |  1 +
 4 files changed, 16 insertions(+), 1 deletion(-)

diff --git a/drivers/net/ethernet/qlogic/qed/qed_dev.c b/drivers/net/ethernet/qlogic/qed/qed_dev.c
index b3c9ebaf2280..c78a48ae9ea6 100644
--- a/drivers/net/ethernet/qlogic/qed/qed_dev.c
+++ b/drivers/net/ethernet/qlogic/qed/qed_dev.c
@@ -4253,7 +4253,8 @@ static int qed_hw_get_nvm_info(struct qed_hwfn *p_hwfn, struct qed_ptt *p_ptt)
 			cdev->mf_bits = BIT(QED_MF_LLH_MAC_CLSS) |
 					BIT(QED_MF_LLH_PROTO_CLSS) |
 					BIT(QED_MF_LL2_NON_UNICAST) |
-					BIT(QED_MF_INTER_PF_SWITCH);
+					BIT(QED_MF_INTER_PF_SWITCH) |
+					BIT(QED_MF_DISABLE_ARFS);
 			break;
 		case NVM_CFG1_GLOB_MF_MODE_DEFAULT:
 			cdev->mf_bits = BIT(QED_MF_LLH_MAC_CLSS) |
@@ -4266,6 +4267,14 @@ static int qed_hw_get_nvm_info(struct qed_hwfn *p_hwfn, struct qed_ptt *p_ptt)
 
 		DP_INFO(p_hwfn, "Multi function mode is 0x%lx\n",
 			cdev->mf_bits);
+
+		/* In CMT the PF is unknown when the GFS block processes the
+		 * packet. Therefore cannot use searcher as it has a per PF
+		 * database, and thus ARFS must be disabled.
+		 *
+		 */
+		if (QED_IS_CMT(cdev))
+			cdev->mf_bits |= BIT(QED_MF_DISABLE_ARFS);
 	}
 
 	DP_INFO(p_hwfn, "Multi function mode is 0x%lx\n",
diff --git a/drivers/net/ethernet/qlogic/qed/qed_l2.c b/drivers/net/ethernet/qlogic/qed/qed_l2.c
index 4c6ac8862744..07824bf9d68d 100644
--- a/drivers/net/ethernet/qlogic/qed/qed_l2.c
+++ b/drivers/net/ethernet/qlogic/qed/qed_l2.c
@@ -1980,6 +1980,9 @@ void qed_arfs_mode_configure(struct qed_hwfn *p_hwfn,
 			     struct qed_ptt *p_ptt,
 			     struct qed_arfs_config_params *p_cfg_params)
 {
+	if (test_bit(QED_MF_DISABLE_ARFS, &p_hwfn->cdev->mf_bits))
+		return;
+
 	if (p_cfg_params->mode != QED_FILTER_CONFIG_MODE_DISABLE) {
 		qed_gft_config(p_hwfn, p_ptt, p_hwfn->rel_pf_id,
 			       p_cfg_params->tcp,
diff --git a/drivers/net/ethernet/qlogic/qed/qed_main.c b/drivers/net/ethernet/qlogic/qed/qed_main.c
index 2558cb680db3..309216ff7a84 100644
--- a/drivers/net/ethernet/qlogic/qed/qed_main.c
+++ b/drivers/net/ethernet/qlogic/qed/qed_main.c
@@ -444,6 +444,8 @@ int qed_fill_dev_info(struct qed_dev *cdev,
 		dev_info->fw_eng = FW_ENGINEERING_VERSION;
 		dev_info->b_inter_pf_switch = test_bit(QED_MF_INTER_PF_SWITCH,
 						       &cdev->mf_bits);
+		if (!test_bit(QED_MF_DISABLE_ARFS, &cdev->mf_bits))
+			dev_info->b_arfs_capable = true;
 		dev_info->tx_switching = true;
 
 		if (hw_info->b_wol_support == QED_WOL_SUPPORT_PME)
diff --git a/include/linux/qed/qed_if.h b/include/linux/qed/qed_if.h
index cd6a5c7e56eb..cdd73afc4c46 100644
--- a/include/linux/qed/qed_if.h
+++ b/include/linux/qed/qed_if.h
@@ -623,6 +623,7 @@ struct qed_dev_info {
 #define QED_MFW_VERSION_3_OFFSET	24
 
 	u32		flash_size;
+	bool		b_arfs_capable;
 	bool		b_inter_pf_switch;
 	bool		tx_switching;
 	bool		rdma_supported;
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [PATCH net 2/3] net: qede: Disable aRFS for NPAR and 100G
  2020-08-19 20:29 ` [PATCH net 2/3] net: qede: " Dmitry Bogdanov
  2020-08-19 22:49   ` David Miller
@ 2020-08-20 11:08   ` Dmitry Bogdanov
  2020-08-21 11:51   ` [PATCH v2, " Dmitry Bogdanov
  2020-08-31  9:43   ` [PATCH v2 " Dmitry Bogdanov
  3 siblings, 0 replies; 19+ messages in thread
From: Dmitry Bogdanov @ 2020-08-20 11:08 UTC (permalink / raw)
  To: netdev, David S . Miller
  Cc: Dmitry Bogdanov, Manish Chopra, Igor Russkikh, Michal Kalderon

In some configurations ARFS cannot be used, so disable it if device
is not capable.

Fixes: e4917d46a653 ("qede: Add aRFS support")
Signed-off-by: Manish Chopra <manishc@marvell.com>
Signed-off-by: Igor Russkikh <irusskikh@marvell.com>
Signed-off-by: Michal Kalderon <michal.kalderon@marvell.com>
Signed-off-by: Dmitry Bogdanov <dbogdanov@marvell.com>
---
 drivers/net/ethernet/qlogic/qede/qede_filter.c |  3 +++
 drivers/net/ethernet/qlogic/qede/qede_main.c   | 11 +++++------
 2 files changed, 8 insertions(+), 6 deletions(-)

diff --git a/drivers/net/ethernet/qlogic/qede/qede_filter.c b/drivers/net/ethernet/qlogic/qede/qede_filter.c
index f961f65d9372..c59b72c90293 100644
--- a/drivers/net/ethernet/qlogic/qede/qede_filter.c
+++ b/drivers/net/ethernet/qlogic/qede/qede_filter.c
@@ -311,6 +311,9 @@ int qede_alloc_arfs(struct qede_dev *edev)
 {
 	int i;
 
+	if (!edev->dev_info.common.b_arfs_capable)
+		return -EINVAL;
+
 	edev->arfs = vzalloc(sizeof(*edev->arfs));
 	if (!edev->arfs)
 		return -ENOMEM;
diff --git a/drivers/net/ethernet/qlogic/qede/qede_main.c b/drivers/net/ethernet/qlogic/qede/qede_main.c
index 140a392a81bb..9e1f41ba766c 100644
--- a/drivers/net/ethernet/qlogic/qede/qede_main.c
+++ b/drivers/net/ethernet/qlogic/qede/qede_main.c
@@ -804,7 +804,7 @@ static void qede_init_ndev(struct qede_dev *edev)
 		      NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM |
 		      NETIF_F_TSO | NETIF_F_TSO6 | NETIF_F_HW_TC;
 
-	if (!IS_VF(edev) && edev->dev_info.common.num_hwfns == 1)
+	if (edev->dev_info.common.b_arfs_capable)
 		hw_features |= NETIF_F_NTUPLE;
 
 	if (edev->dev_info.common.vxlan_enable ||
@@ -2274,7 +2274,7 @@ static void qede_unload(struct qede_dev *edev, enum qede_unload_mode mode,
 	qede_vlan_mark_nonconfigured(edev);
 	edev->ops->fastpath_stop(edev->cdev);
 
-	if (!IS_VF(edev) && edev->dev_info.common.num_hwfns == 1) {
+	if (edev->dev_info.common.b_arfs_capable) {
 		qede_poll_for_freeing_arfs_filters(edev);
 		qede_free_arfs(edev);
 	}
@@ -2341,10 +2341,9 @@ static int qede_load(struct qede_dev *edev, enum qede_load_mode mode,
 	if (rc)
 		goto err2;
 
-	if (!IS_VF(edev) && edev->dev_info.common.num_hwfns == 1) {
-		rc = qede_alloc_arfs(edev);
-		if (rc)
-			DP_NOTICE(edev, "aRFS memory allocation failed\n");
+	if (qede_alloc_arfs(edev)) {
+		edev->ndev->features &= ~NETIF_F_NTUPLE;
+		edev->dev_info.common.b_arfs_capable = false;
 	}
 
 	qede_napi_add_enable(edev);
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [PATCH net 3/3] net: qed: RDMA personality shouldn't fail VF load
  2020-08-19 20:29 ` [PATCH net 3/3] net: qed: RDMA personality shouldn't fail VF load Dmitry Bogdanov
@ 2020-08-20 11:08   ` Dmitry Bogdanov
  2020-08-21 11:51   ` [PATCH v2, " Dmitry Bogdanov
  2020-08-31  9:43   ` [PATCH v2 " Dmitry Bogdanov
  2 siblings, 0 replies; 19+ messages in thread
From: Dmitry Bogdanov @ 2020-08-20 11:08 UTC (permalink / raw)
  To: netdev, David S . Miller; +Cc: Dmitry Bogdanov, Igor Russkikh, Michal Kalderon

Fix the assert during VF driver installation when the personality is iWARP

Fixes: 1fe614d10f45 ("qed: Relax VF firmware requirements")
Signed-off-by: Igor Russkikh <irusskikh@marvell.com>
Signed-off-by: Michal Kalderon <michal.kalderon@marvell.com>
Signed-off-by: Dmitry Bogdanov <dbogdanov@marvell.com>
---
 drivers/net/ethernet/qlogic/qed/qed_sriov.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/net/ethernet/qlogic/qed/qed_sriov.c b/drivers/net/ethernet/qlogic/qed/qed_sriov.c
index f1f75b6d0421..b8dc5c4591ef 100644
--- a/drivers/net/ethernet/qlogic/qed/qed_sriov.c
+++ b/drivers/net/ethernet/qlogic/qed/qed_sriov.c
@@ -71,6 +71,7 @@ static int qed_sp_vf_start(struct qed_hwfn *p_hwfn, struct qed_vf_info *p_vf)
 		p_ramrod->personality = PERSONALITY_ETH;
 		break;
 	case QED_PCI_ETH_ROCE:
+	case QED_PCI_ETH_IWARP:
 		p_ramrod->personality = PERSONALITY_RDMA_AND_ETH;
 		break;
 	default:
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 19+ messages in thread

* RE: [PATCH net 0/3] net: qed disable aRFS in NPAR and 100G
  2020-08-19 20:29 [PATCH net 0/3] net: qed disable aRFS in NPAR and 100G Dmitry Bogdanov
                   ` (3 preceding siblings ...)
  2020-08-20 11:08 ` [PATCH net 0/3] net: qed disable aRFS in NPAR and 100G Dmitry Bogdanov
@ 2020-08-21 11:45 ` Dmitry Bogdanov
  2020-08-21 11:51 ` [PATCH v2, " Dmitry Bogdanov
  2020-08-31  9:43 ` [PATCH v2 " Dmitry Bogdanov
  6 siblings, 0 replies; 19+ messages in thread
From: Dmitry Bogdanov @ 2020-08-21 11:45 UTC (permalink / raw)
  To: netdev, David S . Miller

Forgot to indicate "v2" in the subject, please ignore it then.
Will resend with v2 in the subject.

-----Original Message-----
From: Dmitry Bogdanov <dbogdanov@marvell.com> 
Sent: Thursday, August 20, 2020 2:08 PM
To: netdev@vger.kernel.org; David S . Miller <davem@davemloft.net>
Cc: Dmitry Bogdanov <dbogdanov@marvell.com>
Subject: [PATCH net 0/3] net: qed disable aRFS in NPAR and 100G

This patchset fixes some recent issues found by customers.

v2:
  correct hash in Fixes tag

Dmitry Bogdanov (3):
  net: qed: Disable aRFS for NPAR and 100G
  net: qede: Disable aRFS for NPAR and 100G
  qed: RDMA personality shouldn't fail VF load

 drivers/net/ethernet/qlogic/qed/qed_dev.c      | 11 ++++++++++-
 drivers/net/ethernet/qlogic/qed/qed_l2.c       |  3 +++
 drivers/net/ethernet/qlogic/qed/qed_main.c     |  2 ++
 drivers/net/ethernet/qlogic/qed/qed_sriov.c    |  1 +
 drivers/net/ethernet/qlogic/qede/qede_filter.c |  3 +++
 drivers/net/ethernet/qlogic/qede/qede_main.c   | 11 +++++------
 include/linux/qed/qed_if.h                     |  1 +
 7 files changed, 25 insertions(+), 7 deletions(-)

-- 
2.17.1


^ permalink raw reply	[flat|nested] 19+ messages in thread

* [PATCH v2, net 0/3] net: qed disable aRFS in NPAR and 100G
  2020-08-19 20:29 [PATCH net 0/3] net: qed disable aRFS in NPAR and 100G Dmitry Bogdanov
                   ` (4 preceding siblings ...)
  2020-08-21 11:45 ` Dmitry Bogdanov
@ 2020-08-21 11:51 ` Dmitry Bogdanov
  2020-08-31  9:43 ` [PATCH v2 " Dmitry Bogdanov
  6 siblings, 0 replies; 19+ messages in thread
From: Dmitry Bogdanov @ 2020-08-21 11:51 UTC (permalink / raw)
  To: netdev, David S . Miller; +Cc: Dmitry Bogdanov

This patchset fixes some recent issues found by customers.

v2:
  correct hash in Fixes tag

Dmitry Bogdanov (3):
  net: qed: Disable aRFS for NPAR and 100G
  net: qede: Disable aRFS for NPAR and 100G
  qed: RDMA personality shouldn't fail VF load

 drivers/net/ethernet/qlogic/qed/qed_dev.c      | 11 ++++++++++-
 drivers/net/ethernet/qlogic/qed/qed_l2.c       |  3 +++
 drivers/net/ethernet/qlogic/qed/qed_main.c     |  2 ++
 drivers/net/ethernet/qlogic/qed/qed_sriov.c    |  1 +
 drivers/net/ethernet/qlogic/qede/qede_filter.c |  3 +++
 drivers/net/ethernet/qlogic/qede/qede_main.c   | 11 +++++------
 include/linux/qed/qed_if.h                     |  1 +
 7 files changed, 25 insertions(+), 7 deletions(-)

-- 
2.17.1


^ permalink raw reply	[flat|nested] 19+ messages in thread

* [PATCH v2, net 1/3] net: qed: Disable aRFS for NPAR and 100G
  2020-08-19 20:29 ` [PATCH net 1/3] net: qed: Disable aRFS for " Dmitry Bogdanov
  2020-08-20 11:08   ` Dmitry Bogdanov
@ 2020-08-21 11:51   ` Dmitry Bogdanov
  2020-08-31  9:43   ` [PATCH v2 " Dmitry Bogdanov
  2020-09-01 15:29   ` Igor Russkikh
  3 siblings, 0 replies; 19+ messages in thread
From: Dmitry Bogdanov @ 2020-08-21 11:51 UTC (permalink / raw)
  To: netdev, David S . Miller
  Cc: Dmitry Bogdanov, Manish Chopra, Igor Russkikh, Michal Kalderon

In CMT and NPAR the PF is unknown when the GFS block processes the
packet. Therefore cannot use searcher as it has a per PF database,
and thus ARFS must be disabled.

Fixes: d51e4af5c209 ("qed: aRFS infrastructure support")
Signed-off-by: Manish Chopra <manishc@marvell.com>
Signed-off-by: Igor Russkikh <irusskikh@marvell.com>
Signed-off-by: Michal Kalderon <michal.kalderon@marvell.com>
Signed-off-by: Dmitry Bogdanov <dbogdanov@marvell.com>
---
 drivers/net/ethernet/qlogic/qed/qed_dev.c  | 11 ++++++++++-
 drivers/net/ethernet/qlogic/qed/qed_l2.c   |  3 +++
 drivers/net/ethernet/qlogic/qed/qed_main.c |  2 ++
 include/linux/qed/qed_if.h                 |  1 +
 4 files changed, 16 insertions(+), 1 deletion(-)

diff --git a/drivers/net/ethernet/qlogic/qed/qed_dev.c b/drivers/net/ethernet/qlogic/qed/qed_dev.c
index b3c9ebaf2280..c78a48ae9ea6 100644
--- a/drivers/net/ethernet/qlogic/qed/qed_dev.c
+++ b/drivers/net/ethernet/qlogic/qed/qed_dev.c
@@ -4253,7 +4253,8 @@ static int qed_hw_get_nvm_info(struct qed_hwfn *p_hwfn, struct qed_ptt *p_ptt)
 			cdev->mf_bits = BIT(QED_MF_LLH_MAC_CLSS) |
 					BIT(QED_MF_LLH_PROTO_CLSS) |
 					BIT(QED_MF_LL2_NON_UNICAST) |
-					BIT(QED_MF_INTER_PF_SWITCH);
+					BIT(QED_MF_INTER_PF_SWITCH) |
+					BIT(QED_MF_DISABLE_ARFS);
 			break;
 		case NVM_CFG1_GLOB_MF_MODE_DEFAULT:
 			cdev->mf_bits = BIT(QED_MF_LLH_MAC_CLSS) |
@@ -4266,6 +4267,14 @@ static int qed_hw_get_nvm_info(struct qed_hwfn *p_hwfn, struct qed_ptt *p_ptt)
 
 		DP_INFO(p_hwfn, "Multi function mode is 0x%lx\n",
 			cdev->mf_bits);
+
+		/* In CMT the PF is unknown when the GFS block processes the
+		 * packet. Therefore cannot use searcher as it has a per PF
+		 * database, and thus ARFS must be disabled.
+		 *
+		 */
+		if (QED_IS_CMT(cdev))
+			cdev->mf_bits |= BIT(QED_MF_DISABLE_ARFS);
 	}
 
 	DP_INFO(p_hwfn, "Multi function mode is 0x%lx\n",
diff --git a/drivers/net/ethernet/qlogic/qed/qed_l2.c b/drivers/net/ethernet/qlogic/qed/qed_l2.c
index 4c6ac8862744..07824bf9d68d 100644
--- a/drivers/net/ethernet/qlogic/qed/qed_l2.c
+++ b/drivers/net/ethernet/qlogic/qed/qed_l2.c
@@ -1980,6 +1980,9 @@ void qed_arfs_mode_configure(struct qed_hwfn *p_hwfn,
 			     struct qed_ptt *p_ptt,
 			     struct qed_arfs_config_params *p_cfg_params)
 {
+	if (test_bit(QED_MF_DISABLE_ARFS, &p_hwfn->cdev->mf_bits))
+		return;
+
 	if (p_cfg_params->mode != QED_FILTER_CONFIG_MODE_DISABLE) {
 		qed_gft_config(p_hwfn, p_ptt, p_hwfn->rel_pf_id,
 			       p_cfg_params->tcp,
diff --git a/drivers/net/ethernet/qlogic/qed/qed_main.c b/drivers/net/ethernet/qlogic/qed/qed_main.c
index 2558cb680db3..309216ff7a84 100644
--- a/drivers/net/ethernet/qlogic/qed/qed_main.c
+++ b/drivers/net/ethernet/qlogic/qed/qed_main.c
@@ -444,6 +444,8 @@ int qed_fill_dev_info(struct qed_dev *cdev,
 		dev_info->fw_eng = FW_ENGINEERING_VERSION;
 		dev_info->b_inter_pf_switch = test_bit(QED_MF_INTER_PF_SWITCH,
 						       &cdev->mf_bits);
+		if (!test_bit(QED_MF_DISABLE_ARFS, &cdev->mf_bits))
+			dev_info->b_arfs_capable = true;
 		dev_info->tx_switching = true;
 
 		if (hw_info->b_wol_support == QED_WOL_SUPPORT_PME)
diff --git a/include/linux/qed/qed_if.h b/include/linux/qed/qed_if.h
index cd6a5c7e56eb..cdd73afc4c46 100644
--- a/include/linux/qed/qed_if.h
+++ b/include/linux/qed/qed_if.h
@@ -623,6 +623,7 @@ struct qed_dev_info {
 #define QED_MFW_VERSION_3_OFFSET	24
 
 	u32		flash_size;
+	bool		b_arfs_capable;
 	bool		b_inter_pf_switch;
 	bool		tx_switching;
 	bool		rdma_supported;
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [PATCH v2, net 2/3] net: qede: Disable aRFS for NPAR and 100G
  2020-08-19 20:29 ` [PATCH net 2/3] net: qede: " Dmitry Bogdanov
  2020-08-19 22:49   ` David Miller
  2020-08-20 11:08   ` Dmitry Bogdanov
@ 2020-08-21 11:51   ` Dmitry Bogdanov
  2020-08-31  9:43   ` [PATCH v2 " Dmitry Bogdanov
  3 siblings, 0 replies; 19+ messages in thread
From: Dmitry Bogdanov @ 2020-08-21 11:51 UTC (permalink / raw)
  To: netdev, David S . Miller
  Cc: Dmitry Bogdanov, Manish Chopra, Igor Russkikh, Michal Kalderon

In some configurations ARFS cannot be used, so disable it if device
is not capable.

Fixes: e4917d46a653 ("qede: Add aRFS support")
Signed-off-by: Manish Chopra <manishc@marvell.com>
Signed-off-by: Igor Russkikh <irusskikh@marvell.com>
Signed-off-by: Michal Kalderon <michal.kalderon@marvell.com>
Signed-off-by: Dmitry Bogdanov <dbogdanov@marvell.com>
---
 drivers/net/ethernet/qlogic/qede/qede_filter.c |  3 +++
 drivers/net/ethernet/qlogic/qede/qede_main.c   | 11 +++++------
 2 files changed, 8 insertions(+), 6 deletions(-)

diff --git a/drivers/net/ethernet/qlogic/qede/qede_filter.c b/drivers/net/ethernet/qlogic/qede/qede_filter.c
index f961f65d9372..c59b72c90293 100644
--- a/drivers/net/ethernet/qlogic/qede/qede_filter.c
+++ b/drivers/net/ethernet/qlogic/qede/qede_filter.c
@@ -311,6 +311,9 @@ int qede_alloc_arfs(struct qede_dev *edev)
 {
 	int i;
 
+	if (!edev->dev_info.common.b_arfs_capable)
+		return -EINVAL;
+
 	edev->arfs = vzalloc(sizeof(*edev->arfs));
 	if (!edev->arfs)
 		return -ENOMEM;
diff --git a/drivers/net/ethernet/qlogic/qede/qede_main.c b/drivers/net/ethernet/qlogic/qede/qede_main.c
index 140a392a81bb..9e1f41ba766c 100644
--- a/drivers/net/ethernet/qlogic/qede/qede_main.c
+++ b/drivers/net/ethernet/qlogic/qede/qede_main.c
@@ -804,7 +804,7 @@ static void qede_init_ndev(struct qede_dev *edev)
 		      NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM |
 		      NETIF_F_TSO | NETIF_F_TSO6 | NETIF_F_HW_TC;
 
-	if (!IS_VF(edev) && edev->dev_info.common.num_hwfns == 1)
+	if (edev->dev_info.common.b_arfs_capable)
 		hw_features |= NETIF_F_NTUPLE;
 
 	if (edev->dev_info.common.vxlan_enable ||
@@ -2274,7 +2274,7 @@ static void qede_unload(struct qede_dev *edev, enum qede_unload_mode mode,
 	qede_vlan_mark_nonconfigured(edev);
 	edev->ops->fastpath_stop(edev->cdev);
 
-	if (!IS_VF(edev) && edev->dev_info.common.num_hwfns == 1) {
+	if (edev->dev_info.common.b_arfs_capable) {
 		qede_poll_for_freeing_arfs_filters(edev);
 		qede_free_arfs(edev);
 	}
@@ -2341,10 +2341,9 @@ static int qede_load(struct qede_dev *edev, enum qede_load_mode mode,
 	if (rc)
 		goto err2;
 
-	if (!IS_VF(edev) && edev->dev_info.common.num_hwfns == 1) {
-		rc = qede_alloc_arfs(edev);
-		if (rc)
-			DP_NOTICE(edev, "aRFS memory allocation failed\n");
+	if (qede_alloc_arfs(edev)) {
+		edev->ndev->features &= ~NETIF_F_NTUPLE;
+		edev->dev_info.common.b_arfs_capable = false;
 	}
 
 	qede_napi_add_enable(edev);
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [PATCH v2, net 3/3] net: qed: RDMA personality shouldn't fail VF load
  2020-08-19 20:29 ` [PATCH net 3/3] net: qed: RDMA personality shouldn't fail VF load Dmitry Bogdanov
  2020-08-20 11:08   ` Dmitry Bogdanov
@ 2020-08-21 11:51   ` Dmitry Bogdanov
  2020-08-31  9:43   ` [PATCH v2 " Dmitry Bogdanov
  2 siblings, 0 replies; 19+ messages in thread
From: Dmitry Bogdanov @ 2020-08-21 11:51 UTC (permalink / raw)
  To: netdev, David S . Miller; +Cc: Dmitry Bogdanov, Igor Russkikh, Michal Kalderon

Fix the assert during VF driver installation when the personality is iWARP

Fixes: 1fe614d10f45 ("qed: Relax VF firmware requirements")
Signed-off-by: Igor Russkikh <irusskikh@marvell.com>
Signed-off-by: Michal Kalderon <michal.kalderon@marvell.com>
Signed-off-by: Dmitry Bogdanov <dbogdanov@marvell.com>
---
 drivers/net/ethernet/qlogic/qed/qed_sriov.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/net/ethernet/qlogic/qed/qed_sriov.c b/drivers/net/ethernet/qlogic/qed/qed_sriov.c
index f1f75b6d0421..b8dc5c4591ef 100644
--- a/drivers/net/ethernet/qlogic/qed/qed_sriov.c
+++ b/drivers/net/ethernet/qlogic/qed/qed_sriov.c
@@ -71,6 +71,7 @@ static int qed_sp_vf_start(struct qed_hwfn *p_hwfn, struct qed_vf_info *p_vf)
 		p_ramrod->personality = PERSONALITY_ETH;
 		break;
 	case QED_PCI_ETH_ROCE:
+	case QED_PCI_ETH_IWARP:
 		p_ramrod->personality = PERSONALITY_RDMA_AND_ETH;
 		break;
 	default:
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [PATCH v2 net 0/3] net: qed disable aRFS in NPAR and 100G
  2020-08-19 20:29 [PATCH net 0/3] net: qed disable aRFS in NPAR and 100G Dmitry Bogdanov
                   ` (5 preceding siblings ...)
  2020-08-21 11:51 ` [PATCH v2, " Dmitry Bogdanov
@ 2020-08-31  9:43 ` Dmitry Bogdanov
  6 siblings, 0 replies; 19+ messages in thread
From: Dmitry Bogdanov @ 2020-08-31  9:43 UTC (permalink / raw)
  To: netdev, David S . Miller; +Cc: Dmitry Bogdanov

This patchset fixes some recent issues found by customers.

v2:
  correct hash in Fixes tag

Dmitry Bogdanov (3):
  net: qed: Disable aRFS for NPAR and 100G
  net: qede: Disable aRFS for NPAR and 100G
  qed: RDMA personality shouldn't fail VF load

 drivers/net/ethernet/qlogic/qed/qed_dev.c      | 11 ++++++++++-
 drivers/net/ethernet/qlogic/qed/qed_l2.c       |  3 +++
 drivers/net/ethernet/qlogic/qed/qed_main.c     |  2 ++
 drivers/net/ethernet/qlogic/qed/qed_sriov.c    |  1 +
 drivers/net/ethernet/qlogic/qede/qede_filter.c |  3 +++
 drivers/net/ethernet/qlogic/qede/qede_main.c   | 11 +++++------
 include/linux/qed/qed_if.h                     |  1 +
 7 files changed, 25 insertions(+), 7 deletions(-)

-- 
2.17.1


^ permalink raw reply	[flat|nested] 19+ messages in thread

* [PATCH v2 net 1/3] net: qed: Disable aRFS for NPAR and 100G
  2020-08-19 20:29 ` [PATCH net 1/3] net: qed: Disable aRFS for " Dmitry Bogdanov
  2020-08-20 11:08   ` Dmitry Bogdanov
  2020-08-21 11:51   ` [PATCH v2, " Dmitry Bogdanov
@ 2020-08-31  9:43   ` Dmitry Bogdanov
  2020-09-01 15:29   ` Igor Russkikh
  3 siblings, 0 replies; 19+ messages in thread
From: Dmitry Bogdanov @ 2020-08-31  9:43 UTC (permalink / raw)
  To: netdev, David S . Miller
  Cc: Dmitry Bogdanov, Manish Chopra, Igor Russkikh, Michal Kalderon

In CMT and NPAR the PF is unknown when the GFS block processes the
packet. Therefore cannot use searcher as it has a per PF database,
and thus ARFS must be disabled.

Fixes: d51e4af5c209 ("qed: aRFS infrastructure support")
Signed-off-by: Manish Chopra <manishc@marvell.com>
Signed-off-by: Igor Russkikh <irusskikh@marvell.com>
Signed-off-by: Michal Kalderon <michal.kalderon@marvell.com>
Signed-off-by: Dmitry Bogdanov <dbogdanov@marvell.com>
---
 drivers/net/ethernet/qlogic/qed/qed_dev.c  | 11 ++++++++++-
 drivers/net/ethernet/qlogic/qed/qed_l2.c   |  3 +++
 drivers/net/ethernet/qlogic/qed/qed_main.c |  2 ++
 include/linux/qed/qed_if.h                 |  1 +
 4 files changed, 16 insertions(+), 1 deletion(-)

diff --git a/drivers/net/ethernet/qlogic/qed/qed_dev.c b/drivers/net/ethernet/qlogic/qed/qed_dev.c
index b3c9ebaf2280..c78a48ae9ea6 100644
--- a/drivers/net/ethernet/qlogic/qed/qed_dev.c
+++ b/drivers/net/ethernet/qlogic/qed/qed_dev.c
@@ -4253,7 +4253,8 @@ static int qed_hw_get_nvm_info(struct qed_hwfn *p_hwfn, struct qed_ptt *p_ptt)
 			cdev->mf_bits = BIT(QED_MF_LLH_MAC_CLSS) |
 					BIT(QED_MF_LLH_PROTO_CLSS) |
 					BIT(QED_MF_LL2_NON_UNICAST) |
-					BIT(QED_MF_INTER_PF_SWITCH);
+					BIT(QED_MF_INTER_PF_SWITCH) |
+					BIT(QED_MF_DISABLE_ARFS);
 			break;
 		case NVM_CFG1_GLOB_MF_MODE_DEFAULT:
 			cdev->mf_bits = BIT(QED_MF_LLH_MAC_CLSS) |
@@ -4266,6 +4267,14 @@ static int qed_hw_get_nvm_info(struct qed_hwfn *p_hwfn, struct qed_ptt *p_ptt)
 
 		DP_INFO(p_hwfn, "Multi function mode is 0x%lx\n",
 			cdev->mf_bits);
+
+		/* In CMT the PF is unknown when the GFS block processes the
+		 * packet. Therefore cannot use searcher as it has a per PF
+		 * database, and thus ARFS must be disabled.
+		 *
+		 */
+		if (QED_IS_CMT(cdev))
+			cdev->mf_bits |= BIT(QED_MF_DISABLE_ARFS);
 	}
 
 	DP_INFO(p_hwfn, "Multi function mode is 0x%lx\n",
diff --git a/drivers/net/ethernet/qlogic/qed/qed_l2.c b/drivers/net/ethernet/qlogic/qed/qed_l2.c
index 4c6ac8862744..07824bf9d68d 100644
--- a/drivers/net/ethernet/qlogic/qed/qed_l2.c
+++ b/drivers/net/ethernet/qlogic/qed/qed_l2.c
@@ -1980,6 +1980,9 @@ void qed_arfs_mode_configure(struct qed_hwfn *p_hwfn,
 			     struct qed_ptt *p_ptt,
 			     struct qed_arfs_config_params *p_cfg_params)
 {
+	if (test_bit(QED_MF_DISABLE_ARFS, &p_hwfn->cdev->mf_bits))
+		return;
+
 	if (p_cfg_params->mode != QED_FILTER_CONFIG_MODE_DISABLE) {
 		qed_gft_config(p_hwfn, p_ptt, p_hwfn->rel_pf_id,
 			       p_cfg_params->tcp,
diff --git a/drivers/net/ethernet/qlogic/qed/qed_main.c b/drivers/net/ethernet/qlogic/qed/qed_main.c
index 2558cb680db3..309216ff7a84 100644
--- a/drivers/net/ethernet/qlogic/qed/qed_main.c
+++ b/drivers/net/ethernet/qlogic/qed/qed_main.c
@@ -444,6 +444,8 @@ int qed_fill_dev_info(struct qed_dev *cdev,
 		dev_info->fw_eng = FW_ENGINEERING_VERSION;
 		dev_info->b_inter_pf_switch = test_bit(QED_MF_INTER_PF_SWITCH,
 						       &cdev->mf_bits);
+		if (!test_bit(QED_MF_DISABLE_ARFS, &cdev->mf_bits))
+			dev_info->b_arfs_capable = true;
 		dev_info->tx_switching = true;
 
 		if (hw_info->b_wol_support == QED_WOL_SUPPORT_PME)
diff --git a/include/linux/qed/qed_if.h b/include/linux/qed/qed_if.h
index cd6a5c7e56eb..cdd73afc4c46 100644
--- a/include/linux/qed/qed_if.h
+++ b/include/linux/qed/qed_if.h
@@ -623,6 +623,7 @@ struct qed_dev_info {
 #define QED_MFW_VERSION_3_OFFSET	24
 
 	u32		flash_size;
+	bool		b_arfs_capable;
 	bool		b_inter_pf_switch;
 	bool		tx_switching;
 	bool		rdma_supported;
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [PATCH v2 net 2/3] net: qede: Disable aRFS for NPAR and 100G
  2020-08-19 20:29 ` [PATCH net 2/3] net: qede: " Dmitry Bogdanov
                     ` (2 preceding siblings ...)
  2020-08-21 11:51   ` [PATCH v2, " Dmitry Bogdanov
@ 2020-08-31  9:43   ` Dmitry Bogdanov
  3 siblings, 0 replies; 19+ messages in thread
From: Dmitry Bogdanov @ 2020-08-31  9:43 UTC (permalink / raw)
  To: netdev, David S . Miller
  Cc: Dmitry Bogdanov, Manish Chopra, Igor Russkikh, Michal Kalderon

In some configurations ARFS cannot be used, so disable it if device
is not capable.

Fixes: e4917d46a653 ("qede: Add aRFS support")
Signed-off-by: Manish Chopra <manishc@marvell.com>
Signed-off-by: Igor Russkikh <irusskikh@marvell.com>
Signed-off-by: Michal Kalderon <michal.kalderon@marvell.com>
Signed-off-by: Dmitry Bogdanov <dbogdanov@marvell.com>
---
 drivers/net/ethernet/qlogic/qede/qede_filter.c |  3 +++
 drivers/net/ethernet/qlogic/qede/qede_main.c   | 11 +++++------
 2 files changed, 8 insertions(+), 6 deletions(-)

diff --git a/drivers/net/ethernet/qlogic/qede/qede_filter.c b/drivers/net/ethernet/qlogic/qede/qede_filter.c
index f961f65d9372..c59b72c90293 100644
--- a/drivers/net/ethernet/qlogic/qede/qede_filter.c
+++ b/drivers/net/ethernet/qlogic/qede/qede_filter.c
@@ -311,6 +311,9 @@ int qede_alloc_arfs(struct qede_dev *edev)
 {
 	int i;
 
+	if (!edev->dev_info.common.b_arfs_capable)
+		return -EINVAL;
+
 	edev->arfs = vzalloc(sizeof(*edev->arfs));
 	if (!edev->arfs)
 		return -ENOMEM;
diff --git a/drivers/net/ethernet/qlogic/qede/qede_main.c b/drivers/net/ethernet/qlogic/qede/qede_main.c
index 140a392a81bb..9e1f41ba766c 100644
--- a/drivers/net/ethernet/qlogic/qede/qede_main.c
+++ b/drivers/net/ethernet/qlogic/qede/qede_main.c
@@ -804,7 +804,7 @@ static void qede_init_ndev(struct qede_dev *edev)
 		      NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM |
 		      NETIF_F_TSO | NETIF_F_TSO6 | NETIF_F_HW_TC;
 
-	if (!IS_VF(edev) && edev->dev_info.common.num_hwfns == 1)
+	if (edev->dev_info.common.b_arfs_capable)
 		hw_features |= NETIF_F_NTUPLE;
 
 	if (edev->dev_info.common.vxlan_enable ||
@@ -2274,7 +2274,7 @@ static void qede_unload(struct qede_dev *edev, enum qede_unload_mode mode,
 	qede_vlan_mark_nonconfigured(edev);
 	edev->ops->fastpath_stop(edev->cdev);
 
-	if (!IS_VF(edev) && edev->dev_info.common.num_hwfns == 1) {
+	if (edev->dev_info.common.b_arfs_capable) {
 		qede_poll_for_freeing_arfs_filters(edev);
 		qede_free_arfs(edev);
 	}
@@ -2341,10 +2341,9 @@ static int qede_load(struct qede_dev *edev, enum qede_load_mode mode,
 	if (rc)
 		goto err2;
 
-	if (!IS_VF(edev) && edev->dev_info.common.num_hwfns == 1) {
-		rc = qede_alloc_arfs(edev);
-		if (rc)
-			DP_NOTICE(edev, "aRFS memory allocation failed\n");
+	if (qede_alloc_arfs(edev)) {
+		edev->ndev->features &= ~NETIF_F_NTUPLE;
+		edev->dev_info.common.b_arfs_capable = false;
 	}
 
 	qede_napi_add_enable(edev);
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [PATCH v2 net 3/3] net: qed: RDMA personality shouldn't fail VF load
  2020-08-19 20:29 ` [PATCH net 3/3] net: qed: RDMA personality shouldn't fail VF load Dmitry Bogdanov
  2020-08-20 11:08   ` Dmitry Bogdanov
  2020-08-21 11:51   ` [PATCH v2, " Dmitry Bogdanov
@ 2020-08-31  9:43   ` Dmitry Bogdanov
  2 siblings, 0 replies; 19+ messages in thread
From: Dmitry Bogdanov @ 2020-08-31  9:43 UTC (permalink / raw)
  To: netdev, David S . Miller; +Cc: Dmitry Bogdanov, Igor Russkikh, Michal Kalderon

Fix the assert during VF driver installation when the personality is iWARP

Fixes: 1fe614d10f45 ("qed: Relax VF firmware requirements")
Signed-off-by: Igor Russkikh <irusskikh@marvell.com>
Signed-off-by: Michal Kalderon <michal.kalderon@marvell.com>
Signed-off-by: Dmitry Bogdanov <dbogdanov@marvell.com>
---
 drivers/net/ethernet/qlogic/qed/qed_sriov.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/net/ethernet/qlogic/qed/qed_sriov.c b/drivers/net/ethernet/qlogic/qed/qed_sriov.c
index f1f75b6d0421..b8dc5c4591ef 100644
--- a/drivers/net/ethernet/qlogic/qed/qed_sriov.c
+++ b/drivers/net/ethernet/qlogic/qed/qed_sriov.c
@@ -71,6 +71,7 @@ static int qed_sp_vf_start(struct qed_hwfn *p_hwfn, struct qed_vf_info *p_vf)
 		p_ramrod->personality = PERSONALITY_ETH;
 		break;
 	case QED_PCI_ETH_ROCE:
+	case QED_PCI_ETH_IWARP:
 		p_ramrod->personality = PERSONALITY_RDMA_AND_ETH;
 		break;
 	default:
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 19+ messages in thread

* Re: [PATCH v2 net 1/3] net: qed: Disable aRFS for NPAR and 100G
  2020-08-19 20:29 ` [PATCH net 1/3] net: qed: Disable aRFS for " Dmitry Bogdanov
                     ` (2 preceding siblings ...)
  2020-08-31  9:43   ` [PATCH v2 " Dmitry Bogdanov
@ 2020-09-01 15:29   ` Igor Russkikh
  3 siblings, 0 replies; 19+ messages in thread
From: Igor Russkikh @ 2020-09-01 15:29 UTC (permalink / raw)
  To: Dmitry Bogdanov, netdev, David S . Miller; +Cc: Manish Chopra, Michal Kalderon

Hi David,

Strangely I don't see this series from Dmitry on patchwork, but emails seems
reached the list correctly:

https://lore.kernel.org/netdev/20200831094326.0mIWCNw1jJrHOif9nW17zot9j5BvO_ZP0orBrhmv6KE@z/

Could you please help with that?

Thanks,
  Igor

On 31/08/2020 12:43 pm, Dmitry Bogdanov wrote:
> In CMT and NPAR the PF is unknown when the GFS block processes the
> packet. Therefore cannot use searcher as it has a per PF database,
> and thus ARFS must be disabled.
> 
> Fixes: d51e4af5c209 ("qed: aRFS infrastructure support")
> Signed-off-by: Manish Chopra <manishc@marvell.com>
> Signed-off-by: Igor Russkikh <irusskikh@marvell.com>
> Signed-off-by: Michal Kalderon <michal.kalderon@marvell.com>
> Signed-off-by: Dmitry Bogdanov <dbogdanov@marvell.com>
> ---
>  drivers/net/ethernet/qlogic/qed/qed_dev.c  | 11 ++++++++++-
>  drivers/net/ethernet/qlogic/qed/qed_l2.c   |  3 +++
>  drivers/net/ethernet/qlogic/qed/qed_main.c |  2 ++
>  include/linux/qed/qed_if.h                 |  1 +
>  4 files changed, 16 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/net/ethernet/qlogic/qed/qed_dev.c
> b/drivers/net/ethernet/qlogic/qed/qed_dev.c
> index b3c9ebaf2280..c78a48ae9ea6 100644
> --- a/drivers/net/ethernet/qlogic/qed/qed_dev.c
> +++ b/drivers/net/ethernet/qlogic/qed/qed_dev.c
> @@ -4253,7 +4253,8 @@ static int qed_hw_get_nvm_info(struct qed_hwfn
> *p_hwfn, struct qed_ptt *p_ptt)
>  			cdev->mf_bits = BIT(QED_MF_LLH_MAC_CLSS) |
>  					BIT(QED_MF_LLH_PROTO_CLSS) |
>  					BIT(QED_MF_LL2_NON_UNICAST) |
> -					BIT(QED_MF_INTER_PF_SWITCH);
> +					BIT(QED_MF_INTER_PF_SWITCH) |
> +					BIT(QED_MF_DISABLE_ARFS);
>  			break;
>  		case NVM_CFG1_GLOB_MF_MODE_DEFAULT:
>  			cdev->mf_bits = BIT(QED_MF_LLH_MAC_CLSS) |
> @@ -4266,6 +4267,14 @@ static int qed_hw_get_nvm_info(struct qed_hwfn
> *p_hwfn, struct qed_ptt *p_ptt)
>  
>  		DP_INFO(p_hwfn, "Multi function mode is 0x%lx\n",
>  			cdev->mf_bits);
> +
> +		/* In CMT the PF is unknown when the GFS block processes
> the
> +		 * packet. Therefore cannot use searcher as it has a per
> PF
> +		 * database, and thus ARFS must be disabled.
> +		 *
> +		 */
> +		if (QED_IS_CMT(cdev))
> +			cdev->mf_bits |= BIT(QED_MF_DISABLE_ARFS);
>  	}
>  
>  	DP_INFO(p_hwfn, "Multi function mode is 0x%lx\n",
> diff --git a/drivers/net/ethernet/qlogic/qed/qed_l2.c
> b/drivers/net/ethernet/qlogic/qed/qed_l2.c
> index 4c6ac8862744..07824bf9d68d 100644
> --- a/drivers/net/ethernet/qlogic/qed/qed_l2.c
> +++ b/drivers/net/ethernet/qlogic/qed/qed_l2.c
> @@ -1980,6 +1980,9 @@ void qed_arfs_mode_configure(struct qed_hwfn
> *p_hwfn,
>  			     struct qed_ptt *p_ptt,
>  			     struct qed_arfs_config_params *p_cfg_params)
>  {
> +	if (test_bit(QED_MF_DISABLE_ARFS, &p_hwfn->cdev->mf_bits))
> +		return;
> +
>  	if (p_cfg_params->mode != QED_FILTER_CONFIG_MODE_DISABLE) {
>  		qed_gft_config(p_hwfn, p_ptt, p_hwfn->rel_pf_id,
>  			       p_cfg_params->tcp,
> diff --git a/drivers/net/ethernet/qlogic/qed/qed_main.c
> b/drivers/net/ethernet/qlogic/qed/qed_main.c
> index 2558cb680db3..309216ff7a84 100644
> --- a/drivers/net/ethernet/qlogic/qed/qed_main.c
> +++ b/drivers/net/ethernet/qlogic/qed/qed_main.c
> @@ -444,6 +444,8 @@ int qed_fill_dev_info(struct qed_dev *cdev,
>  		dev_info->fw_eng = FW_ENGINEERING_VERSION;
>  		dev_info->b_inter_pf_switch =
> test_bit(QED_MF_INTER_PF_SWITCH,
>  						       &cdev->mf_bits);
> +		if (!test_bit(QED_MF_DISABLE_ARFS, &cdev->mf_bits))
> +			dev_info->b_arfs_capable = true;
>  		dev_info->tx_switching = true;
>  
>  		if (hw_info->b_wol_support == QED_WOL_SUPPORT_PME)
> diff --git a/include/linux/qed/qed_if.h b/include/linux/qed/qed_if.h
> index cd6a5c7e56eb..cdd73afc4c46 100644
> --- a/include/linux/qed/qed_if.h
> +++ b/include/linux/qed/qed_if.h
> @@ -623,6 +623,7 @@ struct qed_dev_info {
>  #define QED_MFW_VERSION_3_OFFSET	24
>  
>  	u32		flash_size;
> +	bool		b_arfs_capable;
>  	bool		b_inter_pf_switch;
>  	bool		tx_switching;
>  	bool		rdma_supported;
> 

^ permalink raw reply	[flat|nested] 19+ messages in thread

end of thread, other threads:[~2020-09-01 16:37 UTC | newest]

Thread overview: 19+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-08-19 20:29 [PATCH net 0/3] net: qed disable aRFS in NPAR and 100G Dmitry Bogdanov
2020-08-19 20:29 ` [PATCH net 1/3] net: qed: Disable aRFS for " Dmitry Bogdanov
2020-08-20 11:08   ` Dmitry Bogdanov
2020-08-21 11:51   ` [PATCH v2, " Dmitry Bogdanov
2020-08-31  9:43   ` [PATCH v2 " Dmitry Bogdanov
2020-09-01 15:29   ` Igor Russkikh
2020-08-19 20:29 ` [PATCH net 2/3] net: qede: " Dmitry Bogdanov
2020-08-19 22:49   ` David Miller
2020-08-20 11:08   ` Dmitry Bogdanov
2020-08-21 11:51   ` [PATCH v2, " Dmitry Bogdanov
2020-08-31  9:43   ` [PATCH v2 " Dmitry Bogdanov
2020-08-19 20:29 ` [PATCH net 3/3] net: qed: RDMA personality shouldn't fail VF load Dmitry Bogdanov
2020-08-20 11:08   ` Dmitry Bogdanov
2020-08-21 11:51   ` [PATCH v2, " Dmitry Bogdanov
2020-08-31  9:43   ` [PATCH v2 " Dmitry Bogdanov
2020-08-20 11:08 ` [PATCH net 0/3] net: qed disable aRFS in NPAR and 100G Dmitry Bogdanov
2020-08-21 11:45 ` Dmitry Bogdanov
2020-08-21 11:51 ` [PATCH v2, " Dmitry Bogdanov
2020-08-31  9:43 ` [PATCH v2 " Dmitry Bogdanov

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).