Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=5ebffd7c05391693b71d3326c8c78ff82f728ed0
Commit:     5ebffd7c05391693b71d3326c8c78ff82f728ed0
Parent:     d80d02173360562625c10a526132fb87be4de2a4
Author:     Maxime Austruy <[EMAIL PROTECTED]>
AuthorDate: Sun Jul 1 12:06:38 2007 -0700
Committer:  Linus Torvalds <[EMAIL PROTECTED]>
CommitDate: Sun Jul 1 12:29:44 2007 -0700

    asus_acpi: fix oops on non-asus machines
    
    If asus_acpi_init doesn't find any device it knows about, it mistakenly
    returns a "success" error code even though it cleans up after itself.  Later
    when trying to rmmod asus_acpi, the module_exit routine would try to clean 
up
    one more time and we would end up calling
    acpi_bus_unregister_driver(&asus_hotk_driver) twice.  This patch addresses
    this first problem by returning -ENODEV when no appropriate device is found.
    
    Then there was also another bug with the code handling the return value of
    backlight_device_register.  If this function ever failed, the driver would
    cleanup by calling the module_exit routine from module_init, but it would
    still return "success".  So any attempt to rmmod this module would result in
    asus_acpi_exit being called twice but it's not ready to handle it (I haven't
    hit this bug, just found it by code inspection).  This patch fixes that by
    inserting a return -ENODEV; at the end of this error handling path.
    
    Signed-off-by: Maxime Austruy <[EMAIL PROTECTED]>
    Cc: Len Brown <[EMAIL PROTECTED]>
    Cc: Richard Purdie <[EMAIL PROTECTED]>
    Cc: Jan Engelhardt <[EMAIL PROTECTED]>
    Signed-off-by: Andrew Morton <[EMAIL PROTECTED]>
    Signed-off-by: Linus Torvalds <[EMAIL PROTECTED]>
---
 drivers/acpi/asus_acpi.c |    3 ++-
 1 files changed, 2 insertions(+), 1 deletions(-)

diff --git a/drivers/acpi/asus_acpi.c b/drivers/acpi/asus_acpi.c
index 6d7d415..3cd79ca 100644
--- a/drivers/acpi/asus_acpi.c
+++ b/drivers/acpi/asus_acpi.c
@@ -1398,7 +1398,7 @@ static int __init asus_acpi_init(void)
        if (!asus_hotk_found) {
                acpi_bus_unregister_driver(&asus_hotk_driver);
                remove_proc_entry(PROC_ASUS, acpi_root_dir);
-               return result;
+               return -ENODEV;
        }
 
        asus_backlight_device = backlight_device_register("asus",NULL,NULL,
@@ -1407,6 +1407,7 @@ static int __init asus_acpi_init(void)
                printk(KERN_ERR "Could not register asus backlight device\n");
                asus_backlight_device = NULL;
                asus_acpi_exit();
+               return -ENODEV;
        }
         asus_backlight_device->props.max_brightness = 15;
 
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to