[dpdk-stable] patch 'net/ixgbe: fix over using multicast table for VF' has been queued to LTS release 17.11.6

Yongseok Koh yskoh at mellanox.com
Fri Mar 8 18:47:11 CET 2019


Hi,

FYI, your patch has been queued to LTS release 17.11.6

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objection by 03/13/19. So please
shout if anyone has objection.

Also note that after the patch there's a diff of the upstream commit vs the patch applied
to the branch. If the code is different (ie: not only metadata diffs), due for example to
a change in context or macro names, please double check it.

Thanks.

Yongseok

---
>From 477a4fffb3473619dfccdab357244e514bcfd884 Mon Sep 17 00:00:00 2001
From: Wei Zhao <wei.zhao1 at intel.com>
Date: Mon, 7 Jan 2019 15:22:56 +0800
Subject: [PATCH] net/ixgbe: fix over using multicast table for VF

[ upstream commit dc5a6e74224094ae702fa971c4ce039b4a2e3560 ]

According to the current implementation, all VFs will set bit
IXGBE_VMOLR_ROMPE during initialization, this cause any VF
will accept packets that match the MTA table. Since the MTA
table is shared by all VFs which means if one VF update MTA
table in function ixgbe_vf_set_multicast, then all other VFs
will receive multicast packets which cause unnecessary
performance overhead.

So it's better to set VF's ROPE bit of register VMOLR only
if multicast address filter is required on that VF.
Also, the ROPE bit should be reset when multicast address
filter is requested to clean.

This patch also aligns to the related fix on ixgbe
kernel driver 5.3.7.

Fixes: 00e30184daa0 ("ixgbe: add PF support")

Signed-off-by: Wei Zhao <wei.zhao1 at intel.com>
Acked-by: Qi Zhang <qi.z.zhang at intel.com>
---
 drivers/net/ixgbe/ixgbe_pf.c | 12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)

diff --git a/drivers/net/ixgbe/ixgbe_pf.c b/drivers/net/ixgbe/ixgbe_pf.c
index 011469417..22ecbad01 100644
--- a/drivers/net/ixgbe/ixgbe_pf.c
+++ b/drivers/net/ixgbe/ixgbe_pf.c
@@ -374,7 +374,7 @@ ixgbe_vf_reset_event(struct rte_eth_dev *dev, uint16_t vf)
 	int rar_entry = hw->mac.num_rar_entries - (vf + 1);
 	uint32_t vmolr = IXGBE_READ_REG(hw, IXGBE_VMOLR(vf));
 
-	vmolr |= (IXGBE_VMOLR_ROPE | IXGBE_VMOLR_ROMPE |
+	vmolr |= (IXGBE_VMOLR_ROPE |
 			IXGBE_VMOLR_BAM | IXGBE_VMOLR_AUPE);
 	IXGBE_WRITE_REG(hw, IXGBE_VMOLR(vf), vmolr);
 
@@ -526,6 +526,7 @@ ixgbe_vf_set_multicast(struct rte_eth_dev *dev, uint32_t vf, uint32_t *msgbuf)
 	const uint32_t IXGBE_MTA_BIT_MASK = (0x1 << IXGBE_MTA_BIT_SHIFT) - 1;
 	uint32_t reg_val;
 	int i;
+	u32 vmolr = IXGBE_READ_REG(hw, IXGBE_VMOLR(vf));
 
 	/* Disable multicast promiscuous first */
 	ixgbe_disable_vf_mc_promisc(dev, vf);
@@ -539,6 +540,12 @@ ixgbe_vf_set_multicast(struct rte_eth_dev *dev, uint32_t vf, uint32_t *msgbuf)
 		vfinfo->vf_mc_hashes[i] = hash_list[i];
 	}
 
+	if (nb_entries == 0) {
+		vmolr &= ~IXGBE_VMOLR_ROMPE;
+		IXGBE_WRITE_REG(hw, IXGBE_VMOLR(vf), vmolr);
+		return 0;
+	}
+
 	for (i = 0; i < vfinfo->num_vf_mc_hashes; i++) {
 		mta_idx = (vfinfo->vf_mc_hashes[i] >> IXGBE_MTA_BIT_SHIFT)
 				& IXGBE_MTA_INDEX_MASK;
@@ -548,6 +555,9 @@ ixgbe_vf_set_multicast(struct rte_eth_dev *dev, uint32_t vf, uint32_t *msgbuf)
 		IXGBE_WRITE_REG(hw, IXGBE_MTA(mta_idx), reg_val);
 	}
 
+	vmolr |= IXGBE_VMOLR_ROMPE;
+	IXGBE_WRITE_REG(hw, IXGBE_VMOLR(vf), vmolr);
+
 	return 0;
 }
 
-- 
2.11.0

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2019-03-08 09:46:41.935063961 -0800
+++ 0033-net-ixgbe-fix-over-using-multicast-table-for-VF.patch	2019-03-08 09:46:40.148405000 -0800
@@ -1,8 +1,10 @@
-From dc5a6e74224094ae702fa971c4ce039b4a2e3560 Mon Sep 17 00:00:00 2001
+From 477a4fffb3473619dfccdab357244e514bcfd884 Mon Sep 17 00:00:00 2001
 From: Wei Zhao <wei.zhao1 at intel.com>
 Date: Mon, 7 Jan 2019 15:22:56 +0800
 Subject: [PATCH] net/ixgbe: fix over using multicast table for VF
 
+[ upstream commit dc5a6e74224094ae702fa971c4ce039b4a2e3560 ]
+
 According to the current implementation, all VFs will set bit
 IXGBE_VMOLR_ROMPE during initialization, this cause any VF
 will accept packets that match the MTA table. Since the MTA
@@ -20,7 +22,6 @@
 kernel driver 5.3.7.
 
 Fixes: 00e30184daa0 ("ixgbe: add PF support")
-Cc: stable at dpdk.org
 
 Signed-off-by: Wei Zhao <wei.zhao1 at intel.com>
 Acked-by: Qi Zhang <qi.z.zhang at intel.com>
@@ -29,10 +30,10 @@
  1 file changed, 11 insertions(+), 1 deletion(-)
 
 diff --git a/drivers/net/ixgbe/ixgbe_pf.c b/drivers/net/ixgbe/ixgbe_pf.c
-index 4b833ffab..be0c0768c 100644
+index 011469417..22ecbad01 100644
 --- a/drivers/net/ixgbe/ixgbe_pf.c
 +++ b/drivers/net/ixgbe/ixgbe_pf.c
-@@ -351,7 +351,7 @@ ixgbe_vf_reset_event(struct rte_eth_dev *dev, uint16_t vf)
+@@ -374,7 +374,7 @@ ixgbe_vf_reset_event(struct rte_eth_dev *dev, uint16_t vf)
  	int rar_entry = hw->mac.num_rar_entries - (vf + 1);
  	uint32_t vmolr = IXGBE_READ_REG(hw, IXGBE_VMOLR(vf));
  
@@ -41,7 +42,7 @@
  			IXGBE_VMOLR_BAM | IXGBE_VMOLR_AUPE);
  	IXGBE_WRITE_REG(hw, IXGBE_VMOLR(vf), vmolr);
  
-@@ -503,6 +503,7 @@ ixgbe_vf_set_multicast(struct rte_eth_dev *dev, uint32_t vf, uint32_t *msgbuf)
+@@ -526,6 +526,7 @@ ixgbe_vf_set_multicast(struct rte_eth_dev *dev, uint32_t vf, uint32_t *msgbuf)
  	const uint32_t IXGBE_MTA_BIT_MASK = (0x1 << IXGBE_MTA_BIT_SHIFT) - 1;
  	uint32_t reg_val;
  	int i;
@@ -49,7 +50,7 @@
  
  	/* Disable multicast promiscuous first */
  	ixgbe_disable_vf_mc_promisc(dev, vf);
-@@ -516,6 +517,12 @@ ixgbe_vf_set_multicast(struct rte_eth_dev *dev, uint32_t vf, uint32_t *msgbuf)
+@@ -539,6 +540,12 @@ ixgbe_vf_set_multicast(struct rte_eth_dev *dev, uint32_t vf, uint32_t *msgbuf)
  		vfinfo->vf_mc_hashes[i] = hash_list[i];
  	}
  
@@ -62,7 +63,7 @@
  	for (i = 0; i < vfinfo->num_vf_mc_hashes; i++) {
  		mta_idx = (vfinfo->vf_mc_hashes[i] >> IXGBE_MTA_BIT_SHIFT)
  				& IXGBE_MTA_INDEX_MASK;
-@@ -525,6 +532,9 @@ ixgbe_vf_set_multicast(struct rte_eth_dev *dev, uint32_t vf, uint32_t *msgbuf)
+@@ -548,6 +555,9 @@ ixgbe_vf_set_multicast(struct rte_eth_dev *dev, uint32_t vf, uint32_t *msgbuf)
  		IXGBE_WRITE_REG(hw, IXGBE_MTA(mta_idx), reg_val);
  	}
  


More information about the stable mailing list