ixgbe: do not update real num queues when netdev is going away
If the netdev is already in NETREG_UNREGISTERING/_UNREGISTERED state, do not
update the real num tx queues. netdev_queue_update_kobjects() is already
called via remove_queue_kobjects() at NETREG_UNREGISTERING time. So, when
upper layer driver, e.g., FCoE protocol stack is monitoring the netdev
event of NETDEV_UNREGISTER and calls back to LLD ndo_fcoe_disable() to remove
extra queues allocated for FCoE, the associated txq sysfs kobjects are already
removed, and trying to update the real num queues would cause something like
below:
...
PID: 25138 TASK:
ffff88021e64c440 CPU: 3 COMMAND: "kworker/3:3"
#0 [
ffff88021f007760] machine_kexec at
ffffffff810226d9
#1 [
ffff88021f0077d0] crash_kexec at
ffffffff81089d2d
#2 [
ffff88021f0078a0] oops_end at
ffffffff813bca78
#3 [
ffff88021f0078d0] no_context at
ffffffff81029e72
#4 [
ffff88021f007920] __bad_area_nosemaphore at
ffffffff8102a155
#5 [
ffff88021f0079f0] bad_area_nosemaphore at
ffffffff8102a23e
#6 [
ffff88021f007a00] do_page_fault at
ffffffff813bf32e
#7 [
ffff88021f007b10] page_fault at
ffffffff813bc045
[exception RIP: sysfs_find_dirent+17]
RIP:
ffffffff81178611 RSP:
ffff88021f007bc0 RFLAGS:
00010246
RAX:
ffff88021e64c440 RBX:
ffffffff8156cc63 RCX:
0000000000000004
RDX:
ffffffff8156cc63 RSI:
0000000000000000 RDI:
0000000000000000
RBP:
ffff88021f007be0 R8:
0000000000000004 R9:
0000000000000008
R10:
ffffffff816fed00 R11:
0000000000000004 R12:
0000000000000000
R13:
ffffffff8156cc63 R14:
0000000000000000 R15:
ffff8802222a0000
ORIG_RAX:
ffffffffffffffff CS: 0010 SS: 0018
#8 [
ffff88021f007be8] sysfs_get_dirent at
ffffffff81178c07
#9 [
ffff88021f007c18] sysfs_remove_group at
ffffffff8117ac27
#10 [
ffff88021f007c48] netdev_queue_update_kobjects at
ffffffff813178f9
#11 [
ffff88021f007c88] netif_set_real_num_tx_queues at
ffffffff81303e38
#12 [
ffff88021f007cc8] ixgbe_set_num_queues at
ffffffffa0249763 [ixgbe]
#13 [
ffff88021f007cf8] ixgbe_init_interrupt_scheme at
ffffffffa024ea89 [ixgbe]
#14 [
ffff88021f007d48] ixgbe_fcoe_disable at
ffffffffa0267113 [ixgbe]
#15 [
ffff88021f007d68] vlan_dev_fcoe_disable at
ffffffffa014fef5 [8021q]
#16 [
ffff88021f007d78] fcoe_interface_cleanup at
ffffffffa02b7dfd [fcoe]
#17 [
ffff88021f007df8] fcoe_destroy_work at
ffffffffa02b7f08 [fcoe]
#18 [
ffff88021f007e18] process_one_work at
ffffffff8105d7ca
#19 [
ffff88021f007e68] worker_thread at
ffffffff81060513
#20 [
ffff88021f007ee8] kthread at
ffffffff810648b6
#21 [
ffff88021f007f48] kernel_thread_helper at
ffffffff813c40f4
Signed-off-by: Yi Zou <yi.zou@intel.com>
Tested-by: Ross Brattain <ross.b.brattain@intel.com>
Tested-by: Stephen Ko <stephen.s.ko@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>