summaryrefslogtreecommitdiffstats
path: root/drivers/acpi/ec.c
diff options
context:
space:
mode:
authorRafael J. Wysocki <rafael.j.wysocki@intel.com>2021-11-23 19:40:04 +0100
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>2021-12-01 20:17:32 +0100
commit388fb77dcf9793b9882e0f0651019f416ef50900 (patch)
tree69ca4c762cb7b53c1f477ab1a28b75f7f913a452 /drivers/acpi/ec.c
parent98d364509d77e2d441ef6d8bdf13e1a4258eac6c (diff)
downloadlinux-stable-388fb77dcf9793b9882e0f0651019f416ef50900.tar.gz
linux-stable-388fb77dcf9793b9882e0f0651019f416ef50900.tar.bz2
linux-stable-388fb77dcf9793b9882e0f0651019f416ef50900.zip
ACPI: EC: Rearrange the loop in acpi_ec_event_handler()
It is not necessary to check ec->nr_pending_queries against 0 in the while () loop in acpi_ec_event_handler(), because that loop terminates when ec->nr_pending_queries is 0 and the code depending on that can be run after the loop has ended. Modify the code accordingly and while at it rewrite the comment regarding that code to make it clearer. No intentional functional impact. Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Diffstat (limited to 'drivers/acpi/ec.c')
-rw-r--r--drivers/acpi/ec.c21
1 files changed, 10 insertions, 11 deletions
diff --git a/drivers/acpi/ec.c b/drivers/acpi/ec.c
index 07506afa1fda..7582ef59b81f 100644
--- a/drivers/acpi/ec.c
+++ b/drivers/acpi/ec.c
@@ -1230,18 +1230,17 @@ static void acpi_ec_event_handler(struct work_struct *work)
spin_lock_irqsave(&ec->lock, flags);
ec->nr_pending_queries--;
- /*
- * Before exit, make sure that this work item can be
- * scheduled again. There might be QR_EC failures, leaving
- * EC_FLAGS_QUERY_PENDING uncleared and preventing this work
- * item from being scheduled again.
- */
- if (!ec->nr_pending_queries) {
- if (ec_event_clearing == ACPI_EC_EVT_TIMING_STATUS ||
- ec_event_clearing == ACPI_EC_EVT_TIMING_QUERY)
- acpi_ec_complete_query(ec);
- }
}
+
+ /*
+ * Before exit, make sure that the it will be possible to queue up the
+ * event handling work again regardless of whether or not the query
+ * queued up above is processed successfully.
+ */
+ if (ec_event_clearing == ACPI_EC_EVT_TIMING_STATUS ||
+ ec_event_clearing == ACPI_EC_EVT_TIMING_QUERY)
+ acpi_ec_complete_query(ec);
+
spin_unlock_irqrestore(&ec->lock, flags);
ec_dbg_evt("Event stopped");