1
linux/drivers
Ingo Molnar 3e541a4ae5 [PATCH] lockdep: floppy.c irq release fix
The lock validator triggered a number of bugs in the floppy driver, all
related to the floppy driver allocating and freeing irq and dma resources from
interrupt context.  The initial solution was to use schedule_work() to push
this into process context, but this caused further problems: for example the
current floppy driver in -mm2 is totally broken and all floppy commands time
out with an error.  (as reported by Barry K.  Nathan)

This patch tries another solution: simply get rid of all that dynamic IRQ and
DMA allocation/freeing.  I doubt it made much sense back in the heydays of
floppies (if two devices raced for DMA or IRQ resources then we didnt handle
those cases too gracefully anyway), and today it makes near zero sense.

So the new code does the simplest and most straightforward thing: allocate IRQ
and DMA resources at module init time, and free them at module removal time.
Dont try to release while the driver is operational.  This, besides making the
floppy driver functional again has an added bonus, floppy IRQ stats are
finally persistent and visible in /proc/interrupts:

  6: 63 XT-PIC-level floppy

Besides normal floppy IO i have also tested IO error handling, motor-off
timeouts, etc.  - and everything seems to be working fine.

Signed-off-by: Ingo Molnar <mingo@elte.hu>
Signed-off-by: Arjan van de Ven <arjan@linux.intel.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
2006-07-03 15:27:00 -07:00
..
acorn [PATCH] irq-flags: misc drivers: Use the new IRQF_ constants 2006-07-02 13:58:50 -07:00
acpi [PATCH] irq-flags: misc drivers: Use the new IRQF_ constants 2006-07-02 13:58:50 -07:00
amba [PATCH] 64bit resource: fix up printks for resources in misc drivers 2006-06-27 09:23:59 -07:00
atm [PATCH] irq-flags: misc drivers: Use the new IRQF_ constants 2006-07-02 13:58:50 -07:00
base Merge git://git.kernel.org/pub/scm/linux/kernel/git/bunk/trivial 2006-06-30 15:39:30 -07:00
block [PATCH] lockdep: floppy.c irq release fix 2006-07-03 15:27:00 -07:00
bluetooth Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
cdrom [PATCH] irq-flags: misc drivers: Use the new IRQF_ constants 2006-07-02 13:58:50 -07:00
char [PATCH] make more file_operation structs static 2006-07-03 15:26:59 -07:00
clocksource
connector
cpufreq Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
crypto
dio
dma [PATCH] irq-flags: misc drivers: Use the new IRQF_ constants 2006-07-02 13:58:50 -07:00
edac [PATCH] EDAC: fix module names quoted in sysfs 2006-07-01 09:55:58 -07:00
eisa Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
fc4 [PATCH] irq-flags: misc drivers: Use the new IRQF_ constants 2006-07-02 13:58:50 -07:00
firmware Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
hwmon Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
i2c [PATCH] irq-flags: misc drivers: Use the new IRQF_ constants 2006-07-02 13:58:50 -07:00
ide [PATCH] irq-flags: ide: Use the new IRQF_ constants 2006-07-02 13:58:49 -07:00
ieee1394 [PATCH] irq-flags: firewire: Use the new IRQF_ constants 2006-07-02 13:58:50 -07:00
infiniband [PATCH] irq-flags: misc drivers: Use the new IRQF_ constants 2006-07-02 13:58:50 -07:00
input [PATCH] sparc i8042 build fix 2006-07-03 15:27:00 -07:00
isdn [PATCH] irq-flags: isdn: Use the new IRQF_ constants 2006-07-02 13:58:50 -07:00
leds Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
macintosh [PATCH] irq-flags: misc drivers: Use the new IRQF_ constants 2006-07-02 13:58:50 -07:00
mca
md Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
media [PATCH] irq-flags: media: Use the new IRQF_ constants 2006-07-02 13:58:50 -07:00
message [PATCH] irq-flags: misc drivers: Use the new IRQF_ constants 2006-07-02 13:58:50 -07:00
mfd [PATCH] irq-flags: misc drivers: Use the new IRQF_ constants 2006-07-02 13:58:50 -07:00
misc [PATCH] irq-flags: misc drivers: Use the new IRQF_ constants 2006-07-02 13:58:50 -07:00
mmc Merge branch 'devel' of master.kernel.org:/home/rmk/linux-2.6-mmc 2006-07-02 16:35:07 -07:00
mtd Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
net [PATCH] irq-flags: drivers/net: Use the new IRQF_ constants 2006-07-02 13:58:51 -07:00
nubus Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
oprofile
parisc [PATCH] irq-flags: PARISC: Use the new IRQF_ constants 2006-07-02 13:58:52 -07:00
parport [PATCH] irq-flags: misc drivers: Use the new IRQF_ constants 2006-07-02 13:58:50 -07:00
pci [PATCH] irq-flags: pci: Use the new IRQF_ constants 2006-07-02 13:58:52 -07:00
pcmcia Merge branch 'genirq' of master.kernel.org:/home/rmk/linux-2.6-arm 2006-07-02 15:07:45 -07:00
pnp [PATCH] PNPACPI: support shareable interrupts 2006-07-03 15:26:58 -07:00
rapidio Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
rtc [PATCH] irq-flags: misc drivers: Use the new IRQF_ constants 2006-07-02 13:58:50 -07:00
s390 Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
sbus [PATCH] irq-flags: misc drivers: Use the new IRQF_ constants 2006-07-02 13:58:50 -07:00
scsi [PATCH] irq-flags: scsi: Use the new IRQF_ constants 2006-07-02 13:58:53 -07:00
serial [PATCH] SERIAL: allow shared 8250_pnp interrupts 2006-07-03 15:26:58 -07:00
sh
sn [PATCH] irq-flags: misc drivers: Use the new IRQF_ constants 2006-07-02 13:58:50 -07:00
spi Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
tc [PATCH] irq-flags: misc drivers: Use the new IRQF_ constants 2006-07-02 13:58:50 -07:00
telephony Merge git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/devfs-2.6 2006-06-29 14:19:21 -07:00
usb Merge branch 'devel' of master.kernel.org:/home/rmk/linux-2.6-arm 2006-07-02 15:04:12 -07:00
video [PATCH] fbdev: Add framebuffer and display update module support for pnx4008 2006-07-03 15:26:59 -07:00
w1
zorro Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
Kconfig
Makefile