Commit 6abd219c authored by Arjan van de Ven's avatar Arjan van de Ven Committed by Linus Torvalds

[PATCH] bcm43xx: netlink deadlock fix

reported by Jure Repinc:

> >

> > 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: default avatarArjan van de Ven <>
Signed-off-by: default avatarIngo Molnar <>
Signed-off-by: default avatarHerbert Xu <>
Cc: Michael Buesch <>
Cc: "John W. Linville" <>
Cc: Jeff Garzik <>
Acked-by: default avatar"David S. Miller" <>
Cc: jamal <>
Signed-off-by: default avatarAndrew Morton <>
Signed-off-by: default avatarLinus Torvalds <>
parent b02454f4
......@@ -156,7 +156,7 @@ static void netlink_sock_destruct(struct sock *sk)
static void netlink_table_grab(void)
if (atomic_read(&nl_table_users)) {
DECLARE_WAITQUEUE(wait, current);
......@@ -166,9 +166,9 @@ static void netlink_table_grab(void)
if (atomic_read(&nl_table_users) == 0)
......@@ -178,7 +178,7 @@ static void netlink_table_grab(void)
static __inline__ void netlink_table_ungrab(void)
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment