linux/drivers
Narendra K 68b3f28c11 qlcnic: Fix scheduling while atomic bug
In the device close path, 'qlcnic_fw_destroy_ctx' and
'qlcnic_poll_rsp' call msleep. But  'qlcnic_fw_destroy_ctx' and
'qlcnic_poll_rsp' are called with 'adapter->tx_clean_lock' spin lock
held resulting in scheduling while atomic bug causing the following
trace.

I observed that the commit 012dc19a45
from John Fastabend addresses a similar issue in ixgbevf driver.
Adopting the same approach used in the commit, this patch uses mdelay
to address the issue.

[79884.999115] BUG: scheduling while atomic: ip/30846/0x00000002
[79885.005562] INFO: lockdep is turned off.
[79885.009958] Modules linked in: qlcnic fuse nf_conntrack_netbios_ns nf_conntrack_broadcast ipt_MASQUERADE bnep bluetooth rfkill ip6table_mangle ip6t_REJECT nf_conntrack_ipv6 nf_defrag_ipv6 ip6table_filter ip6_tables iptable_nat nf_nat iptable_mangle ipt_REJECT nf_conntrack_ipv4 nf_defrag_ipv4 xt_conntrack nf_conntrack iptable_filter ip_tables dcdbas coretemp kvm_intel kvm iTCO_wdt ixgbe iTCO_vendor_support crc32c_intel ghash_clmulni_intel nfsd microcode sb_edac pcspkr edac_core dca bnx2x shpchp auth_rpcgss nfs_acl lpc_ich mfd_core mdio lockd libcrc32c wmi acpi_pad acpi_power_meter sunrpc uinput sd_mod sr_mod cdrom crc_t10dif ahci libahci libata megaraid_sas usb_storage dm_mirror dm_region_hash dm_log dm_mod [last unloaded: qlcnic]
[79885.083608] Pid: 30846, comm: ip Tainted: G        W  O 3.6.0-rc7+ #1
[79885.090805] Call Trace:
[79885.093569]  [<ffffffff816764d8>] __schedule_bug+0x68/0x76
[79885.099699]  [<ffffffff8168358e>] __schedule+0x99e/0xa00
[79885.105634]  [<ffffffff81683929>] schedule+0x29/0x70
[79885.111186]  [<ffffffff81680def>] schedule_timeout+0x16f/0x350
[79885.117724]  [<ffffffff811afb7a>] ? init_object+0x4a/0x90
[79885.123770]  [<ffffffff8107c190>] ? __internal_add_timer+0x140/0x140
[79885.130873]  [<ffffffff81680fee>] schedule_timeout_uninterruptible+0x1e/0x20
[79885.138773]  [<ffffffff8107e830>] msleep+0x20/0x30
[79885.144159]  [<ffffffffa04c7fbf>] qlcnic_issue_cmd+0xef/0x290 [qlcnic]
[79885.151478]  [<ffffffffa04c8265>] qlcnic_fw_cmd_destroy_rx_ctx+0x55/0x90 [qlcnic]
[79885.159868]  [<ffffffffa04c92fd>] qlcnic_fw_destroy_ctx+0x2d/0xa0 [qlcnic]
[79885.167576]  [<ffffffffa04bf2ed>] __qlcnic_down+0x11d/0x180 [qlcnic]
[79885.174708]  [<ffffffffa04bf6f8>] qlcnic_close+0x18/0x20 [qlcnic]
[79885.181547]  [<ffffffff8153b4c5>] __dev_close_many+0x95/0xe0
[79885.187899]  [<ffffffff8153b548>] __dev_close+0x38/0x50
[79885.193761]  [<ffffffff81545101>] __dev_change_flags+0xa1/0x180
[79885.200419]  [<ffffffff81545298>] dev_change_flags+0x28/0x70
[79885.206779]  [<ffffffff815531b8>] do_setlink+0x378/0xa00
[79885.212731]  [<ffffffff81354fe1>] ? nla_parse+0x31/0xe0
[79885.218612]  [<ffffffff815558ee>] rtnl_newlink+0x37e/0x560
[79885.224768]  [<ffffffff812cfa19>] ? selinux_capable+0x39/0x50
[79885.231217]  [<ffffffff812cbf98>] ? security_capable+0x18/0x20
[79885.237765]  [<ffffffff81555114>] rtnetlink_rcv_msg+0x114/0x2f0
[79885.244412]  [<ffffffff81551f87>] ? rtnl_lock+0x17/0x20
[79885.250280]  [<ffffffff81551f87>] ? rtnl_lock+0x17/0x20
[79885.256148]  [<ffffffff81555000>] ? __rtnl_unlock+0x20/0x20
[79885.262413]  [<ffffffff81570fc1>] netlink_rcv_skb+0xa1/0xb0
[79885.268661]  [<ffffffff81551fb5>] rtnetlink_rcv+0x25/0x40
[79885.274727]  [<ffffffff815708bd>] netlink_unicast+0x19d/0x220
[79885.281146]  [<ffffffff81570c45>] netlink_sendmsg+0x305/0x3f0
[79885.287595]  [<ffffffff8152b188>] ? sock_update_classid+0x148/0x2e0
[79885.294650]  [<ffffffff81525c2c>] sock_sendmsg+0xbc/0xf0
[79885.300600]  [<ffffffff8152600c>] __sys_sendmsg+0x3ac/0x3c0
[79885.306853]  [<ffffffff8109be23>] ? up_read+0x23/0x40
[79885.312510]  [<ffffffff816896cc>] ? do_page_fault+0x2bc/0x570
[79885.318968]  [<ffffffff81191854>] ? sys_brk+0x44/0x150
[79885.324715]  [<ffffffff811c458c>] ? fget_light+0x24c/0x520
[79885.330875]  [<ffffffff815286f9>] sys_sendmsg+0x49/0x90
[79885.336707]  [<ffffffff8168e429>] system_call_fastpath+0x16/0x1b

Signed-off-by: Narendra K <narendra_k@dell.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2012-09-27 19:24:52 -04:00
..
accessibility
acpi ACPI / PM: Use KERN_DEBUG when no power resources are found 2012-09-14 20:54:44 +02:00
amba
ata ahci: Add identifiers for ASM106x devices 2012-09-13 00:24:29 -04:00
atm
auxdisplay
base
bcma
block Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/sage/ceph-client 2012-09-24 16:13:49 -07:00
bluetooth
cdrom
char
clk ARM: 7537/1: clk: Fix release in devm_clk_put() 2012-09-19 21:51:27 +01:00
clocksource
connector
cpufreq Merge branch 'for-3.6-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/wq 2012-09-19 11:00:07 -07:00
cpuidle
crypto Merge git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6 2012-09-12 07:14:17 +08:00
dca
devfreq
dio
dma DMA: PL330: Check the pointer returned by kzalloc 2012-09-18 09:04:52 +05:30
edac edac_mc: edac_mc_free() cannot assume mem_ctl_info is registered in sysfs. 2012-09-23 14:46:40 -07:00
eisa
extcon This is the remaining MFD fixes for 3.6, with 5 pending fixes: 2012-09-16 13:22:21 -07:00
firewire
firmware
gpio
gpu drm/nouveau: add dmi quirk for gpio reset 2012-09-21 10:17:15 -04:00
hid HID: Fix logitech-dj: missing Unifying device issue 2012-09-22 10:58:48 +02:00
hsi
hv
hwmon hwmon: (fam15h_power) Tweak runavg_range on resume 2012-09-23 20:54:09 +02:00
hwspinlock hwspinlock/core: move the dereference below the NULL test 2012-09-10 13:19:25 +03:00
i2c Merge branch 'i2c-embedded/for-current' of git://git.pengutronix.de/git/wsa/linux 2012-09-14 17:55:57 -07:00
ide
idle
ieee802154
iio
infiniband Merge branches 'cxgb4', 'ipoib', 'mlx4', 'ocrdma' and 'qib' into for-next 2012-09-14 10:42:52 -07:00
input Input: edt-ft5x06 - return -EFAULT on copy_to_user() error 2012-09-19 16:00:26 -07:00
iommu
isdn mISDN: Fix wrong usage of flush_work_sync while holding locks 2012-09-13 14:58:54 -04:00
leds
lguest
macintosh
md md: make sure metadata is updated when spares are activated or removed. 2012-09-19 12:54:22 +10:00
media
memory
memstick
message
mfd This is the remaining MFD fixes for 3.6, with 5 pending fixes: 2012-09-16 13:22:21 -07:00
misc
mmc
mtd
net qlcnic: Fix scheduling while atomic bug 2012-09-27 19:24:52 -04:00
nfc
nubus
of
oprofile
parisc
parport
pci
pcmcia
pinctrl
platform thinkpad_acpi: buffer overflow in fan_get_status() 2012-09-13 16:46:31 -04:00
pnp
power
pps
ps3
ptp
pwm pwm: pwm-tiehrpwm: Fix conflicting channel period setting 2012-09-10 17:04:38 +02:00
rapidio
regulator This is the remaining MFD fixes for 3.6, with 5 pending fixes: 2012-09-16 13:22:21 -07:00
remoteproc
rpmsg rpmsg: fix dma_free_coherent dev parameter 2012-09-12 12:03:57 +03:00
rtc drivers/rtc/rtc-twl.c: ensure all interrupts are disabled during probe 2012-09-17 15:00:38 -07:00
s390 s390/dasd: fix read unit address configuration loop 2012-09-17 09:58:21 +02:00
sbus
scsi [SCSI] hpsa: fix handling of protocol error 2012-09-18 12:29:30 +01:00
sfi
sh sh: pfc: Fix up GPIO mux type reconfig case. 2012-09-25 11:51:05 +09:00
sn
spi
ssb
staging This is the remaining MFD fixes for 3.6, with 5 pending fixes: 2012-09-16 13:22:21 -07:00
target target: go through normal processing for zero-length REQUEST_SENSE 2012-09-07 11:32:54 -07:00
tc
thermal
tty tty: serial: imx: don't reinit clock in imx_setup_ufcr() 2012-09-05 12:44:44 -07:00
uio
usb Merge branch 'chipidea-stable' into usb-linus 2012-09-12 11:12:31 -07:00
uwb
vfio vfio: Fix virqfd release race 2012-09-21 10:48:28 -06:00
vhost
video
virt
virtio
vlynq
vme
w1
watchdog watchdog: move the dereference below the NULL test 2012-09-10 17:33:17 +02:00
xen xen/m2p: do not reuse kmap_op->dev_bus_addr 2012-09-12 11:21:40 -04:00
zorro
Kconfig
Makefile