mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Jarek Poplawski <jarkao2@o2.pl>
To: Andrew Morton <akpm@linux-foundation.org>
Cc: Mariusz Kozlowski <m.kozlowski@tuxland.pl>,
	netdev@vger.kernel.org, Jeff Garzik <jgarzik@pobox.com>,
	David Woodhouse <dwmw2@infradead.org>,
	Ingo Molnar <mingo@elte.hu>, Thomas Gleixner <tglx@linutronix.de>,
	linux-kernel@vger.kernel.org
Subject: [PATCH (take 2)] request_irq fix DEBUG_SHIRQ handling Re: 2.6.23-rc2-mm1: rtl8139 inconsistent lock state
Date: Thu, 23 Aug 2007 10:44:30 +0200	[thread overview]
Message-ID: <20070823084430.GB1980@ff.dom.local> (raw)
In-Reply-To: <200708100149.14446.m.kozlowski@tuxland.pl>

Andrew Morton pointed out that my changelog was unusable. Sorry!
Here is a second try with the changelog and kernel version changed.

Regards,
Jarek P.

------------>(take 2)

Subject: request_irq() - fix DEBUG_SHIRQ handling

Mariusz Kozlowski reported lockdep's warning:

> =================================
> [ INFO: inconsistent lock state ]
> 2.6.23-rc2-mm1 #7
> ---------------------------------
> inconsistent {in-hardirq-W} -> {hardirq-on-W} usage.
> ifconfig/5492 [HC0[0]:SC0[0]:HE1:SE1] takes:
>  (&tp->lock){+...}, at: [<de8706e0>] rtl8139_interrupt+0x27/0x46b [8139too]
> {in-hardirq-W} state was registered at:
>   [<c0138eeb>] __lock_acquire+0x949/0x11ac
>   [<c01397e7>] lock_acquire+0x99/0xb2
>   [<c0452ff3>] _spin_lock+0x35/0x42
>   [<de8706e0>] rtl8139_interrupt+0x27/0x46b [8139too]
>   [<c0147a5d>] handle_IRQ_event+0x28/0x59
>   [<c01493ca>] handle_level_irq+0xad/0x10b
>   [<c0105a13>] do_IRQ+0x93/0xd0
>   [<c010441e>] common_interrupt+0x2e/0x34
...
> other info that might help us debug this:
> 1 lock held by ifconfig/5492:
>  #0:  (rtnl_mutex){--..}, at: [<c0451778>] mutex_lock+0x1c/0x1f
> 
> stack backtrace:
...
>  [<c0452ff3>] _spin_lock+0x35/0x42
>  [<de8706e0>] rtl8139_interrupt+0x27/0x46b [8139too]
>  [<c01480fd>] free_irq+0x11b/0x146
>  [<de871d59>] rtl8139_close+0x8a/0x14a [8139too]
>  [<c03bde63>] dev_close+0x57/0x74
...

This shows that a driver's irq handler was running both in hard interrupt
and process contexts with irqs enabled. The latter was done during
free_irq() call and was possible only with CONFIG_DEBUG_SHIRQ enabled.
This was fixed by another patch.

But similar problem is possible with request_irq(): any locks taken from
irq handler could be vulnerable - especially with soft interrupts. This
patch fixes it by disabling local interrupts during handler's run. (It
seems, disabling softirqs should be enough, but it needs more checking
on possible races or other special cases).

This patch is recommended to all stable versions since 2.6.21, too.

Reported-by: Mariusz Kozlowski <m.kozlowski@tuxland.pl>
Signed-off-by: Jarek Poplawski <jarkao2@o2.pl>

---

diff -Nurp 2.6.23-rc3-git6-/kernel/irq/manage.c 2.6.23-rc3-git6/kernel/irq/manage.c
--- 2.6.23-rc3-git6-/kernel/irq/manage.c	2007-08-23 10:11:35.000000000 +0200
+++ 2.6.23-rc3-git6/kernel/irq/manage.c	2007-08-23 10:16:29.000000000 +0200
@@ -555,14 +555,11 @@ int request_irq(unsigned int irq, irq_ha
 		 * We do this before actually registering it, to make sure that
 		 * a 'real' IRQ doesn't run in parallel with our fake
 		 */
-		if (irqflags & IRQF_DISABLED) {
-			unsigned long flags;
+		unsigned long flags;
 
-			local_irq_save(flags);
-			handler(irq, dev_id);
-			local_irq_restore(flags);
-		} else
-			handler(irq, dev_id);
+		local_irq_save(flags);
+		handler(irq, dev_id);
+		local_irq_restore(flags);
 	}
 #endif
 

  parent reply	other threads:[~2007-08-23  8:43 UTC|newest]

Thread overview: 70+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-08-09  8:51 2.6.23-rc2-mm1 Andrew Morton
2007-08-09 10:10 ` [usb-storage] schedule_timeout: wrong timeout value c1a95554 Mariusz Kozlowski
2007-08-09 14:43   ` [linux-usb-devel] " Alan Stern
2007-08-09 15:07     ` Rafael J. Wysocki
2007-08-09 15:20       ` Mariusz Kozlowski
2007-08-09 19:15         ` Rafael J. Wysocki
2007-08-09 12:53 ` 2.6.23-rc2-mm1 -- spinlock bad magic Andy Whitcroft
2007-08-09 17:17   ` Andy Whitcroft
2007-08-09 13:04 ` 2.6.23-rc2-mm1 -- PPC G5 kernel compile failure Andy Whitcroft
2007-08-09 14:20   ` 2.6.23-rc2-mm1 -- PPC G5 kernel compile failure (patch) Krzysztof Helt
2007-08-09 17:18     ` Andy Whitcroft
2007-08-10 13:09     ` Andy Whitcroft
2007-08-09 13:23 ` 2.6.23-rc2-mm1 Michal Piotrowski
2007-08-09 18:37   ` 2.6.23-rc2-mm1 Andrew Morton
2007-08-09 19:04     ` 2.6.23-rc2-mm1 Michal Piotrowski
2007-08-09 19:10       ` 2.6.23-rc2-mm1 Andrew Morton
2007-08-09 19:27         ` 2.6.23-rc2-mm1 Jeff Garzik
2007-08-09 13:51 ` 2.6.23-rc2-mm1: e1000e global symbols must be renamed Adrian Bunk
2007-08-09 17:06   ` [E1000-devel] " Kok, Auke
2007-08-09 14:24 ` 2.6.23-rc2-mm1: no bcm43xx Rafael J. Wysocki
2007-08-09 14:16   ` Michael Buesch
2007-08-09 15:11 ` 2.6.23-rc2-mm1: kernel BUG at mm/swap_state.c:78! Mariusz Kozlowski
2007-08-09 15:14   ` Adrian Bunk
2007-08-09 15:25     ` Mariusz Kozlowski
2007-08-09 15:37   ` Hugh Dickins
2007-08-09 16:00     ` Michal Piotrowski
2007-08-10  0:30     ` Nick Piggin
2007-08-09 15:36 ` 2.6.23-rc2-mm1 Michal Piotrowski
2007-08-09 16:19   ` 2.6.23-rc2-mm1 Michal Piotrowski
2007-08-09 17:04     ` 2.6.23-rc2-mm1 Andrew Morton
2007-08-09 16:31   ` 2.6.23-rc2-mm1 Andrew Morton
2007-08-09 20:17 ` 2.6.23-rc2-mm1: silly df numbers on 32bit extN Hugh Dickins
2007-08-09 20:56   ` Andrew Morton
2007-08-09 20:30 ` 2.6.23-rc2-mm1 Jesper Juhl
2007-08-09 21:36 ` 2.6.23-rc2-mm1 Gabriel C
2007-08-09 22:04   ` 2.6.23-rc2-mm1 Andrew Morton
2007-08-09 22:42     ` 2.6.23-rc2-mm1 Alan Cox
2007-08-09 23:33       ` 2.6.23-rc2-mm1 Gabriel C
2007-08-09 23:23 ` 2.6.23-rc2-mm1: sleeping function called from invalid context at kernel/mutex.c:86 Mariusz Kozlowski
2007-08-10  0:11   ` Andrew Morton
2007-08-10  5:36     ` Josh Triplett
2007-08-10  7:27       ` Mariusz Kozlowski
2007-08-10  7:40     ` Ingo Molnar
2007-08-10  7:55       ` Andrew Morton
2007-08-11  7:24         ` Alexey Dobriyan
2007-08-09 23:49 ` 2.6.23-rc2-mm1: rtl8139 inconsistent lock state Mariusz Kozlowski
2007-08-22 13:35   ` [PATCH 2.6.23-rc3-mm1] request_irq fix DEBUG_SHIRQ handling " Jarek Poplawski
2007-08-25  9:43     ` Mariusz Kozlowski
2007-08-27  5:54       ` Jarek Poplawski
2007-08-23  8:44   ` Jarek Poplawski [this message]
2007-08-24  5:46     ` [PATCH (take 2)] " Jarek Poplawski
2007-08-10  1:31 ` 2.6.23-rc2-mm1: rcutorture xtime usage Adrian Bunk
2007-08-10  2:00   ` Paul E. McKenney
2007-08-10  2:06     ` Andrew Morton
2007-08-10 15:12       ` Paul E. McKenney
2007-08-10 17:12         ` Andrew Morton
2007-08-10 20:30           ` Paul E. McKenney
2007-08-11  0:29             ` Paul E. McKenney
2007-08-11  4:47               ` Paul E. McKenney
2007-08-11 18:09               ` Ingo Molnar
2007-08-11 19:39                 ` Paul E. McKenney
2007-08-10  2:22     ` Adrian Bunk
2007-08-10  7:06 ` 2.6.23-rc2-mm1: irq lock inversion dependency detected Mariusz Kozlowski
2007-08-24  8:27   ` Jarek Poplawski
2007-08-24  8:50     ` Jarek Poplawski
2007-08-14 21:22 ` [-mm patch] make fs/nfsd/nfs4callback.c:do_probe_callback() static Adrian Bunk
2007-08-14 22:02   ` J. Bruce Fields
2007-08-14 21:23 ` [-mm patch] make drivers/ata/libata-scsi.c:ata_scsi_link_pm_policy() static Adrian Bunk
2007-08-14 21:23 ` [-mm patch] unexport ide_acpi_set_state Adrian Bunk
2007-08-14 21:23 ` [-mm patch] drivers/mtd/mtdbdi.c is no longer an own module Adrian Bunk

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20070823084430.GB1980@ff.dom.local \
    --to=jarkao2@o2.pl \
    --cc=akpm@linux-foundation.org \
    --cc=dwmw2@infradead.org \
    --cc=jgarzik@pobox.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=m.kozlowski@tuxland.pl \
    --cc=mingo@elte.hu \
    --cc=netdev@vger.kernel.org \
    --cc=tglx@linutronix.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®