Subject: [PATCH] [acpi ec] Add counter for number of pending GPE interrupts Signed-off-by: Patrick Mochel --- drivers/acpi/drivers/ec/driver.c | 1 + drivers/acpi/drivers/ec/ec.h | 1 + drivers/acpi/drivers/ec/gpe.c | 3 +++ 3 files changed, 5 insertions(+), 0 deletions(-) applies-to: b007a589f7044113192cabe98659663aea873de3 b1fcb27a75fa08ecc49fd75c6c4a6eb16f5506b1 diff --git a/drivers/acpi/drivers/ec/driver.c b/drivers/acpi/drivers/ec/driver.c index f0c2695..888c17c 100644 --- a/drivers/acpi/drivers/ec/driver.c +++ b/drivers/acpi/drivers/ec/driver.c @@ -47,6 +47,7 @@ static int ec_add(struct acpi_dev * ad) ae->e_expect = 0; init_waitqueue_head(&ae->e_waitq); init_MUTEX(&ae->e_sem); + atomic_set(&ae->e_pending, 0); if (ec_poll_mode == EC_MODE_INTR) ec_intr_init(ae); diff --git a/drivers/acpi/drivers/ec/ec.h b/drivers/acpi/drivers/ec/ec.h index 2f62052..00307e3 100644 --- a/drivers/acpi/drivers/ec/ec.h +++ b/drivers/acpi/drivers/ec/ec.h @@ -47,6 +47,7 @@ struct acpi_ec { struct acpi_generic_address e_command; struct acpi_generic_address e_data; + atomic_t e_pending; unsigned int e_expect; wait_queue_head_t e_waitq; struct semaphore e_sem; diff --git a/drivers/acpi/drivers/ec/gpe.c b/drivers/acpi/drivers/ec/gpe.c index b478071..86615d6 100644 --- a/drivers/acpi/drivers/ec/gpe.c +++ b/drivers/acpi/drivers/ec/gpe.c @@ -74,6 +74,7 @@ static void gpe_query(void * context) acpi_evaluate_object(ec->e_handle, obj, NULL, NULL); } + atomic_dec(&ec->e_pending); if (ec->e_gpe_enable == ACPI_NOT_ISR) acpi_enable_gpe(NULL, ec->e_gpe_bit, ACPI_NOT_ISR); } @@ -94,6 +95,8 @@ static u32 gpe_callback(void * data) */ if (ec_status & ACPI_EC_FLAG_SCI) { acpi_status status; + + atomic_inc(&ec->e_pending); status = acpi_os_queue_for_execution(OSD_PRIORITY_GPE, gpe_query, ec); return ACPI_SUCCESS(status) ? ACPI_INTERRUPT_HANDLED : --- 0.99.9.GIT