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; --
| Parag Warudkar | BUG: soft lockup - CPU#1 stuck for 15s! [swapper:0] |
| Tarkan Erimer | Re: Dual-Licensing Linux Kernel with GPL V2 and GPL V3 |
| Greg Kroah-Hartman | [PATCH 010/196] Chinese: add translation of Codingstyle |
| Andrew Morton | -mm merge plans for 2.6.23 |
git: | |
| Gerrit Renker | [PATCH 24/37] dccp: Processing Confirm options |
| David Miller | Re: [PATCH] pkt_sched: Destroy gen estimators under rtnl_lock(). |
| Alexey Dobriyan | Re: [GIT]: Networking |
| david | Re: iptables very slow after commit 784544739a25c30637397ace5489eeb6e15d7d49 |
