Re: [PATCH] acpi: Avoid dropping rapid hotkey events (or other GPEs) on Asus EeePC

!MAILaRCHIVE_VOTE_RePLACE
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]
To: Alexey Starikovskiy <astarikovskiy@...>
Cc: <linux-acpi@...>, linux-kernel <linux-kernel@...>, Henrique de Moraes Holschuh <hmh@...>
Date: Thursday, July 17, 2008 - 2:55 pm

Alexey Starikovskiy wrote:

OK, I'm happy now.

However, I'm now worried that I broke the semantics for
EC_FLAGS_QUERY_PENDING.  In my patch it gets cleared after the first
query, even though I'm running queries in a loop until nothing is left. 
It doesn't cause a problem in my patch, but it's unclean and might cause
confusion later on.  It'd be better to clear it after the loop has
completed.

Can I fix my patch?  If you ACK the new code below, then I'll resend
with a proper changelog, S-o-B, CC's from the -mm mail (including
stable@kernel.org) and grovel to akpm, etc.

You're latest (quieter) work still applies on top and works fine.

Thanks
Alan

---

From: Alan Jenkins <alan-jenkins@tuffmail.co.uk>
Tested-by: Alan Jenkins <alan-jenkins@tuffmail.co.uk>

diff --git a/drivers/acpi/ec.c b/drivers/acpi/ec.c
index 5622aee..2a42392 100644
--- a/drivers/acpi/ec.c
+++ b/drivers/acpi/ec.c
@@ -230,8 +230,7 @@ static int acpi_ec_transaction_unlocked(struct acpi_ec *ec, u8 command,
 			       "finish-write timeout, command = %d\n", command);
 			goto end;
 		}
-	} else if (command == ACPI_EC_COMMAND_QUERY)
-		clear_bit(EC_FLAGS_QUERY_PENDING, &ec->flags);
+	}
 
 	for (; rdata_len > 0; --rdata_len) {
 		result = acpi_ec_wait(ec, ACPI_EC_EVENT_OBF_1, force_poll);
@@ -459,14 +458,10 @@ void acpi_ec_remove_query_handler(struct acpi_ec *ec, u8 query_bit)
 
 EXPORT_SYMBOL_GPL(acpi_ec_remove_query_handler);
 
-static void acpi_ec_gpe_query(void *ec_cxt)
+static void acpi_ec_gpe_run_handler(struct acpi_ec *ec, u8 value)
 {
-	struct acpi_ec *ec = ec_cxt;
-	u8 value = 0;
 	struct acpi_ec_query_handler *handler, copy;
 
-	if (!ec || acpi_ec_query(ec, &value))
-		return;
 	mutex_lock(&ec->lock);
 	list_for_each_entry(handler, &ec->list, node) {
 		if (value == handler->query_bit) {
@@ -484,6 +479,20 @@ static void acpi_ec_gpe_query(void *ec_cxt)
 	mutex_unlock(&ec->lock);
 }
 
+static void acpi_ec_gpe_query(void *ec_cxt)
+{
+	struct acpi_ec *ec = ec_cxt;
+	u8 value = 0;
+
+	if (!ec)
+		return;
+
+	while (acpi_ec_query(ec, &value) != 0)
+		acpi_ec_gpe_run_handler(ec, value);
+
+	clear_bit(EC_FLAGS_QUERY_PENDING, &ec->flags);
+}
+
 static u32 acpi_ec_gpe_handler(void *data)
 {
 	acpi_status status = AE_OK;



--
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]

Messages in current thread:
Re: [PATCH] acpi: Avoid dropping rapid hotkey events (or oth..., Alexey Starikovskiy, (Thu Jul 17, 10:35 am)
Re: [PATCH] acpi: Avoid dropping rapid hotkey events (or oth..., Alexey Starikovskiy, (Thu Jul 17, 12:45 pm)
Re: [PATCH] acpi: Avoid dropping rapid hotkey events (or oth..., Alan Jenkins, (Thu Jul 17, 2:55 pm)
Re: [PATCH] acpi: Avoid dropping rapid hotkey events (or oth..., Alexey Starikovskiy, (Thu Jul 17, 2:59 pm)
Re: [PATCH] acpi: Avoid dropping rapid hotkey events (or oth..., Maximilian Engelhardt, (Wed Aug 13, 9:36 am)
Re: [PATCH] acpi: Avoid dropping rapid hotkey events (or oth..., Alexey Starikovskiy, (Thu Jul 17, 7:49 am)
Re: [PATCH] acpi: Avoid dropping rapid hotkey events (or oth..., Henrique de Moraes Holschuh..., (Thu Jul 17, 8:13 am)
Re: [PATCH] acpi: Avoid dropping rapid hotkey events (or oth..., Alexey Starikovskiy, (Thu Jul 17, 8:30 am)
Re: [PATCH] acpi: Avoid dropping rapid hotkey events (or oth..., Henrique de Moraes Holschuh..., (Thu Jul 17, 12:26 pm)
Re: [PATCH] acpi: Avoid dropping rapid hotkey events (or oth..., Henrique de Moraes Holschuh..., (Thu Jul 17, 2:50 pm)
[PATCH 0/3] acpi: GPE fixes, Alan Jenkins, (Sat Jul 19, 7:37 am)
Re: [PATCH 0/3] acpi: GPE fixes, Vegard Nossum, (Sat Jul 19, 10:07 am)