mlx4: use READ_ONCE/WRITE_ONCE for ring indexes
Eric points out that we should make sure that ring index updates are wrapped in the appropriate READ_ONCE/WRITE_ONCE macros. Suggested-by: Eric Dumazet <edumazet@google.com> Reviewed-by: Eric Dumazet <edumazet@google.com> Reviewed-by: Jesse Brandeburg <jesse.brandeburg@intel.com> Signed-off-by: Jakub Kicinski <kuba@kernel.org> Reviewed-by: Tariq Toukan <tariqt@nvidia.com> Signed-off-by: Paolo Abeni <pabeni@redhat.com>
This commit is contained in:
committed by
Paolo Abeni
parent
36647b206c
commit
9a71499738
@@ -228,7 +228,9 @@ void mlx4_en_deactivate_tx_ring(struct mlx4_en_priv *priv,
|
||||
|
||||
static inline bool mlx4_en_is_tx_ring_full(struct mlx4_en_tx_ring *ring)
|
||||
{
|
||||
return ring->prod - ring->cons > ring->full_size;
|
||||
u32 used = READ_ONCE(ring->prod) - READ_ONCE(ring->cons);
|
||||
|
||||
return used > ring->full_size;
|
||||
}
|
||||
|
||||
static void mlx4_en_stamp_wqe(struct mlx4_en_priv *priv,
|
||||
@@ -1083,7 +1085,7 @@ netdev_tx_t mlx4_en_xmit(struct sk_buff *skb, struct net_device *dev)
|
||||
op_own |= cpu_to_be32(MLX4_WQE_CTRL_IIP);
|
||||
}
|
||||
|
||||
ring->prod += nr_txbb;
|
||||
WRITE_ONCE(ring->prod, ring->prod + nr_txbb);
|
||||
|
||||
/* If we used a bounce buffer then copy descriptor back into place */
|
||||
if (unlikely(bounce))
|
||||
@@ -1214,7 +1216,7 @@ netdev_tx_t mlx4_en_xmit_frame(struct mlx4_en_rx_ring *rx_ring,
|
||||
|
||||
rx_ring->xdp_tx++;
|
||||
|
||||
ring->prod += MLX4_EN_XDP_TX_NRTXBB;
|
||||
WRITE_ONCE(ring->prod, ring->prod + MLX4_EN_XDP_TX_NRTXBB);
|
||||
|
||||
/* Ensure new descriptor hits memory
|
||||
* before setting ownership of this descriptor to HW
|
||||
|
||||
Reference in New Issue
Block a user