linux/drivers
David Brownell 49a4ec188f fix hotplug for legacy platform drivers
We've had various reports of some legacy "probe the hardware" style
platform drivers having nasty problems with hotplug support.

The core issue is that those legacy drivers don't fully conform to the
driver model.  They assume a role that should be the responsibility of
infrastructure code: creating device nodes.

The "modprobe" step in hotplugging relies on drivers to have split those
roles into different modules.  The lack of this split causes the problems.
When a driver creates nodes for devices that don't exist (sending a hotplug
event), then exits (aborting one modprobe) before the "modprobe $MODALIAS"
step completes (by failing, since it's in the middle of a modprobe), the
result can be an endless loop of modprobe invocations ...  badness.

This fix uses the newish per-device flag controlling issuance of "add"
events.  (A previous version of this patch used a per-device "driver can
hotplug" flag, which only scrubbed $MODALIAS from the environment rather
than suppressing the entire hotplug event.) It also shrinks that flag to
one bit, saving a word in "struct device".

So the net of this patch is removing some nasty failures with legacy
drivers, while retaining hotplug capability for the majority of platform
drivers.

Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Cc: Greg KH <gregkh@suse.de>
Cc: Andres Salomon <dilinger@debian.org>
Cc: Dominik Brodowski <linux@dominikbrodowski.net>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2007-05-08 11:15:10 -07:00
..
acorn
acpi PNPACPI sets pnpdev->dev.archdata 2007-05-08 11:15:08 -07:00
amba
ata Merge branch 'for-linus' of master.kernel.org:/home/rmk/linux-2.6-arm 2007-05-06 13:20:10 -07:00
atm
auxdisplay
base fix hotplug for legacy platform drivers 2007-05-08 11:15:10 -07:00
block cciss: set rq->errors more correctly in driver 2007-05-08 11:15:09 -07:00
bluetooth [Bluetooth] Correct SCO buffer for another Broadcom based dongle 2007-05-05 00:36:22 +02:00
cdrom mm: remove destroy_dirty_buffers from invalidate_bdev() 2007-05-07 12:12:55 -07:00
char dtlk: fix error checks in module_init() 2007-05-08 11:15:09 -07:00
clocksource
connector
cpufreq Add a new deferrable delayed work init 2007-05-08 11:15:05 -07:00
crypto
dio
dma
edac Fix 82875 PCI setup 2007-05-08 11:15:07 -07:00
eisa virtual_eisa_root_init() should be __init 2007-05-08 11:15:02 -07:00
fc4
firmware
hid header cleaning: don't include smp_lock.h when not used 2007-05-08 11:15:07 -07:00
hwmon Apple SMC driver (hardware monitoring and control) 2007-05-08 11:15:00 -07:00
i2c header cleaning: don't include smp_lock.h when not used 2007-05-08 11:15:07 -07:00
ide ide-cs: recognize 2GB CompactFlash from Transcend 2007-05-05 22:03:51 +02:00
ieee1394 header cleaning: don't include smp_lock.h when not used 2007-05-08 11:15:07 -07:00
infiniband header cleaning: don't include smp_lock.h when not used 2007-05-08 11:15:07 -07:00
input header cleaning: don't include smp_lock.h when not used 2007-05-08 11:15:07 -07:00
isdn header cleaning: don't include smp_lock.h when not used 2007-05-08 11:15:07 -07:00
kvm KVM: Remove unused 'instruction_length' 2007-05-03 10:52:32 +03:00
leds
macintosh header cleaning: don't include smp_lock.h when not used 2007-05-08 11:15:07 -07:00
mca
md Remove do_sync_file_range() 2007-05-08 11:15:04 -07:00
media header cleaning: don't include smp_lock.h when not used 2007-05-08 11:15:07 -07:00
message remove unused header file: drivers/message/i2o/i2o_lan.h 2007-05-08 11:15:02 -07:00
mfd header cleaning: don't include smp_lock.h when not used 2007-05-08 11:15:07 -07:00
misc Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/drzeus/mmc 2007-05-04 21:44:34 -07:00
mmc Merge branch 'for-linus' of master.kernel.org:/home/rmk/linux-2.6-arm 2007-05-06 13:20:10 -07:00
mtd slab allocators: Remove SLAB_DEBUG_INITIAL flag 2007-05-07 12:12:57 -07:00
net header cleaning: don't include smp_lock.h when not used 2007-05-08 11:15:07 -07:00
nubus
oprofile
parisc header cleaning: don't include smp_lock.h when not used 2007-05-08 11:15:07 -07:00
parport parport_serial: fix PCI must_checks 2007-05-08 11:15:08 -07:00
pci header cleaning: don't include smp_lock.h when not used 2007-05-08 11:15:07 -07:00
pcmcia fix hotplug for legacy platform drivers 2007-05-08 11:15:10 -07:00
pnp PNPACPI sets pnpdev->dev.archdata 2007-05-08 11:15:08 -07:00
ps3 ps3av: Use __func__ instead of __FUNCTION__ 2007-05-04 17:59:09 -07:00
rapidio
rtc rtc: add RTC class driver for the Maxim MAX6900 2007-05-08 11:15:03 -07:00
s390 Merge master.kernel.org:/pub/scm/linux/kernel/git/jejb/scsi-misc-2.6 2007-05-05 13:30:44 -07:00
sbus header cleaning: don't include smp_lock.h when not used 2007-05-08 11:15:07 -07:00
scsi Replace deprecated SA_xxx interrupt flags 2007-05-08 11:15:08 -07:00
serial header cleaning: don't include smp_lock.h when not used 2007-05-08 11:15:07 -07:00
sh
sn
spi layered parport code uses parport->dev 2007-05-08 11:15:05 -07:00
tc
telephony replace pci_find_device in drivers/telephony/ixj.c 2007-05-08 11:15:02 -07:00
usb header cleaning: don't include smp_lock.h when not used 2007-05-08 11:15:07 -07:00
video header cleaning: don't include smp_lock.h when not used 2007-05-08 11:15:07 -07:00
w1
zorro Amiga Zorro bus: kill resource_size_t warnings 2007-05-04 17:59:08 -07:00
Kconfig
Makefile