Skip to content

Commit d592271

Browse files
mfijalkoanguy11
authored andcommitted
ice: modify error handling when setting XSK pool in ndo_bpf
Don't bail out right when spotting an error within ice_qp_{dis,ena}() but rather track error and go through whole flow of disabling and enabling queue pair. Fixes: 2d4238f ("ice: Add support for AF_XDP") Reviewed-by: Shannon Nelson <[email protected]> Tested-by: Chandan Kumar Rout <[email protected]> (A Contingent Worker at Intel) Signed-off-by: Maciej Fijalkowski <[email protected]> Signed-off-by: Tony Nguyen <[email protected]>
1 parent 405d999 commit d592271

File tree

1 file changed

+16
-14
lines changed

1 file changed

+16
-14
lines changed

drivers/net/ethernet/intel/ice/ice_xsk.c

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -162,6 +162,7 @@ static int ice_qp_dis(struct ice_vsi *vsi, u16 q_idx)
162162
struct ice_tx_ring *tx_ring;
163163
struct ice_rx_ring *rx_ring;
164164
int timeout = 50;
165+
int fail = 0;
165166
int err;
166167

167168
if (q_idx >= vsi->num_rxq || q_idx >= vsi->num_txq)
@@ -186,24 +187,24 @@ static int ice_qp_dis(struct ice_vsi *vsi, u16 q_idx)
186187

187188
ice_fill_txq_meta(vsi, tx_ring, &txq_meta);
188189
err = ice_vsi_stop_tx_ring(vsi, ICE_NO_RESET, 0, tx_ring, &txq_meta);
189-
if (err)
190-
return err;
190+
if (!fail)
191+
fail = err;
191192
if (ice_is_xdp_ena_vsi(vsi)) {
192193
struct ice_tx_ring *xdp_ring = vsi->xdp_rings[q_idx];
193194

194195
memset(&txq_meta, 0, sizeof(txq_meta));
195196
ice_fill_txq_meta(vsi, xdp_ring, &txq_meta);
196197
err = ice_vsi_stop_tx_ring(vsi, ICE_NO_RESET, 0, xdp_ring,
197198
&txq_meta);
198-
if (err)
199-
return err;
199+
if (!fail)
200+
fail = err;
200201
}
201202

202203
ice_vsi_ctrl_one_rx_ring(vsi, false, q_idx, false);
203204
ice_qp_clean_rings(vsi, q_idx);
204205
ice_qp_reset_stats(vsi, q_idx);
205206

206-
return 0;
207+
return fail;
207208
}
208209

209210
/**
@@ -216,40 +217,41 @@ static int ice_qp_dis(struct ice_vsi *vsi, u16 q_idx)
216217
static int ice_qp_ena(struct ice_vsi *vsi, u16 q_idx)
217218
{
218219
struct ice_q_vector *q_vector;
220+
int fail = 0;
219221
int err;
220222

221223
err = ice_vsi_cfg_single_txq(vsi, vsi->tx_rings, q_idx);
222-
if (err)
223-
return err;
224+
if (!fail)
225+
fail = err;
224226

225227
if (ice_is_xdp_ena_vsi(vsi)) {
226228
struct ice_tx_ring *xdp_ring = vsi->xdp_rings[q_idx];
227229

228230
err = ice_vsi_cfg_single_txq(vsi, vsi->xdp_rings, q_idx);
229-
if (err)
230-
return err;
231+
if (!fail)
232+
fail = err;
231233
ice_set_ring_xdp(xdp_ring);
232234
ice_tx_xsk_pool(vsi, q_idx);
233235
}
234236

235237
err = ice_vsi_cfg_single_rxq(vsi, q_idx);
236-
if (err)
237-
return err;
238+
if (!fail)
239+
fail = err;
238240

239241
q_vector = vsi->rx_rings[q_idx]->q_vector;
240242
ice_qvec_cfg_msix(vsi, q_vector);
241243

242244
err = ice_vsi_ctrl_one_rx_ring(vsi, true, q_idx, true);
243-
if (err)
244-
return err;
245+
if (!fail)
246+
fail = err;
245247

246248
ice_qvec_toggle_napi(vsi, q_vector, true);
247249
ice_qvec_ena_irq(vsi, q_vector);
248250

249251
netif_tx_start_queue(netdev_get_tx_queue(vsi->netdev, q_idx));
250252
clear_bit(ICE_CFG_BUSY, vsi->state);
251253

252-
return 0;
254+
return fail;
253255
}
254256

255257
/**

0 commit comments

Comments
 (0)