bpf.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH intel-net 0/3] ice: xsk: various fixes
@ 2022-03-17 18:36 Maciej Fijalkowski
  2022-03-17 18:36 ` [PATCH intel-net 1/3] ice: synchronize_rcu() when terminating rings Maciej Fijalkowski
                   ` (2 more replies)
  0 siblings, 3 replies; 7+ messages in thread
From: Maciej Fijalkowski @ 2022-03-17 18:36 UTC (permalink / raw)
  To: intel-wired-lan
  Cc: netdev, bpf, anthony.l.nguyen, kuba, davem, magnus.karlsson,
	alexandr.lobakin, Maciej Fijalkowski

Hi,

We were solving issues around AF_XDP busy poll's not-so-usual scenarios,
such as very big busy poll budgets applied to very small HW rings. This
set carries the things that were found during that work that apply to
net tree.

One thing that was fixed for all in-tree ZC drivers was missing on ice
side all the time - it's about syncing RCU before destroying XDP
resources. Next one fixes the bit that is checked in ice_xsk_wakeup and
third one avoids false setting of DD bits on Tx descriptors.

Thanks!

Maciej Fijalkowski (3):
  ice: synchronize_rcu() when terminating rings
  ice: xsk: fix VSI state check in ice_xsk_wakeup()
  ice: clear cmd_type_offset_bsz for TX rings

 drivers/net/ethernet/intel/ice/ice.h      | 2 +-
 drivers/net/ethernet/intel/ice/ice_main.c | 6 ++++--
 drivers/net/ethernet/intel/ice/ice_xsk.c  | 6 ++++--
 3 files changed, 9 insertions(+), 5 deletions(-)

-- 
2.27.0


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

* [PATCH intel-net 1/3] ice: synchronize_rcu() when terminating rings
  2022-03-17 18:36 [PATCH intel-net 0/3] ice: xsk: various fixes Maciej Fijalkowski
@ 2022-03-17 18:36 ` Maciej Fijalkowski
  2022-03-31 13:01   ` [Intel-wired-lan] " Nagaraju, Shwetha
  2022-03-17 18:36 ` [PATCH intel-net 2/3] ice: xsk: fix VSI state check in ice_xsk_wakeup() Maciej Fijalkowski
  2022-03-17 18:36 ` [PATCH intel-net 3/3] ice: clear cmd_type_offset_bsz for TX rings Maciej Fijalkowski
  2 siblings, 1 reply; 7+ messages in thread
From: Maciej Fijalkowski @ 2022-03-17 18:36 UTC (permalink / raw)
  To: intel-wired-lan
  Cc: netdev, bpf, anthony.l.nguyen, kuba, davem, magnus.karlsson,
	alexandr.lobakin, Maciej Fijalkowski

Unfortunately, the ice driver doesn't respect the RCU critical section that
XSK wakeup is surrounded with. To fix this, add synchronize_rcu() calls to
paths that destroy resources that might be in use.

This was addressed in other AF_XDP ZC enabled drivers, for reference see
for example commit b3873a5be757 ("net/i40e: Fix concurrency issues
between config flow and XSK")

Fixes: efc2214b6047 ("ice: Add support for XDP")
Fixes: 2d4238f55697 ("ice: Add support for AF_XDP")
Signed-off-by: Maciej Fijalkowski <maciej.fijalkowski@intel.com>
---
 drivers/net/ethernet/intel/ice/ice.h      | 2 +-
 drivers/net/ethernet/intel/ice/ice_main.c | 4 +++-
 drivers/net/ethernet/intel/ice/ice_xsk.c  | 4 +++-
 3 files changed, 7 insertions(+), 3 deletions(-)

diff --git a/drivers/net/ethernet/intel/ice/ice.h b/drivers/net/ethernet/intel/ice/ice.h
index bea1d1e39fa2..211d91be53a0 100644
--- a/drivers/net/ethernet/intel/ice/ice.h
+++ b/drivers/net/ethernet/intel/ice/ice.h
@@ -672,7 +672,7 @@ static inline struct ice_pf *ice_netdev_to_pf(struct net_device *netdev)
 
 static inline bool ice_is_xdp_ena_vsi(struct ice_vsi *vsi)
 {
-	return !!vsi->xdp_prog;
+	return !!READ_ONCE(vsi->xdp_prog);
 }
 
 static inline void ice_set_ring_xdp(struct ice_tx_ring *ring)
diff --git a/drivers/net/ethernet/intel/ice/ice_main.c b/drivers/net/ethernet/intel/ice/ice_main.c
index b7e8744b0c0a..c3c73a61bfd0 100644
--- a/drivers/net/ethernet/intel/ice/ice_main.c
+++ b/drivers/net/ethernet/intel/ice/ice_main.c
@@ -2729,8 +2729,10 @@ int ice_destroy_xdp_rings(struct ice_vsi *vsi)
 
 	ice_for_each_xdp_txq(vsi, i)
 		if (vsi->xdp_rings[i]) {
-			if (vsi->xdp_rings[i]->desc)
+			if (vsi->xdp_rings[i]->desc) {
+				synchronize_rcu();
 				ice_free_tx_ring(vsi->xdp_rings[i]);
+			}
 			kfree_rcu(vsi->xdp_rings[i], rcu);
 			vsi->xdp_rings[i] = NULL;
 		}
diff --git a/drivers/net/ethernet/intel/ice/ice_xsk.c b/drivers/net/ethernet/intel/ice/ice_xsk.c
index 2388837d6d6c..24a8f54c32df 100644
--- a/drivers/net/ethernet/intel/ice/ice_xsk.c
+++ b/drivers/net/ethernet/intel/ice/ice_xsk.c
@@ -41,8 +41,10 @@ static void ice_qp_reset_stats(struct ice_vsi *vsi, u16 q_idx)
 static void ice_qp_clean_rings(struct ice_vsi *vsi, u16 q_idx)
 {
 	ice_clean_tx_ring(vsi->tx_rings[q_idx]);
-	if (ice_is_xdp_ena_vsi(vsi))
+	if (ice_is_xdp_ena_vsi(vsi)) {
+		synchronize_rcu();
 		ice_clean_tx_ring(vsi->xdp_rings[q_idx]);
+	}
 	ice_clean_rx_ring(vsi->rx_rings[q_idx]);
 }
 
-- 
2.27.0


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

* [PATCH intel-net 2/3] ice: xsk: fix VSI state check in ice_xsk_wakeup()
  2022-03-17 18:36 [PATCH intel-net 0/3] ice: xsk: various fixes Maciej Fijalkowski
  2022-03-17 18:36 ` [PATCH intel-net 1/3] ice: synchronize_rcu() when terminating rings Maciej Fijalkowski
@ 2022-03-17 18:36 ` Maciej Fijalkowski
  2022-03-30 10:20   ` [Intel-wired-lan] " Nagaraju, Shwetha
  2022-03-17 18:36 ` [PATCH intel-net 3/3] ice: clear cmd_type_offset_bsz for TX rings Maciej Fijalkowski
  2 siblings, 1 reply; 7+ messages in thread
From: Maciej Fijalkowski @ 2022-03-17 18:36 UTC (permalink / raw)
  To: intel-wired-lan
  Cc: netdev, bpf, anthony.l.nguyen, kuba, davem, magnus.karlsson,
	alexandr.lobakin, Maciej Fijalkowski

ICE_DOWN is dedicated for pf->state. Check for ICE_VSI_DOWN being set on
vsi->state in ice_xsk_wakeup().

Fixes: 2d4238f55697 ("ice: Add support for AF_XDP")
Signed-off-by: Maciej Fijalkowski <maciej.fijalkowski@intel.com>
---
 drivers/net/ethernet/intel/ice/ice_xsk.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/net/ethernet/intel/ice/ice_xsk.c b/drivers/net/ethernet/intel/ice/ice_xsk.c
index 24a8f54c32df..6275ff20fd04 100644
--- a/drivers/net/ethernet/intel/ice/ice_xsk.c
+++ b/drivers/net/ethernet/intel/ice/ice_xsk.c
@@ -761,7 +761,7 @@ ice_xsk_wakeup(struct net_device *netdev, u32 queue_id,
 	struct ice_vsi *vsi = np->vsi;
 	struct ice_tx_ring *ring;
 
-	if (test_bit(ICE_DOWN, vsi->state))
+	if (test_bit(ICE_VSI_DOWN, vsi->state))
 		return -ENETDOWN;
 
 	if (!ice_is_xdp_ena_vsi(vsi))
-- 
2.27.0


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

* [PATCH intel-net 3/3] ice: clear cmd_type_offset_bsz for TX rings
  2022-03-17 18:36 [PATCH intel-net 0/3] ice: xsk: various fixes Maciej Fijalkowski
  2022-03-17 18:36 ` [PATCH intel-net 1/3] ice: synchronize_rcu() when terminating rings Maciej Fijalkowski
  2022-03-17 18:36 ` [PATCH intel-net 2/3] ice: xsk: fix VSI state check in ice_xsk_wakeup() Maciej Fijalkowski
@ 2022-03-17 18:36 ` Maciej Fijalkowski
  2022-04-04  4:34   ` [Intel-wired-lan] " Nagaraju, Shwetha
  2 siblings, 1 reply; 7+ messages in thread
From: Maciej Fijalkowski @ 2022-03-17 18:36 UTC (permalink / raw)
  To: intel-wired-lan
  Cc: netdev, bpf, anthony.l.nguyen, kuba, davem, magnus.karlsson,
	alexandr.lobakin, Maciej Fijalkowski

Currently when XDP rings are created, each descriptor gets its DD bit
set, which turns out to be the wrong approach as it can lead to a
situation where more descriptors get cleaned than it was supposed to,
e.g. when AF_XDP busy poll is run with a large batch size. In this
situation, the driver would request for more buffers than it is able to
handle.

Fix this by not setting the DD bits in ice_xdp_alloc_setup_rings(). They
should be initialized to zero instead.

Fixes: 9610bd988df9 ("ice: optimize XDP_TX workloads")
Signed-off-by: Maciej Fijalkowski <maciej.fijalkowski@intel.com>
---
 drivers/net/ethernet/intel/ice/ice_main.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/net/ethernet/intel/ice/ice_main.c b/drivers/net/ethernet/intel/ice/ice_main.c
index c3c73a61bfd0..5332bb24001a 100644
--- a/drivers/net/ethernet/intel/ice/ice_main.c
+++ b/drivers/net/ethernet/intel/ice/ice_main.c
@@ -2533,7 +2533,7 @@ static int ice_xdp_alloc_setup_rings(struct ice_vsi *vsi)
 		spin_lock_init(&xdp_ring->tx_lock);
 		for (j = 0; j < xdp_ring->count; j++) {
 			tx_desc = ICE_TX_DESC(xdp_ring, j);
-			tx_desc->cmd_type_offset_bsz = cpu_to_le64(ICE_TX_DESC_DTYPE_DESC_DONE);
+			tx_desc->cmd_type_offset_bsz = 0;
 		}
 	}
 
-- 
2.27.0


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

* RE: [Intel-wired-lan] [PATCH intel-net 2/3] ice: xsk: fix VSI state check in ice_xsk_wakeup()
  2022-03-17 18:36 ` [PATCH intel-net 2/3] ice: xsk: fix VSI state check in ice_xsk_wakeup() Maciej Fijalkowski
@ 2022-03-30 10:20   ` Nagaraju, Shwetha
  0 siblings, 0 replies; 7+ messages in thread
From: Nagaraju, Shwetha @ 2022-03-30 10:20 UTC (permalink / raw)
  To: Fijalkowski, Maciej, intel-wired-lan
  Cc: netdev, kuba, bpf, davem, Karlsson, Magnus



> -----Original Message-----
> From: Intel-wired-lan <intel-wired-lan-bounces@osuosl.org> On Behalf Of
> Maciej Fijalkowski
> Sent: Friday, March 18, 2022 12:06 AM
> To: intel-wired-lan@lists.osuosl.org
> Cc: netdev@vger.kernel.org; kuba@kernel.org; bpf@vger.kernel.org;
> davem@davemloft.net; Karlsson, Magnus <magnus.karlsson@intel.com>
> Subject: [Intel-wired-lan] [PATCH intel-net 2/3] ice: xsk: fix VSI state check in
> ice_xsk_wakeup()
> 
> ICE_DOWN is dedicated for pf->state. Check for ICE_VSI_DOWN being set on
> vsi->state in ice_xsk_wakeup().
> 
> Fixes: 2d4238f55697 ("ice: Add support for AF_XDP")
> Signed-off-by: Maciej Fijalkowski <maciej.fijalkowski@intel.com>
> ---
>  drivers/net/ethernet/intel/ice/ice_xsk.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
Tested-by: Shwetha Nagaraju <Shwetha.nagaraju@intel.com> 


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

* RE: [Intel-wired-lan] [PATCH intel-net 1/3] ice: synchronize_rcu() when terminating rings
  2022-03-17 18:36 ` [PATCH intel-net 1/3] ice: synchronize_rcu() when terminating rings Maciej Fijalkowski
@ 2022-03-31 13:01   ` Nagaraju, Shwetha
  0 siblings, 0 replies; 7+ messages in thread
From: Nagaraju, Shwetha @ 2022-03-31 13:01 UTC (permalink / raw)
  To: Fijalkowski, Maciej, intel-wired-lan
  Cc: netdev, kuba, bpf, davem, Karlsson, Magnus



> -----Original Message-----
> From: Intel-wired-lan <intel-wired-lan-bounces@osuosl.org> On Behalf Of
> Maciej Fijalkowski
> Sent: Friday, March 18, 2022 12:06 AM
> To: intel-wired-lan@lists.osuosl.org
> Cc: netdev@vger.kernel.org; kuba@kernel.org; bpf@vger.kernel.org;
> davem@davemloft.net; Karlsson, Magnus <magnus.karlsson@intel.com>
> Subject: [Intel-wired-lan] [PATCH intel-net 1/3] ice: synchronize_rcu() when
> terminating rings
> 
> Unfortunately, the ice driver doesn't respect the RCU critical section that XSK
> wakeup is surrounded with. To fix this, add synchronize_rcu() calls to paths
> that destroy resources that might be in use.
> 
> This was addressed in other AF_XDP ZC enabled drivers, for reference see
> for example commit b3873a5be757 ("net/i40e: Fix concurrency issues
> between config flow and XSK")
> 
> Fixes: efc2214b6047 ("ice: Add support for XDP")
> Fixes: 2d4238f55697 ("ice: Add support for AF_XDP")
> Signed-off-by: Maciej Fijalkowski <maciej.fijalkowski@intel.com>
> ---
>  drivers/net/ethernet/intel/ice/ice.h      | 2 +-
>  drivers/net/ethernet/intel/ice/ice_main.c | 4 +++-
> drivers/net/ethernet/intel/ice/ice_xsk.c  | 4 +++-
>  3 files changed, 7 insertions(+), 3 deletions(-)
> 
Tested-by: Shwetha Nagaraju <Shwetha.nagaraju@intel.com>


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

* RE: [Intel-wired-lan] [PATCH intel-net 3/3] ice: clear cmd_type_offset_bsz for TX rings
  2022-03-17 18:36 ` [PATCH intel-net 3/3] ice: clear cmd_type_offset_bsz for TX rings Maciej Fijalkowski
@ 2022-04-04  4:34   ` Nagaraju, Shwetha
  0 siblings, 0 replies; 7+ messages in thread
From: Nagaraju, Shwetha @ 2022-04-04  4:34 UTC (permalink / raw)
  To: Fijalkowski, Maciej, intel-wired-lan
  Cc: netdev, kuba, bpf, davem, Karlsson, Magnus



> -----Original Message-----
> From: Intel-wired-lan <intel-wired-lan-bounces@osuosl.org> On Behalf Of
> Maciej Fijalkowski
> Sent: Friday, March 18, 2022 12:06 AM
> To: intel-wired-lan@lists.osuosl.org
> Cc: netdev@vger.kernel.org; kuba@kernel.org; bpf@vger.kernel.org;
> davem@davemloft.net; Karlsson, Magnus <magnus.karlsson@intel.com>
> Subject: [Intel-wired-lan] [PATCH intel-net 3/3] ice: clear
> cmd_type_offset_bsz for TX rings
> 
> Currently when XDP rings are created, each descriptor gets its DD bit set,
> which turns out to be the wrong approach as it can lead to a situation where
> more descriptors get cleaned than it was supposed to, e.g. when AF_XDP
> busy poll is run with a large batch size. In this situation, the driver would
> request for more buffers than it is able to handle.
> 
> Fix this by not setting the DD bits in ice_xdp_alloc_setup_rings(). They should
> be initialized to zero instead.
> 
> Fixes: 9610bd988df9 ("ice: optimize XDP_TX workloads")
> Signed-off-by: Maciej Fijalkowski <maciej.fijalkowski@intel.com>
> ---
>  drivers/net/ethernet/intel/ice/ice_main.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
Tested-by: Shwetha Nagaraju <Shwetha.nagaraju@intel.com>


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

end of thread, other threads:[~2022-04-04  4:34 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-03-17 18:36 [PATCH intel-net 0/3] ice: xsk: various fixes Maciej Fijalkowski
2022-03-17 18:36 ` [PATCH intel-net 1/3] ice: synchronize_rcu() when terminating rings Maciej Fijalkowski
2022-03-31 13:01   ` [Intel-wired-lan] " Nagaraju, Shwetha
2022-03-17 18:36 ` [PATCH intel-net 2/3] ice: xsk: fix VSI state check in ice_xsk_wakeup() Maciej Fijalkowski
2022-03-30 10:20   ` [Intel-wired-lan] " Nagaraju, Shwetha
2022-03-17 18:36 ` [PATCH intel-net 3/3] ice: clear cmd_type_offset_bsz for TX rings Maciej Fijalkowski
2022-04-04  4:34   ` [Intel-wired-lan] " Nagaraju, Shwetha

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).