From b709323d2477614823a38c2f2a9a206e087e28fc Mon Sep 17 00:00:00 2001 From: Christoph Paasch Date: Fri, 21 Mar 2014 04:02:09 -0700 Subject: [PATCH] igb: Unset IGB_FLAG_HAS_MSIX-flag when falling back to msi-only Prior to cd14ef54d25 (igb: Change to use statically allocated array for MSIx entries), having msix_entries different from NULL was an indicator that MSIX is enabled. In igb_set_interrupt_capabiliy we may fall back to MSI-only. Prior to the above patch msix_entries was set to NULL by igb_reset_interrupt_capability. However, now we are checking the flag for IGB_FLAG_HAS_MSIX and so the stack gets completly confused: [ 42.659791] ------------[ cut here ]------------ [ 42.715032] WARNING: CPU: 7 PID: 0 at net/sched/sch_generic.c:264 dev_watchdog+0x15c/0x1fb() [ 42.848263] NETDEV WATCHDOG: eth0 (igb): transmit queue 0 timed out [ 42.923253] Modules linked in: [ 42.959875] CPU: 7 PID: 0 Comm: swapper/7 Not tainted 3.14.0-rc2-mptcp #437 [ 43.043184] Hardware name: HP ProLiant DL165 G7, BIOS O37 01/26/2011 [ 43.119215] 0000000000000108 ffff88023fdc3da8 ffffffff81487847 0000000000000108 [ 43.208165] ffff88023fdc3df8 ffff88023fdc3de8 ffffffff81034e7d ffff88023fdc3dd8 [ 43.297120] ffffffff813fff10 ffff880236018000 ffff880236b178c0 0000000000000008 [ 43.386071] Call Trace: [ 43.415303] [] dump_stack+0x49/0x62 [ 43.484174] [] warn_slowpath_common+0x77/0x91 [ 43.556049] [] ? dev_watchdog+0x15c/0x1fb [ 43.623759] [] warn_slowpath_fmt+0x41/0x43 [ 43.692511] [] dev_watchdog+0x15c/0x1fb [ 43.758141] [] ? __netdev_watchdog_up+0x64/0x64 [ 43.832091] [] call_timer_fn+0x17/0x6f [ 43.896682] [] run_timer_softirq+0x162/0x1a2 [ 43.967511] [] __do_softirq+0xcd/0x1cc [ 44.032104] [] irq_exit+0x3a/0x48 [ 44.091492] [] smp_apic_timer_interrupt+0x43/0x50 [ 44.167525] [] apic_timer_interrupt+0x6a/0x70 [ 44.239392] [] ? default_idle+0x6/0x8 [ 44.310343] [] arch_cpu_idle+0x13/0x18 [ 44.374934] [] cpu_startup_entry+0xa7/0x101 [ 44.444724] [] start_secondary+0x1b2/0x1b7 [ 44.513472] ---[ end trace a5a075fd4e7f854f ]--- [ 44.568753] igb 0000:04:00.0 eth0: Reset adapter [ 46.206945] random: nonblocking pool is initialized [ 46.465670] irq 44: nobody cared (try booting with the "irqpoll" option) [ 46.545862] CPU: 7 PID: 0 Comm: swapper/7 Tainted: G W 3.14.0-rc2-mptcp #437 [ 46.640610] Hardware name: HP ProLiant DL165 G7, BIOS O37 01/26/2011 [ 46.716641] ffff8802363f8c84 ffff88023fdc3e38 ffffffff81487847 00000000a03cdb6d [ 46.805598] ffff8802363f8c00 ffff88023fdc3e68 ffffffff81068489 0000007f81825400 [ 46.894539] ffff8802363f8c00 0000000000000000 0000000000000000 ffff88023fdc3ea8 [ 46.983484] Call Trace: [ 47.012714] [] dump_stack+0x49/0x62 [ 47.081585] [] __report_bad_irq+0x35/0xc1 [ 47.149295] [] note_interrupt+0x16e/0x1ea [ 47.217006] [] handle_irq_event_percpu+0x116/0x12e [ 47.294075] [] handle_irq_event+0x33/0x4f [ 47.361787] [] handle_fasteoi_irq+0x83/0xd1 [ 47.431577] [] handle_irq+0x1f/0x28 [ 47.493047] [] do_IRQ+0x4e/0xd4 [ 47.550358] [] common_interrupt+0x6a/0x6a [ 47.618066] [] ? default_idle+0x6/0x8 [ 47.689016] [] arch_cpu_idle+0x13/0x18 [ 47.753605] [] cpu_startup_entry+0xa7/0x101 [ 47.823397] [] start_secondary+0x1b2/0x1b7 [ 47.892146] handlers: [ 47.919301] [] igb_intr So, this patch unsets the flag to indicate that we are not using MSIX. This patch does exactly this: Unsetting the flag when falling back to MSI. Fixes: cd14ef54d25b (igb: Change to use statically allocated array for MSIx entries) Cc: Carolyn Wyborny Signed-off-by: Christoph Paasch Tested-by: Jeff Pieper Signed-off-by: Jeff Kirsher --- drivers/net/ethernet/intel/igb/igb_main.c | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/net/ethernet/intel/igb/igb_main.c b/drivers/net/ethernet/intel/igb/igb_main.c index 6acf7873d733..cd20409858d1 100644 --- a/drivers/net/ethernet/intel/igb/igb_main.c +++ b/drivers/net/ethernet/intel/igb/igb_main.c @@ -1149,6 +1149,7 @@ static void igb_set_interrupt_capability(struct igb_adapter *adapter, bool msix) /* If we can't do MSI-X, try MSI */ msi_only: + adapter->flags &= ~IGB_FLAG_HAS_MSIX; #ifdef CONFIG_PCI_IOV /* disable SR-IOV for non MSI-X configurations */ if (adapter->vf_data) { -- 2.30.2