linux/drivers
Ben Hutchings b0cf4dfb7c 3c503: Fix IRQ probing
The driver attempts to select an IRQ for the NIC automatically by
testing which of the supported IRQs are available and then probing
each available IRQ with probe_irq_{on,off}().  There are obvious race
conditions here, besides which:
1. The test for availability is done by passing a NULL handler, which
   now always returns -EINVAL, thus the device cannot be opened:
   <http://bugs.debian.org/566522>
2. probe_irq_off() will report only the first ISA IRQ handled,
   potentially leading to a false negative.

There was another bug that meant it ignored all error codes from
request_irq() except -EBUSY, so it would 'succeed' despite this
(possibly causing conflicts with other ISA devices).  This was fixed
by ab08999d60 'WARNING: some
request_irq() failures ignored in el2_open()', which exposed bug 1.

This patch:
1. Replaces the use of probe_irq_{on,off}() with a real interrupt handler
2. Adds a delay before checking the interrupt-seen flag
3. Disables interrupts on all failure paths
4. Distinguishes error codes from the second request_irq() call,
   consistently with the first

Compile-tested only.

Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
Signed-off-by: David S. Miller <davem@davemloft.net>
2010-04-07 20:55:47 -07:00
..
accessibility
acpi backlight: Allow properties to be passed at registration 2010-03-16 19:47:54 +00:00
amba
ata ahci: pp->active_link is not reliable when FBS is enabled 2010-03-17 15:54:55 -04:00
atm atm: use for_each_set_bit() 2010-03-15 16:00:47 -07:00
auxdisplay
base Merge git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core-2.6 2010-03-19 13:39:42 -07:00
block Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial 2010-03-12 16:04:50 -08:00
bluetooth
cdrom
char virtio: console: Check if port is valid in resize_console 2010-03-22 14:24:55 +02:00
clocksource
connector
cpufreq
cpuidle
crypto
dca
dio
dma Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial 2010-03-12 16:04:50 -08:00
edac edac, mce: Filter out invalid values 2010-03-22 16:33:31 +01:00
eisa
firewire
firmware
gpio
gpu backlight: Allow properties to be passed at registration 2010-03-16 19:47:54 +00:00
hid Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/hid 2010-03-18 16:52:31 -07:00
hwmon
i2c Add include to i2c-xii.c to fix build error 2010-03-14 11:14:58 -07:00
ide
idle
ieee1394 Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial 2010-03-12 16:04:50 -08:00
ieee802154
infiniband Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6 2010-04-06 23:53:30 -07:00
input Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input 2010-03-14 11:13:54 -07:00
isdn isdn: Cleanup Sections in PCMCIA driver elsa 2010-03-25 11:58:02 -07:00
leds leds: Fix race between LED device uevent and actual attributes creation 2010-03-16 20:27:25 +00:00
lguest
macintosh backlight: Allow properties to be passed at registration 2010-03-16 19:47:54 +00:00
mca
md Merge branch 'for-linus' of git://neil.brown.name/md 2010-03-18 16:55:24 -07:00
media net: convert multicast list to list_head 2010-04-03 14:22:15 -07:00
memstick
message
mfd Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/sameo/mfd-2.6 2010-03-12 16:41:09 -08:00
misc init dynamic bin_attribute structures 2010-03-14 20:28:39 -07:00
mmc Merge branch 'msm-mmc_sdcc' of git://codeaurora.org/quic/kernel/dwalker/linux-msm 2010-03-12 16:21:24 -08:00
mtd Delete zero-length file drivers/mtd/maps/omap_nor.c 2010-03-19 14:25:45 -04:00
net 3c503: Fix IRQ probing 2010-04-07 20:55:47 -07:00
nubus
of
oprofile
parisc
parport
pci Merge git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core-2.6 2010-03-19 13:39:42 -07:00
pcmcia PCMCIA: resource, fix lock imbalance 2010-03-16 17:54:58 +01:00
platform backlight: panasonic-laptop - Fix incomplete registration failure handling 2010-03-16 20:13:31 +00:00
pnp PNPACPI: add bus number support 2010-03-14 20:08:38 -04:00
power Merge branches 'battery-2.6.34', 'bugzilla-10805', 'bugzilla-14668', 'bugzilla-531916-power-state', 'ht-warn-2.6.34', 'pnp', 'processor-rename', 'sony-2.6.34', 'suse-bugzilla-531547', 'tz-check', 'video' and 'misc-2.6.34' into release 2010-03-14 21:30:17 -04:00
pps pps: serial clients support 2010-03-12 15:52:43 -08:00
ps3
rapidio
regulator
rtc init dynamic bin_attribute structures 2010-03-14 20:28:39 -07:00
s390 Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6 2010-04-06 23:53:30 -07:00
sbus
scsi Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6 2010-04-06 23:53:30 -07:00
serial pcnet_cs: add new id 2010-03-27 16:41:28 -07:00
sfi
sh Merge git://git.kernel.org/pub/scm/linux/kernel/git/lethal/sh-2.6 2010-03-19 18:16:20 -07:00
sn
spi Merge branch 'merge' of git://git.secretlab.ca/git/linux-2.6 2010-03-18 17:01:19 -07:00
ssb
staging Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6 2010-04-06 23:53:30 -07:00
tc
telephony
thermal
uio
usb Merge git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty-2.6 2010-03-19 13:40:03 -07:00
uwb Merge branch 'for-upstream' of git://git.kernel.org/pub/scm/linux/kernel/git/dvrabel/uwb 2010-03-19 18:14:22 -07:00
vhost vhost: fix error handling in vring ioctls 2010-03-17 23:07:35 +02:00
video Merge master.kernel.org:/home/rmk/linux-2.6-arm 2010-03-18 16:59:10 -07:00
virtio
vlynq
w1 Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial 2010-03-12 16:04:50 -08:00
watchdog
xen
zorro
Kconfig
Makefile