Re: mISDN: WARNING: at kernel/softirq.c:124 local_bh_enable+0x8f/0xb0()

4 messages, 4 authors, 2009-06-22 · open the first message on its own page

Re: mISDN: WARNING: at kernel/softirq.c:124 local_bh_enable+0x8f/0xb0()

From: Andrew Morton <akpm@linux-foundation.org>
Date: 2009-06-05 03:00:33

(cc's added)

On Fri, 5 Jun 2009 00:07:12 +0200 Mathias Kretschmer [off-list ref] wrote:
Hi *,

the following pops up from time to time when I place a call (might also 
happened on incoming calls). 

machine is an AMD K8 dual core running a x86_64 2.6.29.4-grsec kernel.

please, let me know if you need more details.

cheers,

Mathias

[88563.318126] ------------[ cut here ]------------
[88563.318129] WARNING: at kernel/softirq.c:124 local_bh_enable+0x8f/0xb0()
[88563.318130] Hardware name: empty
[88563.318132] Modules linked in: usbtouchscreen dvb_usb_cinergyT2 dummy 
bonding snd_emu10k1 snd_rawmidi snd_ac97_codec ath9k ac97_bus snd_pcm 
snd_page_alloc snd_util_mem forcedeth snd_hwdep
[88563.318141] Pid: 826, comm: mISDN_hfc-pci.1 Not tainted 2.6.29.4-grsec #13
[88563.318142] Call Trace:
[88563.318147]  [<ffffffff8025909a>] warn_slowpath+0xea/0x160
[88563.318149]  [<ffffffff8025ee0f>] local_bh_enable+0x8f/0xb0
[88563.318152]  [<ffffffff8065f284>] sk_filter+0x44/0xa0
[88563.318154]  [<ffffffff8064548d>] sock_queue_rcv_skb+0x5d/0x120
[88563.318156]  [<ffffffff8060410f>] mISDN_send+0x4f/0xa0
[88563.318159]  [<ffffffff8060790e>] l2up_create+0x7e/0x100
[88563.318161]  [<ffffffff8060b6e0>] l2_got_tei+0x0/0x90
[88563.318163]  [<ffffffff8060b722>] l2_got_tei+0x42/0x90
[88563.318164]  [<ffffffff80602d32>] mISDN_FsmEvent+0x82/0x100
[88563.318167]  [<ffffffff8060cb00>] tei_id_assign+0x0/0x120
[88563.318168]  [<ffffffff80602d32>] mISDN_FsmEvent+0x82/0x100
[88563.318170]  [<ffffffff8060e373>] mgr_send+0x4d3/0x660
[88563.318172]  [<ffffffff8061ac8e>] hfcpci_l2l1D+0x19e/0x2f0
[88563.318174]  [<ffffffff80606591>] mISDNStackd+0x431/0x680
[88563.318177]  [<ffffffff80270950>] autoremove_wake_function+0x0/0x30
[88563.318179]  [<ffffffff80606160>] mISDNStackd+0x0/0x680
[88563.318181]  [<ffffffff80270547>] kthread+0x47/0x80
[88563.318183]  [<ffffffff802226fa>] child_rip+0xa/0x20
[88563.318185]  [<ffffffff80270500>] kthread+0x0/0x80
[88563.318186]  [<ffffffff802226f0>] child_rip+0x0/0x20
[88563.318188] ---[ end trace 2a7bb9b2f669de5a ]---
hm, tricky, who disabled interrupts?  It could be

	spin_lock_irqsave(&hc->lock, flags);

in hfcpci_l2l1D().

Re: mISDN: WARNING: at kernel/softirq.c:124 local_bh_enable+0x8f/0xb0()

From: Karsten Keil <hidden>
Date: 2009-06-05 10:01:20

Hi,

I'm currently see this too from time to time, but have no idea about it.

On Freitag, 5. Juni 2009 04:59:48 Andrew Morton wrote:
(cc's added)

On Fri, 5 Jun 2009 00:07:12 +0200 Mathias Kretschmer [off-list ref] 
wrote:
quoted
Hi *,

the following pops up from time to time when I place a call (might also
happened on incoming calls).

machine is an AMD K8 dual core running a x86_64 2.6.29.4-grsec kernel.

please, let me know if you need more details.

cheers,

Mathias

[88563.318126] ------------[ cut here ]------------
[88563.318129] WARNING: at kernel/softirq.c:124
local_bh_enable+0x8f/0xb0() [88563.318130] Hardware name: empty
[88563.318132] Modules linked in: usbtouchscreen dvb_usb_cinergyT2 dummy
bonding snd_emu10k1 snd_rawmidi snd_ac97_codec ath9k ac97_bus snd_pcm
snd_page_alloc snd_util_mem forcedeth snd_hwdep
[88563.318141] Pid: 826, comm: mISDN_hfc-pci.1 Not tainted 2.6.29.4-grsec
#13 [88563.318142] Call Trace:
[88563.318147]  [<ffffffff8025909a>] warn_slowpath+0xea/0x160
[88563.318149]  [<ffffffff8025ee0f>] local_bh_enable+0x8f/0xb0
[88563.318152]  [<ffffffff8065f284>] sk_filter+0x44/0xa0
[88563.318154]  [<ffffffff8064548d>] sock_queue_rcv_skb+0x5d/0x120
[88563.318156]  [<ffffffff8060410f>] mISDN_send+0x4f/0xa0
[88563.318159]  [<ffffffff8060790e>] l2up_create+0x7e/0x100
[88563.318161]  [<ffffffff8060b6e0>] l2_got_tei+0x0/0x90
[88563.318163]  [<ffffffff8060b722>] l2_got_tei+0x42/0x90
[88563.318164]  [<ffffffff80602d32>] mISDN_FsmEvent+0x82/0x100
[88563.318167]  [<ffffffff8060cb00>] tei_id_assign+0x0/0x120
[88563.318168]  [<ffffffff80602d32>] mISDN_FsmEvent+0x82/0x100
[88563.318170]  [<ffffffff8060e373>] mgr_send+0x4d3/0x660
[88563.318172]  [<ffffffff8061ac8e>] hfcpci_l2l1D+0x19e/0x2f0
[88563.318174]  [<ffffffff80606591>] mISDNStackd+0x431/0x680
[88563.318177]  [<ffffffff80270950>] autoremove_wake_function+0x0/0x30
[88563.318179]  [<ffffffff80606160>] mISDNStackd+0x0/0x680
[88563.318181]  [<ffffffff80270547>] kthread+0x47/0x80
[88563.318183]  [<ffffffff802226fa>] child_rip+0xa/0x20
[88563.318185]  [<ffffffff80270500>] kthread+0x0/0x80
[88563.318186]  [<ffffffff802226f0>] child_rip+0x0/0x20
[88563.318188] ---[ end trace 2a7bb9b2f669de5a ]---
hm, tricky, who disabled interrupts? 
Yes, indeed I have no idea what exactely is going on.
It could be

	spin_lock_irqsave(&hc->lock, flags);

in hfcpci_l2l1D().
I do not think that this function is really in the call trace, in my dumps I 
see also traces without  hfcpci_l2l1D in it.
And I see no way back to mgr_send from hfcpci_l2l1D from the design
the HW functions are decoupled from the stack thread via queues, so
here should be no direct callback.

The common part is, that it seems always happen on successful TEI
assign.

Karsten

Re: mISDN: WARNING: at kernel/softirq.c:124 local_bh_enable+0x8f/0xb0()

From: Karsten Keil <hidden>
Date: 2009-06-09 13:05:45

On Freitag, 5. Juni 2009 12:01:03 Karsten Keil wrote:
Hi,

I'm currently see this too from time to time, but have no idea about it.
...
quoted
quoted
[88563.318126] ------------[ cut here ]------------
[88563.318129] WARNING: at kernel/softirq.c:124
local_bh_enable+0x8f/0xb0() [88563.318130] Hardware name: empty
[88563.318132] Modules linked in: usbtouchscreen dvb_usb_cinergyT2
dummy bonding snd_emu10k1 snd_rawmidi snd_ac97_codec ath9k ac97_bus
snd_pcm snd_page_alloc snd_util_mem forcedeth snd_hwdep
[88563.318141] Pid: 826, comm: mISDN_hfc-pci.1 Not tainted
2.6.29.4-grsec #13 [88563.318142] Call Trace:
[88563.318147]  [<ffffffff8025909a>] warn_slowpath+0xea/0x160
[88563.318149]  [<ffffffff8025ee0f>] local_bh_enable+0x8f/0xb0
[88563.318152]  [<ffffffff8065f284>] sk_filter+0x44/0xa0
[88563.318154]  [<ffffffff8064548d>] sock_queue_rcv_skb+0x5d/0x120
[88563.318156]  [<ffffffff8060410f>] mISDN_send+0x4f/0xa0
[88563.318159]  [<ffffffff8060790e>] l2up_create+0x7e/0x100
[88563.318161]  [<ffffffff8060b6e0>] l2_got_tei+0x0/0x90
[88563.318163]  [<ffffffff8060b722>] l2_got_tei+0x42/0x90
[88563.318164]  [<ffffffff80602d32>] mISDN_FsmEvent+0x82/0x100
[88563.318167]  [<ffffffff8060cb00>] tei_id_assign+0x0/0x120
[88563.318168]  [<ffffffff80602d32>] mISDN_FsmEvent+0x82/0x100
[88563.318170]  [<ffffffff8060e373>] mgr_send+0x4d3/0x660
OK found it, it was in a inlined function call ph_data_ind() in mgr_send().

This patch should fix it (will send it upstream later).


From: Karsten Keil <redacted>
Date: Tue, 9 Jun 2009 14:38:39 +0200
Subject: [PATCH] mISDN: Do not disable IRQ in ph_data_ind()


This fix triggering the WARN_ON_ONCE(in_irq() || irqs_disabled()); in
local_bh_enable().

Here is no need to grab this lock, this was wrong at all and may
cause a deadlock and access to freed memory, since on a TEI remove
the current listelement can be deleted under us. So this is clearly
a case for list_for_each_entry_safe.

Signed-off-by: Karsten Keil <redacted>
---
 drivers/isdn/mISDN/tei.c |    7 ++-----
 1 files changed, 2 insertions(+), 5 deletions(-)
diff --git a/drivers/isdn/mISDN/tei.c b/drivers/isdn/mISDN/tei.c
index bfcdd97..e04bad6 100644
--- a/drivers/isdn/mISDN/tei.c
+++ b/drivers/isdn/mISDN/tei.c
@@ -862,8 +862,7 @@ static int
 ph_data_ind(struct manager *mgr, struct sk_buff *skb)
 {
 	int		ret = -EINVAL;
-	struct layer2	*l2;
-	u_long		flags;
+	struct layer2	*l2, *nl2;
 	u_char		mt;
 
 	if (skb->len < 8) {
@@ -908,11 +907,9 @@ ph_data_ind(struct manager *mgr, struct sk_buff *skb)
 		new_tei_req(mgr, &skb->data[4]);
 		goto done;
 	}
-	read_lock_irqsave(&mgr->lock, flags);
-	list_for_each_entry(l2, &mgr->layer2, list) {
+	list_for_each_entry_safe(l2, nl2, &mgr->layer2, list) {
 		tei_ph_data_ind(l2->tm, mt, &skb->data[4], skb->len - 4);
 	}
-	read_unlock_irqrestore(&mgr->lock, flags);
 done:
 	return ret;
 }
-- 
1.6.0.2


Re: mISDN: WARNING: at kernel/softirq.c:124 local_bh_enable+0x8f/0xb0()

From: Mathias Kretschmer <hidden>
Date: 2009-06-22 22:38:00

Hi Karsten,

applied your patch. Not sure if it fixed anything, though.
Attached is another call trace which looks slightly different.

Cheers,

Mathias

On Tuesday 09 June 2009 15:05:31 Karsten Keil wrote:
quoted hunk
On Freitag, 5. Juni 2009 12:01:03 Karsten Keil wrote:
quoted
Hi,

I'm currently see this too from time to time, but have no idea about it.
...
quoted
quoted
quoted
[88563.318126] ------------[ cut here ]------------
[88563.318129] WARNING: at kernel/softirq.c:124
local_bh_enable+0x8f/0xb0() [88563.318130] Hardware name: empty
[88563.318132] Modules linked in: usbtouchscreen dvb_usb_cinergyT2
dummy bonding snd_emu10k1 snd_rawmidi snd_ac97_codec ath9k ac97_bus
snd_pcm snd_page_alloc snd_util_mem forcedeth snd_hwdep
[88563.318141] Pid: 826, comm: mISDN_hfc-pci.1 Not tainted
2.6.29.4-grsec #13 [88563.318142] Call Trace:
[88563.318147]  [<ffffffff8025909a>] warn_slowpath+0xea/0x160
[88563.318149]  [<ffffffff8025ee0f>] local_bh_enable+0x8f/0xb0
[88563.318152]  [<ffffffff8065f284>] sk_filter+0x44/0xa0
[88563.318154]  [<ffffffff8064548d>] sock_queue_rcv_skb+0x5d/0x120
[88563.318156]  [<ffffffff8060410f>] mISDN_send+0x4f/0xa0
[88563.318159]  [<ffffffff8060790e>] l2up_create+0x7e/0x100
[88563.318161]  [<ffffffff8060b6e0>] l2_got_tei+0x0/0x90
[88563.318163]  [<ffffffff8060b722>] l2_got_tei+0x42/0x90
[88563.318164]  [<ffffffff80602d32>] mISDN_FsmEvent+0x82/0x100
[88563.318167]  [<ffffffff8060cb00>] tei_id_assign+0x0/0x120
[88563.318168]  [<ffffffff80602d32>] mISDN_FsmEvent+0x82/0x100
[88563.318170]  [<ffffffff8060e373>] mgr_send+0x4d3/0x660
OK found it, it was in a inlined function call ph_data_ind() in mgr_send().

This patch should fix it (will send it upstream later).


From: Karsten Keil <redacted>
Date: Tue, 9 Jun 2009 14:38:39 +0200
Subject: [PATCH] mISDN: Do not disable IRQ in ph_data_ind()


This fix triggering the WARN_ON_ONCE(in_irq() || irqs_disabled()); in
local_bh_enable().

Here is no need to grab this lock, this was wrong at all and may
cause a deadlock and access to freed memory, since on a TEI remove
the current listelement can be deleted under us. So this is clearly
a case for list_for_each_entry_safe.

Signed-off-by: Karsten Keil <redacted>
---
 drivers/isdn/mISDN/tei.c |    7 ++-----
 1 files changed, 2 insertions(+), 5 deletions(-)
diff --git a/drivers/isdn/mISDN/tei.c b/drivers/isdn/mISDN/tei.c
index bfcdd97..e04bad6 100644
--- a/drivers/isdn/mISDN/tei.c
+++ b/drivers/isdn/mISDN/tei.c
@@ -862,8 +862,7 @@ static int
 ph_data_ind(struct manager *mgr, struct sk_buff *skb)
 {
 	int		ret = -EINVAL;
-	struct layer2	*l2;
-	u_long		flags;
+	struct layer2	*l2, *nl2;
 	u_char		mt;

 	if (skb->len < 8) {
@@ -908,11 +907,9 @@ ph_data_ind(struct manager *mgr, struct sk_buff *skb)
 		new_tei_req(mgr, &skb->data[4]);
 		goto done;
 	}
-	read_lock_irqsave(&mgr->lock, flags);
-	list_for_each_entry(l2, &mgr->layer2, list) {
+	list_for_each_entry_safe(l2, nl2, &mgr->layer2, list) {
 		tei_ph_data_ind(l2->tm, mt, &skb->data[4], skb->len - 4);
 	}
-	read_unlock_irqrestore(&mgr->lock, flags);
 done:
 	return ret;
 }



Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help