summaryrefslogtreecommitdiffstats
path: root/drivers/acpi/ec.c
diff options
context:
space:
mode:
authorRafael J. Wysocki <rafael.j.wysocki@intel.com>2017-07-20 03:43:12 +0200
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>2017-07-20 16:44:24 +0200
commit880a66275ef4d1e08e5d4dcf4cec768de18c68ef (patch)
treea627b30bec5389d5dc3ac77a964f82108f7fc6ba /drivers/acpi/ec.c
parent6ed860052906146cb2d9c71e7dc092053bc7f442 (diff)
downloadblackbird-obmc-linux-880a66275ef4d1e08e5d4dcf4cec768de18c68ef.tar.gz
blackbird-obmc-linux-880a66275ef4d1e08e5d4dcf4cec768de18c68ef.zip
ACPI / PM / EC: Flush all EC work in acpi_freeze_sync()
Commit eed4d47efe95 (ACPI / sleep: Ignore spurious SCI wakeups from suspend-to-idle) introduced acpi_freeze_sync() whose purpose is to flush all of the processing of possible wakeup events signaled via the ACPI SCI. However, it doesn't flush the query workqueue used by the EC driver, so the events generated by the EC may not be processed timely which leads to issues (increased overhead at least, lost events possibly). To fix that introduce acpi_ec_flush_work() that will flush all of the outstanding EC work and call it from acpi_freeze_sync(). Fixes: eed4d47efe95 (ACPI / sleep: Ignore spurious SCI wakeups from suspend-to-idle) Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Diffstat (limited to 'drivers/acpi/ec.c')
-rw-r--r--drivers/acpi/ec.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/drivers/acpi/ec.c b/drivers/acpi/ec.c
index f97a76782493..62068a5e814f 100644
--- a/drivers/acpi/ec.c
+++ b/drivers/acpi/ec.c
@@ -539,6 +539,14 @@ static void acpi_ec_disable_event(struct acpi_ec *ec)
spin_unlock_irqrestore(&ec->lock, flags);
__acpi_ec_flush_event(ec);
}
+
+void acpi_ec_flush_work(void)
+{
+ if (first_ec)
+ __acpi_ec_flush_event(first_ec);
+
+ flush_scheduled_work();
+}
#endif /* CONFIG_PM_SLEEP */
static bool acpi_ec_guard_event(struct acpi_ec *ec)
OpenPOWER on IntegriCloud