kernel_optimize_test/drivers
Jean Delvare dc4c15d44b platform: reorder platform_device_del
In platform_device_del(), we currently delete the device resources
first, then we delete the device itself. This causes a (minor) bug to
occur when one unregisters a platform device before unregistering its
platform driver, and the driver is requesting (in .probe()) and
releasing (in .remove()) a resource of the device. The device
resources are already gone by the time the driver gets the chance to
release the resources it had been requesting, causing an error like:
Trying to free nonexistent resource <0000000000000295-0000000000000296>

If the platform driver is unregistered first, the problem doesn't
occur, as the driver will have the opportunity to release the
resources it had requested before the device resources themselves are
released. It's a bit odd that unregistering the driver first or the
device first doesn't lead to the same result.

So I believe that we should delete the device first in
platform_device_del(). I've searched the git history and found that it
used to be the case before 2.6.8, but was changed here:

http://www.kernel.org/git/?p=linux/kernel/git/torvalds/old-2.6-bkcvs.git;a=commitdiff;h=96ef7b3689936ee1e64b711511342026a8ce459c

> 2004/07/14 16:09:44-07:00 dtor_core
> [PATCH] Driver core: Fix OOPS in device_platform_unregister
> 
> Driver core: platform_device_unregister should release resources first
>              and only then call device_unregister, otherwise if there
>              are no more references to the device it will be freed and
>              the fucntion will try to access freed memory.  

However we now have an explicit call to put_device() at the end of
platform_device_unregister() so I guess the original problem no longer
exists and it is safe to revert that change.

Signed-off-by: Jean Delvare <khali@linux-fr.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
2007-05-02 18:57:59 -07:00
..
acorn
acpi power management: implement pm_ops.valid for everybody 2007-04-30 16:40:40 -07:00
amba
ata libata: honour host controllers that want just one host 2007-04-30 17:43:48 -07:00
atm
auxdisplay
base platform: reorder platform_device_del 2007-05-02 18:57:59 -07:00
block
bluetooth
cdrom
char Merge branch 'for-2.6.22' of git://git.kernel.org/pub/scm/linux/kernel/git/paulus/powerpc 2007-04-30 08:10:12 -07:00
clocksource
connector
cpufreq
crypto
dio
dma
edac
eisa
fc4
firmware
hid Merge branch 'for-linus' of master.kernel.org:/pub/scm/linux/kernel/git/jikos/hid 2007-04-30 08:58:21 -07:00
hwmon Merge branch 'linux-2.6' into for-2.6.22 2007-04-30 12:38:01 +10:00
i2c
ide
ieee1394 ieee1394: remove garbage from Kconfig 2007-04-30 00:00:33 +02:00
infiniband Merge branch 'linux-2.6' into for-2.6.22 2007-04-30 12:38:01 +10:00
input
isdn
kvm
leds
macintosh Merge branch 'linux-2.6' into for-2.6.22 2007-04-30 12:38:01 +10:00
mca
md [BLOCK] Don't pin lots of memory in mempools 2007-04-30 09:08:17 +02:00
media Merge branch 'for-2.6.22' of git://git.kernel.org/pub/scm/linux/kernel/git/paulus/powerpc 2007-04-30 08:10:12 -07:00
message
mfd
misc Pull thinkpad into release branch 2007-04-28 23:11:19 -04:00
mmc
mtd
net Merge master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6 2007-04-30 08:14:42 -07:00
nubus
oprofile
parisc [NET]: Remove NETIF_F_INTERNAL_STATS, default to internal stats. 2007-04-28 21:04:03 -07:00
parport
pci Merge branch 'upstream-linus' of master.kernel.org:/pub/scm/linux/kernel/git/jgarzik/libata-dev 2007-04-29 10:48:21 -07:00
pcmcia
pnp
ps3 [POWERPC] Remove dev_dbg redefinition in drivers/ps3/vuart.c 2007-04-30 13:03:39 +10:00
rapidio
rtc
s390
sbus
scsi Merge branch 'for-linus' of git://git.kernel.dk/data/git/linux-2.6-block 2007-04-30 08:12:39 -07:00
serial Merge branch 'linux-2.6' into for-2.6.22 2007-04-30 12:38:01 +10:00
sh
sn
spi
tc
telephony
usb Merge branch 'for-linus' of master.kernel.org:/pub/scm/linux/kernel/git/jikos/hid 2007-04-30 08:58:21 -07:00
video Merge branch 'linux-2.6' into for-2.6.22 2007-04-30 12:38:01 +10:00
w1
zorro
Kconfig
Makefile