On Thu, Aug 22, 2024 at 01:43:50PM +0200, Maciej Fijalkowski wrote: > 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. > Yes, this is no longer valid, I need to remove this. > > > > 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 > >