OpenCloudOS-Kernel/drivers/pcmcia
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
..
Kconfig [PATCH] don't select CONFIG_HOTPLUG 2006-07-10 13:24:12 -07:00
Makefile [PATCH] pcmcia: AT91RM9200 Compact Flash driver 2006-03-31 17:05:41 +02:00
at91_cf.c at91_cf, minor fix 2007-05-07 12:12:50 -07:00
au1000_db1x00.c Merge git://git.kernel.org/pub/scm/linux/kernel/git/bunk/trivial 2006-06-30 15:39:30 -07:00
au1000_generic.c [PATCH] Fix struct device member name in PCMCIA au1000_generic 2007-03-27 09:05:16 -07:00
au1000_generic.h Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
au1000_pb1x00.c Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
au1000_xxs1500.c [PATCH] Alchemy PCMCIA: Fix config.h inclusion 2005-11-10 11:18:26 +01:00
cardbus.c Remove useless FIND_FIRST_BIT() macro from cardbus.c. 2007-02-17 19:16:31 +01:00
cirrus.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
cistpl.c [PATCH] remove many unneeded #includes of sched.h 2007-02-14 08:09:54 -08:00
cs.c PCI: Cleanup the includes of <linux/pci.h> 2007-05-02 19:02:35 -07:00
cs_internal.h Driver core: convert pcmcia code to use struct device 2007-02-07 10:37:11 -08:00
ds.c add new_id to PCMCIA drivers 2007-05-07 12:12:50 -07:00
ds_internal.h [PATCH] pcmcia: remove export of pcmcia_release_configuration 2006-03-31 17:15:53 +02:00
hd64465_ss.c Driver core: more fallout from class_device changes for pcmcia 2007-02-23 14:52:09 -08:00
i82092.c Driver core: convert pcmcia code to use struct device 2007-02-07 10:37:11 -08:00
i82092aa.h IRQ: Maintain regs pointer globally rather than passing to IRQ handlers 2006-10-05 15:10:12 +01:00
i82365.c [PATCH] remove many unneeded #includes of sched.h 2007-02-14 08:09:54 -08:00
i82365.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
m8xx_pcmcia.c Driver core: more fallout from class_device changes for pcmcia 2007-02-23 14:52:09 -08:00
m32r_cfc.c Driver core: more fallout from class_device changes for pcmcia 2007-02-23 14:52:09 -08:00
m32r_cfc.h [PATCH] m32r: Update m32r_cfc.[ch] to support Mappi-III platform 2005-06-21 19:07:30 -07:00
m32r_pcc.c [PATCH] remove many unneeded #includes of sched.h 2007-02-14 08:09:54 -08:00
m32r_pcc.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
o2micro.h [PATCH] pcmcia: disable read prefetch/write burst on old O2Micro bridges 2005-07-28 08:39:01 -07:00
omap_cf.c [PATCH] omap_cf: oops-on-suspend fix 2007-04-08 19:47:55 -07:00
pcmcia_ioctl.c [PATCH] mark struct file_operations const 5 2007-02-12 09:48:45 -08:00
pcmcia_resource.c Driver core: convert pcmcia code to use struct device 2007-02-07 10:37:11 -08:00
pd6729.c Driver core: convert pcmcia code to use struct device 2007-02-07 10:37:11 -08:00
pd6729.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
pxa2xx_base.c [ARM] Fix suspend oops caused by PXA2xx PCMCIA driver 2006-10-28 22:42:56 +01:00
pxa2xx_base.h [ARM] Fix suspend oops caused by PXA2xx PCMCIA driver 2006-10-28 22:42:56 +01:00
pxa2xx_lubbock.c [PATCH] remove many unneeded #includes of sched.h 2007-02-14 08:09:54 -08:00
pxa2xx_mainstone.c fix hotplug for legacy platform drivers 2007-05-08 11:15:10 -07:00
pxa2xx_sharpsl.c fix hotplug for legacy platform drivers 2007-05-08 11:15:10 -07:00
ricoh.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
rsrc_mgr.c Driver core: more fallout from class_device changes for pcmcia 2007-02-23 14:52:09 -08:00
rsrc_nonstatic.c Driver core: convert pcmcia code to use struct device 2007-02-07 10:37:11 -08:00
sa11xx_base.c Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
sa11xx_base.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
sa1100_assabet.c Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
sa1100_badge4.c [PATCH] remove many unneeded #includes of sched.h 2007-02-14 08:09:54 -08:00
sa1100_cerf.c [PATCH] remove many unneeded #includes of sched.h 2007-02-14 08:09:54 -08:00
sa1100_generic.c Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
sa1100_generic.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
sa1100_h3600.c [PATCH] remove many unneeded #includes of sched.h 2007-02-14 08:09:54 -08:00
sa1100_jornada720.c [PATCH] remove many unneeded #includes of sched.h 2007-02-14 08:09:54 -08:00
sa1100_neponset.c [PATCH] remove many unneeded #includes of sched.h 2007-02-14 08:09:54 -08:00
sa1100_shannon.c [PATCH] remove many unneeded #includes of sched.h 2007-02-14 08:09:54 -08:00
sa1100_simpad.c [PATCH] remove many unneeded #includes of sched.h 2007-02-14 08:09:54 -08:00
sa1111_generic.c Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
sa1111_generic.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
soc_common.c pcmcia: some class_device fallout 2007-02-16 15:19:18 -08:00
soc_common.h [PATCH] pcmcia: remove references to pcmcia/version.h 2005-07-07 18:24:07 -07:00
socket_sysfs.c PCI: Cleanup the includes of <linux/pci.h> 2007-05-02 19:02:35 -07:00
tcic.c Driver core: convert pcmcia code to use struct device 2007-02-07 10:37:11 -08:00
tcic.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
ti113x.h [PATCH] pcmcia: TI PCIxx12 CardBus controller support 2006-06-30 22:09:11 +02:00
topic.h [PATCH] yenta: make ToPIC95 bridges work with 16bit cards 2005-09-07 16:57:21 -07:00
vg468.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
vrc4171_card.c Driver core: more fallout from class_device changes for pcmcia 2007-02-23 14:52:09 -08:00
vrc4173_cardu.c IRQ: Maintain regs pointer globally rather than passing to IRQ handlers 2006-10-05 15:10:12 +01:00
vrc4173_cardu.h Update Yoichi Yuasa's email address. 2006-01-10 13:39:07 +00:00
yenta_socket.c [PATCH] remove many unneeded #includes of sched.h 2007-02-14 08:09:54 -08:00
yenta_socket.h [PATCH] yenta: make ToPIC95 bridges work with 16bit cards 2005-09-07 16:57:21 -07:00