android_kernel_xiaomi_sm8350/drivers
Alan Stern f2eaae197f Driver core: Fix potential deadlock in driver core
There is a potential deadlock in the driver core.  It boils down to
the fact that bus_remove_device() calls klist_remove() instead of
klist_del(), thereby waiting until the reference count of the
klist_node in the bus's klist of devices drops to 0.  The refcount
can't reach 0 so long as a modprobe process is trying to bind a new
driver to the device being removed, by calling __driver_attach().  The
problem is that __driver_attach() tries to acquire the device's
parent's semaphore, but the caller of bus_remove_device() is quite
likely to own that semaphore already.

It isn't sufficient just to replace klist_remove() with klist_del().
Doing so runs the risk that the device would remain on the bus's klist
of devices for some time, and so could be bound to another driver even
after it was unregistered.  What's needed is a new way to distinguish
whether or not a device is registered, based on a criterion other than
whether its klist_node is linked into the bus's klist of devices.  That
way driver binding can fail when the device is unregistered, even if
it is still linked into the klist.

This patch (as782) implements the solution, by adding a new bitflag to
indiate when a struct device is registered, by testing the flag before
allowing a driver to bind a device, and by changing the definition of
the device_is_registered() inline.

Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
2006-09-25 21:08:40 -07:00
..
acorn
acpi Merge trivial low-risk suspend hotkey bugzilla-5918 into release 2006-08-20 21:49:29 -04:00
amba
ata [PATCH] pata_pdc2027x iomem annotations 2006-09-24 20:07:49 -07:00
atm [ATM] he: Fix __init/__devinit conflict 2006-09-24 20:09:33 -07:00
base Driver core: Fix potential deadlock in driver core 2006-09-25 21:08:40 -07:00
block Merge mulgrave-w:git/scsi-misc-2.6 2006-09-23 15:33:43 -05:00
bluetooth
cdrom [PATCH] cdrom/gdsc: fix printk format warning 2006-08-27 11:01:33 -07:00
char [PATCH] rtc: lockdep fix/workaround 2006-09-25 17:38:35 -07:00
clocksource
connector
cpufreq [CPUFREQ] Fix some more CPU hotplug locking. 2006-09-22 19:15:23 -04:00
crypto [CRYPTO] padlock: Convert padlock-sha to use crypto_hash 2006-09-21 11:46:22 +10:00
dio
dma
edac [PATCH] drivers/edac/edac_mc.h must #include <linux/platform_device.h> 2006-08-06 08:57:46 -07:00
eisa
fc4
firmware
hwmon [PATCH] hwmon: abituguru timeout fixes 2006-08-26 13:05:19 -07:00
i2c Merge branch 'merge' 2006-08-31 15:45:48 +10:00
ide PM: PCI and IDE handle PM_EVENT_PRETHAW 2006-09-25 21:08:37 -07:00
ieee1394 [PATCH] 1394: fix for recently added firewire patch that breaks things on ppc 2006-08-27 11:01:28 -07:00
infiniband Merge mulgrave-w:git/linux-2.6 2006-09-23 21:03:52 -05:00
input Input: psmouse - fix Intellimouse 4.0 initialization 2006-08-23 00:48:03 -04:00
isdn Merge branch 'master' into upstream 2006-08-07 06:38:41 -04:00
leds
macintosh [PATCH] asm/backlight.h is ppc-only 2006-09-22 17:48:57 -07:00
mca
md [BLOCK] dm-crypt: trivial comment improvements 2006-09-21 11:46:27 +10:00
media fix broken/dubious driver suspend() methods 2006-09-25 21:08:37 -07:00
message [SCSI] scsi_transport_sas: remove local_attached flag 2006-08-27 22:30:11 -05:00
mfd
misc
mmc [MMC] Always use a sector size of 512 bytes 2006-09-07 16:01:30 +01:00
mtd [MTD] Whitespace cleanup in SSFDC driver. 2006-09-23 16:20:48 +01:00
net [SUNLANCE]: Mark sparc_lance_probe_one as __devinit. 2006-09-25 16:39:56 -07:00
nubus
oprofile
parisc
parport
pci PCI: enable driver multi-threaded probe 2006-09-25 21:08:40 -07:00
pcmcia
pnp [PATCH] pnpacpi: reject ACPI_PRODUCER resources 2006-08-06 08:57:49 -07:00
rapidio
rtc [PATCH] rtc-s3c.c: fix time setting checks 2006-08-27 11:01:28 -07:00
s390 [SCSI] zfcp: fix: avoid removal of fsf reqs before qdio queues are down 2006-09-23 18:01:46 -05:00
sbus [OPENPROMIO]: Handle current_node being NULL correctly. 2006-09-18 01:47:13 -07:00
scsi fix broken/dubious driver suspend() methods 2006-09-25 21:08:37 -07:00
serial Merge git://git.kernel.org/pub/scm/linux/kernel/git/paulus/powerpc 2006-09-22 12:48:03 -07:00
sh
sn
spi
tc
telephony
usb PM: USB HCDs use PM_EVENT_PRETHAW 2006-09-25 21:08:37 -07:00
video PM: video drivers and PM_EVENT_PRETHAW 2006-09-25 21:08:37 -07:00
w1
zorro
Kconfig Move libata to drivers/ata. 2006-08-10 07:31:37 -04:00
Makefile Move libata to drivers/ata. 2006-08-10 07:31:37 -04:00