On Mon, Aug 19, 2024 at 12:05:42PM +0200, Larysa Zaremba wrote: > Locking used in ice_qp_ena() and ice_qp_dis() does pretty much nothing, > because ICE_CFG_BUSY is a state flag that is supposed to be set in a PF > state, not VSI one. Therefore it does not protect the queue pair from > e.g. reset. > > Despite being useless, it still can deadlock the unfortunate functions that > have fell into the same ICE_CFG_BUSY-VSI trap. This happens if ice_qp_ena > returns an error. I believe the last sentence is not valid after our recent fixes around xsk and tx timeouts. > > Remove ICE_CFG_BUSY locking from ice_qp_dis() and ice_qp_ena(). > > Fixes: 2d4238f55697 ("ice: Add support for AF_XDP") > Reviewed-by: Wojciech Drewek <wojciech.drewek@xxxxxxxxx> > Reviewed-by: Jacob Keller <jacob.e.keller@xxxxxxxxx> > Tested-by: Chandan Kumar Rout <chandanx.rout@xxxxxxxxx> > Signed-off-by: Larysa Zaremba <larysa.zaremba@xxxxxxxxx> Reviewed-by: Maciej Fijalkowski <maciej.fijalkowski@xxxxxxxxx> > --- > drivers/net/ethernet/intel/ice/ice_xsk.c | 9 --------- > 1 file changed, 9 deletions(-) > > diff --git a/drivers/net/ethernet/intel/ice/ice_xsk.c b/drivers/net/ethernet/intel/ice/ice_xsk.c > index 8693509efbe7..5dee829bfc47 100644 > --- a/drivers/net/ethernet/intel/ice/ice_xsk.c > +++ b/drivers/net/ethernet/intel/ice/ice_xsk.c > @@ -165,7 +165,6 @@ static int ice_qp_dis(struct ice_vsi *vsi, u16 q_idx) > struct ice_q_vector *q_vector; > struct ice_tx_ring *tx_ring; > struct ice_rx_ring *rx_ring; > - int timeout = 50; > int fail = 0; > int err; > > @@ -176,13 +175,6 @@ static int ice_qp_dis(struct ice_vsi *vsi, u16 q_idx) > rx_ring = vsi->rx_rings[q_idx]; > q_vector = rx_ring->q_vector; > > - while (test_and_set_bit(ICE_CFG_BUSY, vsi->state)) { > - timeout--; > - if (!timeout) > - return -EBUSY; > - usleep_range(1000, 2000); > - } > - > synchronize_net(); > netif_carrier_off(vsi->netdev); > netif_tx_stop_queue(netdev_get_tx_queue(vsi->netdev, q_idx)); > @@ -261,7 +253,6 @@ static int ice_qp_ena(struct ice_vsi *vsi, u16 q_idx) > netif_tx_start_queue(netdev_get_tx_queue(vsi->netdev, q_idx)); > netif_carrier_on(vsi->netdev); > } > - clear_bit(ICE_CFG_BUSY, vsi->state); > > return fail; > } > -- > 2.43.0 >