From: Arjan van de Ven <arjan@infradead.org>
To: Laurent Riffard <laurent.riffard@free.fr>
Cc: Andrew Morton <akpm@osdl.org>,
Kernel development list <linux-kernel@vger.kernel.org>,
netdev@vger.kernel.org
Subject: Re: 2.6.18-rc1-mm1 inconsistent lock state in netpoll_send_skb
Date: Tue, 11 Jul 2006 10:40:38 +0200 [thread overview]
Message-ID: <1152607239.3128.21.camel@laptopd505.fenrus.org> (raw)
In-Reply-To: <44B2A522.2080703@free.fr>
> Reversed (or previously applied) patch detected!
>
> Wrong patch ? This one won't apply, it seems to be already
> applied to 2.6.18-rc1-mm1.
ok these patches ought to fix this for real (sorry I don't have this
hardware so I cannot actually do the testing)
I hope you have time to test these..
Greetings,
Arjan van de Ven
From: Arjan van de Ven <arjan@linux.intel.com>
Subject: lockdep: core, add enable/disable_irq_irqsave/irqrestore() APIs
Introduce the disable_irq_nosync_lockdep_irqsave() and enable_irq_lockdep_irqrestore() APIs.
These are needed for NE2000; basically NE2000 calls disable_irq and enable_irq as locking
against the IRQ handler, but both in cases where interrupts are on and off. This means that
lockdep needs to track the old state of the virtual irq flags on disable_irq, and restore these
at enable_irq time.
Signed-off-by: Arjan van de Ven <arjan@linux.intel.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Index: linux-2.6.18-rc1/include/linux/interrupt.h
===================================================================
--- linux-2.6.18-rc1.orig/include/linux/interrupt.h
+++ linux-2.6.18-rc1/include/linux/interrupt.h
@@ -123,6 +123,14 @@ static inline void disable_irq_nosync_lo
#endif
}
+static inline void disable_irq_nosync_lockdep_irqsave(unsigned int irq, unsigned long *flags)
+{
+ disable_irq_nosync(irq);
+#ifdef CONFIG_LOCKDEP
+ local_irq_save(*flags);
+#endif
+}
+
static inline void disable_irq_lockdep(unsigned int irq)
{
disable_irq(irq);
@@ -139,6 +147,14 @@ static inline void enable_irq_lockdep(un
enable_irq(irq);
}
+static inline void enable_irq_lockdep_irqrestore(unsigned int irq, unsigned long *flags)
+{
+#ifdef CONFIG_LOCKDEP
+ local_irq_restore(*flags);
+#endif
+ enable_irq(irq);
+}
+
/* IRQ wakeup (PM) control: */
extern int set_irq_wake(unsigned int irq, unsigned int on);
From: Arjan van de Ven <arjan@linux.intel.com>
Subject: lockdep: annotate the ne2000 driver with the new disable_irq API addition
The ne2000 driver's xmit function gets called from netpoll with the
_xmit_lock spinlock held as _irqsave. This means the xmit function needs to preserve this
irq-off state throughout to avoid deadlock. It does, but we need to also tell lockdep that
the function indeed does this by using the proper disable_irq annotation.
Signed-off-by: Arjan van de Ven <arjan@linux.intel.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Index: linux-2.6.18-rc1/drivers/net/8390.c
===================================================================
--- linux-2.6.18-rc1.orig/drivers/net/8390.c
+++ linux-2.6.18-rc1/drivers/net/8390.c
@@ -299,7 +299,7 @@ static int ei_start_xmit(struct sk_buff
* Slow phase with lock held.
*/
- disable_irq_nosync_lockdep(dev->irq);
+ disable_irq_nosync_lockdep_irqsave(dev->irq, &flags);
spin_lock(&ei_local->page_lock);
@@ -338,7 +338,7 @@ static int ei_start_xmit(struct sk_buff
netif_stop_queue(dev);
outb_p(ENISR_ALL, e8390_base + EN0_IMR);
spin_unlock(&ei_local->page_lock);
- enable_irq_lockdep(dev->irq);
+ enable_irq_lockdep_irqrestore(dev->irq, &flags);
ei_local->stat.tx_errors++;
return 1;
}
@@ -379,7 +379,7 @@ static int ei_start_xmit(struct sk_buff
outb_p(ENISR_ALL, e8390_base + EN0_IMR);
spin_unlock(&ei_local->page_lock);
- enable_irq_lockdep(dev->irq);
+ enable_irq_lockdep_irqrestore(dev->irq, &flags);
dev_kfree_skb (skb);
ei_local->stat.tx_bytes += send_length;
next prev parent reply other threads:[~2006-07-11 8:40 UTC|newest]
Thread overview: 104+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-07-09 9:11 2.6.18-rc1-mm1 Andrew Morton
2006-07-09 10:20 ` 2.6.18-rc1-mm1 Michal Piotrowski
2006-07-09 10:26 ` 2.6.18-rc1-mm1 Fabio Comolli
2006-07-09 10:45 ` 2.6.18-rc1-mm1 Andrew Morton
2006-07-09 12:37 ` 2.6.18-rc1-mm1 Nick Piggin
2006-07-09 12:55 ` 2.6.18-rc1-mm1 Nick Piggin
2006-07-10 8:50 ` 2.6.18-rc1-mm1 Arjan van de Ven
2006-07-09 10:32 ` 2.6.18-rc1-mm1 Michal Piotrowski
2006-07-09 10:33 ` 2.6.18-rc1-mm1 Michal Piotrowski
2006-07-09 10:52 ` 2.6.18-rc1-mm1 Andrew Morton
2006-07-09 21:06 ` 2.6.18-rc1-mm1 Arjan van de Ven
2006-07-10 7:40 ` 2.6.18-rc1-mm1 Ingo Molnar
2006-07-10 9:22 ` 2.6.18-rc1-mm1 Michal Piotrowski
2006-07-10 9:25 ` 2.6.18-rc1-mm1 Ingo Molnar
2006-07-10 10:01 ` 2.6.18-rc1-mm1 Michal Piotrowski
2006-07-10 10:37 ` 2.6.18-rc1-mm1 Michal Piotrowski
2006-07-10 10:37 ` 2.6.18-rc1-mm1 Ingo Molnar
2006-07-10 10:57 ` 2.6.18-rc1-mm1 Michal Piotrowski
2006-07-09 11:02 ` 2.6.18-rc1-mm1 Michal Piotrowski
2006-07-09 11:13 ` 2.6.18-rc1-mm1 Michal Piotrowski
2006-07-09 12:10 ` 2.6.18-rc1-mm1 Andrew Morton
2006-07-09 13:19 ` 2.6.18-rc1-mm1 Michal Piotrowski
2006-07-09 11:22 ` 2.6.18-rc1-mm1 Reuben Farrelly
2006-07-09 12:22 ` 2.6.18-rc1-mm1 Andrew Morton
2006-07-09 12:56 ` 2.6.18-rc1-mm1 Alan Cox
2006-07-09 14:21 ` 2.6.18-rc1-mm1 Reuben Farrelly
2006-07-09 16:29 ` 2.6.18-rc1-mm1 Jeff Garzik
2006-07-09 18:35 ` 2.6.18-rc1-mm1 Andi Kleen
2006-07-11 19:37 ` 2.6.18-rc1-mm1 Greg KH
2006-07-09 21:10 ` 2.6.18-rc1-mm1 john stultz
2006-07-09 17:33 ` 2.6.18-rc1-mm1 Randy.Dunlap
2006-07-09 21:40 ` 2.6.18-rc1-mm1 Andrew Morton
2006-07-10 4:56 ` 2.6.18-rc1-mm1 Randy.Dunlap
2006-07-10 5:01 ` 2.6.18-rc1-mm1 Andrew Morton
2006-07-10 5:35 ` 2.6.18-rc1-mm1 Randy.Dunlap
2006-07-09 11:49 ` 2.6.18-rc1-mm1 fails on amd64 (smp_call_function_single) Gregoire Favre
2006-07-09 13:00 ` Adrian Bunk
2006-07-09 14:11 ` Gregoire Favre
2006-07-09 20:39 ` Rafael J. Wysocki
2006-07-09 21:03 ` Andrew Morton
2006-07-09 22:37 ` Rafael J. Wysocki
2006-07-09 22:44 ` Andrew Morton
2006-07-10 0:08 ` Andi Kleen
2006-07-09 12:46 ` modpost error about size inconsitency Sam Ravnborg
2006-07-09 12:49 ` Sam Ravnborg
2006-07-09 14:28 ` [-mm patch] fix MODULES=n compile Adrian Bunk
2006-07-09 14:28 ` [-mm patch] proper prototype for drivers/scsi/arcmsr/arcmsr_attr.c:arcmsr_free_sysfs_attr() Adrian Bunk
2006-07-09 16:19 ` 2.6.18-rc1-mm1 oops on x86_64 Cedric Le Goater
2006-07-09 20:21 ` Andrew Morton
2006-07-09 20:35 ` Rafael J. Wysocki
2006-07-09 20:59 ` Andrew Morton
2006-07-09 21:11 ` Rafael J. Wysocki
2006-07-10 15:54 ` Christoph Lameter
2006-07-10 17:22 ` Christoph Lameter
2006-07-10 16:20 ` Christoph Lameter
2006-07-10 17:38 ` Christoph Lameter
2006-07-10 20:27 ` Cedric Le Goater
2006-07-10 20:32 ` Rafael J. Wysocki
2006-07-09 17:28 ` 2.6.18-rc1-mm1 Dominik Karall
2006-07-09 20:24 ` 2.6.18-rc1-mm1 Andrew Morton
2006-07-10 7:11 ` 2.6.18-rc1-mm1 Mauro Carvalho Chehab
2006-07-10 22:25 ` 2.6.18-rc1-mm1 Dominik Karall
2006-07-13 22:10 ` 2.6.18-rc1-mm1 Dominik Karall
2006-07-09 17:53 ` [-mm patch] make arch/i386/kernel/cpu/cpufreq/longhaul.c:longhaul_walk_callback() static Adrian Bunk
2006-07-09 17:53 ` [-mm patch] kernel/rcutorture.c: make code static Adrian Bunk
2006-07-10 14:58 ` Paul E. McKenney
2006-07-09 18:22 ` 2.6.18-rc1-mm1: /sys/class/net/ethN becoming symlink befuddled /sbin/ifup Mike Galbraith
2006-07-09 19:01 ` Mike Galbraith
2006-07-09 20:51 ` Andrew Morton
2006-07-10 0:32 ` David Miller
2006-07-11 22:59 ` Greg KH
2006-07-12 6:29 ` Kay Sievers
2006-07-10 1:29 ` Jeremy Fitzhardinge
2006-07-10 5:01 ` Mike Galbraith
2006-07-09 19:24 ` 2.6.18-rc1-mm1 Valdis.Kletnieks
2006-07-09 21:11 ` 2.6.18-rc1-mm1 john stultz
2006-07-09 21:37 ` 2.6.18-rc1-mm1 inconsistent lock state in netpoll_send_skb Laurent Riffard
2006-07-10 8:40 ` Arjan van de Ven
2006-07-10 19:06 ` Laurent Riffard
2006-07-11 8:40 ` Arjan van de Ven [this message]
2006-07-11 22:00 ` Laurent Riffard
2006-07-09 21:47 ` 2.6.18-rc1-mm1 reiser4 module calls generic_file_read Laurent Riffard
2006-07-10 13:37 ` Edward Shishkin
2006-07-09 23:32 ` [-mm patch] fs/ocfs2/ioctl.c should #include "ioctl.h" Adrian Bunk
2006-07-10 0:33 ` 2.6.18-rc1-mm1 J.A. Magallón
2006-07-10 10:02 ` 2.6.18-rc1-mm1 Alan Cox
2006-07-10 1:10 ` 2.6.18-rc1-mm1 Brice Goglin
2006-07-10 15:22 ` 2.6.18-rc1-mm1 Rafael J. Wysocki
2006-07-10 18:33 ` [-mm patch] include/scsi/libsas.h should #include <linux/scatterlist.h> Adrian Bunk
2006-07-10 19:29 ` [PATCH -mm] sysfs_remove_bin_file: no return value, no check needed Randy.Dunlap
2006-07-10 21:43 ` Andrew Morton
2006-07-11 0:36 ` Randy.Dunlap
2006-07-11 6:05 ` [PATCH -mm] sysfs_remove_bin_file: no return value, dump_stack on error Randy.Dunlap
2006-07-10 22:21 ` 2.6.18-rc1-mm1 J.A. Magallón
2006-07-11 12:47 ` [-mm patch] MICROCODE should select FW_LOADER Adrian Bunk
2006-07-11 12:52 ` 2.6.18-rc1-mm1: drivers/ide/pci/jmicron.c warning Adrian Bunk
2006-07-11 14:02 ` Alan Cox
2006-07-11 22:10 ` Adrian Bunk
2006-07-11 23:10 ` Alan Cox
2006-07-11 23:23 ` Andrew Morton
2006-07-11 23:27 ` Adrian Bunk
2006-07-12 20:45 ` 2.6.18-rc1-mm1 Reuben Farrelly
2006-07-13 20:18 ` [-mm patch] DEBUG_SHIRQ should depend on DEBUG_KERNEL Adrian Bunk
2006-07-15 13:41 ` Thomas Gleixner
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=1152607239.3128.21.camel@laptopd505.fenrus.org \
--to=arjan@infradead.org \
--cc=akpm@osdl.org \
--cc=laurent.riffard@free.fr \
--cc=linux-kernel@vger.kernel.org \
--cc=netdev@vger.kernel.org \
/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®