Move service task shutdown to the very end of driver teardown procedure. This is needed (or at least beneficial) for all unwinding functions that talk to FW/HW via Admin Queue (so, most of top-level functions, like ice_deinit_hw()).
Most of the patches move stuff around (I believe it makes it much easier to review/proof when kept separate) in preparation to defer stopping the service task to the very end of ice_remove() (and other unwinding flows). Then last patch fixes duplicate call to ice_init_hw() (actual, but unlikely to encounter, so -next, given the size of the changes). First patch is not much related, only by that it was developed together with the rest, and is so small, that there is no point for separate thread -- changes vs internal review: Expanded cover letter (Jake). Przemek Kitszel (9): ice: enforce RTNL assumption of queue NAPI manipulation ice: move service task start out of ice_init_pf() ice: move ice_init_interrupt_scheme() prior ice_init_pf() ice: ice_init_pf: destroy mutexes and xarrays on memory alloc failure ice: move udp_tunnel_nic and misc IRQ setup into ice_init_pf() ice: move ice_init_pf() out of ice_init_dev() ice: extract ice_init_dev() from ice_init() ice: move ice_deinit_dev() to the end of deinit paths ice: remove duplicate call to ice_deinit_hw() on error paths drivers/net/ethernet/intel/ice/ice.h | 4 + .../net/ethernet/intel/ice/devlink/devlink.c | 21 ++- drivers/net/ethernet/intel/ice/ice_common.c | 3 + drivers/net/ethernet/intel/ice/ice_lib.c | 4 +- drivers/net/ethernet/intel/ice/ice_main.c | 159 +++++++++--------- 5 files changed, 109 insertions(+), 82 deletions(-) -- 2.39.3
