Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 9 additions & 11 deletions src/ice_xsk.c
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,6 @@ 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))
ice_clean_tx_ring(vsi->xdp_rings[q_idx]);

ice_clean_rx_ring(vsi->rx_rings[q_idx]);
}

Expand Down Expand Up @@ -170,7 +169,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 err;

if (q_idx >= vsi->num_rxq || q_idx >= vsi->num_txq)
Expand All @@ -180,15 +178,12 @@ 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->back->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));

ice_qvec_dis_irq(vsi, rx_ring, q_vector);
ice_qvec_toggle_napi(vsi, q_vector, false);

ice_fill_txq_meta(vsi, tx_ring, &txq_meta);
err = ice_vsi_stop_tx_ring(vsi, ICE_NO_RESET, 0, tx_ring, &txq_meta);
Expand All @@ -210,7 +205,6 @@ static int ice_qp_dis(struct ice_vsi *vsi, u16 q_idx)
#ifdef HAVE_XSK_BATCHED_RX_ALLOC
ice_clean_rx_ring(rx_ring);
#endif
ice_qvec_toggle_napi(vsi, q_vector, false);
ice_qp_clean_rings(vsi, q_idx);
ice_qp_reset_stats(vsi, q_idx);

Expand All @@ -230,6 +224,7 @@ static int ice_qp_ena(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;
bool link_up;
u16 size;
int err;

Expand Down Expand Up @@ -274,11 +269,14 @@ static int ice_qp_ena(struct ice_vsi *vsi, u16 q_idx)
if (err)
goto free_buf;

clear_bit(ICE_CFG_BUSY, vsi->back->state);
ice_qvec_toggle_napi(vsi, q_vector, true);
ice_qvec_ena_irq(vsi, q_vector);

netif_tx_start_queue(netdev_get_tx_queue(vsi->netdev, q_idx));
ice_get_link_status(vsi->port_info, &link_up);
if (link_up) {
netif_tx_start_queue(netdev_get_tx_queue(vsi->netdev, q_idx));
netif_carrier_on(vsi->netdev);
}
free_buf:
kfree(qg_buf);
return err;
Expand Down