1
0
Fork 0
alistair23-linux/net
Arjan van de Ven 6abd219c6e [PATCH] bcm43xx: netlink deadlock fix
reported by Jure Repinc:

> > http://bugzilla.kernel.org/show_bug.cgi?id=6773

> > checked out dmesg output and found the message
> >
> > ======================================================
> > [ BUG: hard-safe -> hard-unsafe lock order detected! ]
> > ------------------------------------------------------
> >
> > starting at line 660 of the dmesg.txt that I will attach.

The patch below should fix the deadlock, albeit I suspect it's not the
"right" fix; the right fix may well be to move the rx processing in bcm43xx
to softirq context.  [it's debatable, ipw2200 hit this exact same bug; at
some point it's better to bite the bullet and move this to the common layer
as my patch below does]

Make the nl_table_lock irq-safe; it's taken for read in various netlink
functions, including functions that several wireless drivers (ipw2200,
bcm43xx) want to call from hardirq context.

The deadlock was found by the lock validator.

Signed-off-by: Arjan van de Ven <arjan@linux.intel.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Cc: Michael Buesch <mb@bu3sch.de>
Cc: "John W. Linville" <linville@tuxdriver.com>
Cc: Jeff Garzik <jeff@garzik.org>
Acked-by: "David S. Miller" <davem@davemloft.net>
Cc: jamal <hadi@cyberus.ca>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
2006-07-03 15:26:58 -07:00
..
802 Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
8021q Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
appletalk Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
atm Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
ax25 Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
bluetooth Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
bridge Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
core Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
dccp Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
decnet Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
econet Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
ethernet Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
ieee80211 Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
ipv4 Merge master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6 2006-06-30 15:40:17 -07:00
ipv6 Merge master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6 2006-06-30 15:40:17 -07:00
ipx Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
irda Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
key Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
lapb [NET]: Kill skb->list 2005-08-29 15:31:14 -07:00
llc Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
netfilter Merge master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6 2006-06-30 15:40:17 -07:00
netlink [PATCH] bcm43xx: netlink deadlock fix 2006-07-03 15:26:58 -07:00
netrom Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
packet Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
rose Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
rxrpc Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
sched Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
sctp Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
sunrpc Merge git://git.kernel.org/pub/scm/linux/kernel/git/bunk/trivial 2006-06-30 15:39:30 -07:00
tipc [TIPC]: Initial activation message now includes TIPC version number 2006-06-29 17:08:20 -07:00
unix Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
wanrouter Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
x25 Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
xfrm Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
Kconfig [SECMARK]: Add secmark support to core networking. 2006-06-17 21:29:57 -07:00
Makefile [TIPC] Initial merge 2006-01-12 14:06:31 -08:00
TUNABLE Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
compat.c [NETFILTER]: iptables 32bit compat layer 2006-04-01 02:25:19 -08:00
nonet.c [PATCH] Make most file operations structs in fs/ const 2006-03-28 09:16:06 -08:00
socket.c Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
sysctl_net.c Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00