ACPI / EC: Fix unexpected ec_remove_handlers() invocations
authorLv Zheng <lv.zheng@intel.com>
Mon, 15 Dec 2014 00:47:52 +0000 (08:47 +0800)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Mon, 15 Dec 2014 14:10:23 +0000 (15:10 +0100)
The ec_remove_handlers() is invoked without checking
EC_FLAGS_HANDLERS_INSTALLED, this patch enhances this check to avoid issues
that acpi_disable_gpe() is invoked unexpectedly to reduce the GPE runtime
count. This may happen when the EC handler installation failed on some
platforms.

Reported-by: Venkat Raghavulu <venkat.raghavulu@intel.com>
Signed-off-by: Lv Zheng <lv.zheng@intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
drivers/acpi/ec.c

index 5f9b74b9b71f0a9a6ad2ba4243ceab58c57ff69b..1b5853f384e268f7efd7928f13d929376094a9a5 100644 (file)
@@ -844,6 +844,8 @@ static int ec_install_handlers(struct acpi_ec *ec)
 
 static void ec_remove_handlers(struct acpi_ec *ec)
 {
+       if (!test_bit(EC_FLAGS_HANDLERS_INSTALLED, &ec->flags))
+               return;
        acpi_disable_gpe(NULL, ec->gpe);
        if (ACPI_FAILURE(acpi_remove_address_space_handler(ec->handle,
                                ACPI_ADR_SPACE_EC, &acpi_ec_space_handler)))