Skip to content

Commit aa54d84

Browse files
Ivan Veceraanguy11
authored andcommitted
i40e: Fix devlink port unregistering
Ensure that devlink port is unregistered after unregistering of net device. Reproducer: [root@host ~]# rmmod i40e [ 4742.939386] i40e 0000:02:00.1: i40e_ptp_stop: removed PHC on enp2s0f1np1 [ 4743.059269] ------------[ cut here ]------------ [ 4743.063900] WARNING: CPU: 21 PID: 10766 at net/devlink/port.c:1078 devl_port_unregister+0x69/0x80 ... Fixes: 9e479d6 ("i40e: Add initial devlink support") Signed-off-by: Ivan Vecera <[email protected]> Reviewed-by: Jiri Pirko <[email protected]> Tested-by: Pucha Himasekhar Reddy <[email protected]> (A Contingent worker at Intel) Signed-off-by: Tony Nguyen <[email protected]>
1 parent e96fe28 commit aa54d84

File tree

1 file changed

+6
-4
lines changed

1 file changed

+6
-4
lines changed

drivers/net/ethernet/intel/i40e/i40e_main.c

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14213,8 +14213,7 @@ int i40e_vsi_release(struct i40e_vsi *vsi)
1421314213
}
1421414214
set_bit(__I40E_VSI_RELEASING, vsi->state);
1421514215
uplink_seid = vsi->uplink_seid;
14216-
if (vsi->type == I40E_VSI_MAIN)
14217-
i40e_devlink_destroy_port(pf);
14216+
1421814217
if (vsi->type != I40E_VSI_SRIOV) {
1421914218
if (vsi->netdev_registered) {
1422014219
vsi->netdev_registered = false;
@@ -14228,6 +14227,9 @@ int i40e_vsi_release(struct i40e_vsi *vsi)
1422814227
i40e_vsi_disable_irq(vsi);
1422914228
}
1423014229

14230+
if (vsi->type == I40E_VSI_MAIN)
14231+
i40e_devlink_destroy_port(pf);
14232+
1423114233
spin_lock_bh(&vsi->mac_filter_hash_lock);
1423214234

1423314235
/* clear the sync flag on all filters */
@@ -14402,14 +14404,14 @@ static struct i40e_vsi *i40e_vsi_reinit_setup(struct i40e_vsi *vsi)
1440214404

1440314405
err_rings:
1440414406
i40e_vsi_free_q_vectors(vsi);
14405-
if (vsi->type == I40E_VSI_MAIN)
14406-
i40e_devlink_destroy_port(pf);
1440714407
if (vsi->netdev_registered) {
1440814408
vsi->netdev_registered = false;
1440914409
unregister_netdev(vsi->netdev);
1441014410
free_netdev(vsi->netdev);
1441114411
vsi->netdev = NULL;
1441214412
}
14413+
if (vsi->type == I40E_VSI_MAIN)
14414+
i40e_devlink_destroy_port(pf);
1441314415
i40e_aq_delete_element(&pf->hw, vsi->seid, NULL);
1441414416
err_vsi:
1441514417
i40e_vsi_clear(vsi);

0 commit comments

Comments
 (0)