aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGuillaume Chazarain <guichaz@yahoo.fr>2007-08-16 12:18:53 -0400
committerLen Brown <len.brown@intel.com>2007-08-24 01:07:30 -0400
commite1996a69e162b1c99c3d3802684d1c388b54f47d (patch)
treebce0306d79d4b282ecc7629803eda2072ec20321
parentb377fd3982ad957c796758a90e2988401a884241 (diff)
asus-laptop: Fix rmmod of asus_laptop
The asus laptop driver conditionnaly registers leds in asus_led_register() depending on their availability, but unconditionnaly unregisters them all at exit time or when the module fails to load. Unregistering not registered leds result in the following Oops. So we should check before unregistering. [<c032d2f9>] do_page_fault+0x511/0x5e9 [<c032bae2>] error_code+0x6a/0x70 [<c026abf8>] device_unregister+0x26/0x32 [<f8864218>] led_classdev_unregister+0x58/0x94 [led_class] [<f88a90f8>] asus_led_exit+0x17/0x41 [asus_laptop] [<f88a91c9>] asus_laptop_exit+0xd/0x3f [asus_laptop] [<c013cee1>] sys_delete_module+0x17b/0x1a2 [<c0106eae>] sysenter_past_esp+0x6b/0xa1 EIP: [<c026a9a3>] device_del+0xb/0x23a SS:ESP 0068:f594ef0c Signed-off-by: Guillaume Chazarain <guichaz@yahoo.fr> Signed-off-by: Len Brown <len.brown@intel.com>
-rw-r--r--drivers/misc/asus-laptop.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/drivers/misc/asus-laptop.c b/drivers/misc/asus-laptop.c
index d0fc4fd212e6..40db9f70148f 100644
--- a/drivers/misc/asus-laptop.c
+++ b/drivers/misc/asus-laptop.c
@@ -1072,7 +1072,8 @@ static void asus_backlight_exit(void)
1072} 1072}
1073 1073
1074#define ASUS_LED_UNREGISTER(object) \ 1074#define ASUS_LED_UNREGISTER(object) \
1075 led_classdev_unregister(&object##_led) 1075 if (object##_led.dev) \
1076 led_classdev_unregister(&object##_led)
1076 1077
1077static void asus_led_exit(void) 1078static void asus_led_exit(void)
1078{ 1079{