• G
    enic: unlock napi busy poll before unmasking intr · 6286e828
    Govindarajulu Varadarajan 提交于
    There is a small window between vnic_intr_unmask() and enic_poll_unlock_napi().
    In this window if an irq occurs and napi is scheduled on different cpu, it tries
    to acquire enic_poll_lock_napi() and hits the following WARN_ON message.
    
    Fix is to unlock napi_poll before unmasking the interrupt.
    
    [  781.121746] ------------[ cut here ]------------
    [  781.121789] WARNING: CPU: 1 PID: 0 at drivers/net/ethernet/cisco/enic/vnic_rq.h:228 enic_poll_msix_rq+0x36a/0x3c0 [enic]()
    [  781.121834] Modules linked in: nfsv3 nfs_acl rpcsec_gss_krb5 auth_rpcgss oid_registry nfsv4 dns_resolver coretemp intel_rapl iosf_mbi x86_pkg_temp_thermal intel_powerclamp kvm_intel kvm crct10dif_pclmul crc32_pclmul ghash_clmulni_intel aesni_intel mgag200 ttm drm_kms_helper joydev aes_x86_64 lrw drm gf128mul mousedev glue_helper sb_edac ablk_helper iTCO_wdt iTCO_vendor_support evdev ipmi_si syscopyarea sysfillrect sysimgblt i2c_algo_bit i2c_core edac_core lpc_ich mac_hid cryptd pcspkr ipmi_msghandler shpchp tpm_tis acpi_power_meter tpm wmi processor hwmon button ac sch_fq_codel nfs lockd grace sunrpc fscache hid_generic usbhid hid ehci_pci ehci_hcd sd_mod megaraid_sas usbcore scsi_mod usb_common enic crc32c_generic crc32c_intel btrfs xor raid6_pq ext4 crc16 mbcache jbd2
    [  781.122176] CPU: 1 PID: 0 Comm: swapper/1 Not tainted 4.1.0-rc6-ARCH-00040-gc46a024e-dirty #106
    [  781.122210] Hardware name: Cisco Systems Inc UCSB-B200-M4/UCSB-B200-M4, BIOS B200M4.2.2.2.23.061220140128 06/12/2014
    [  781.122252]  0000000000000000 bddbbc9d655ec96e ffff880277e43da8 ffffffff81583fe8
    [  781.122286]  0000000000000000 0000000000000000 ffff880277e43de8 ffffffff8107acfa
    [  781.122319]  ffff880272c01000 ffff880273f18000 ffff880273f1a100 0000000000000000
    [  781.122352] Call Trace:
    [  781.122364]  <IRQ>  [<ffffffff81583fe8>] dump_stack+0x4f/0x7b
    [  781.122399]  [<ffffffff8107acfa>] warn_slowpath_common+0x8a/0xc0
    [  781.122425]  [<ffffffff8107ae2a>] warn_slowpath_null+0x1a/0x20
    [  781.122455]  [<ffffffffa01fa9ca>] enic_poll_msix_rq+0x36a/0x3c0 [enic]
    [  781.122487]  [<ffffffff8148525a>] net_rx_action+0x22a/0x370
    [  781.122512]  [<ffffffff8107ed3d>] __do_softirq+0xed/0x2d0
    [  781.122537]  [<ffffffff8107f06e>] irq_exit+0x7e/0xa0
    [  781.122560]  [<ffffffff8158c424>] do_IRQ+0x64/0x100
    [  781.122582]  [<ffffffff8158a42e>] common_interrupt+0x6e/0x6e
    [  781.122605]  <EOI>  [<ffffffff810bd331>] ? cpu_startup_entry+0x121/0x480
    [  781.122638]  [<ffffffff810bd2fc>] ? cpu_startup_entry+0xec/0x480
    [  781.122667]  [<ffffffff810f2ed3>] ? clockevents_register_device+0x113/0x1f0
    [  781.122698]  [<ffffffff81050ab6>] start_secondary+0x196/0x1e0
    [  781.122723] ---[ end trace cec2e9dd3af7b9db ]---
    Signed-off-by: NGovindarajulu Varadarajan <_govind@gmx.com>
    Signed-off-by: NDavid S. Miller <davem@davemloft.net>
    6286e828
enic_main.c 67.5 KB