summaryrefslogtreecommitdiff
path: root/libre/linux-libre-pae/0006-ACPI-PM-s2idle-Rework-ACPI-events-synchronization.patch
diff options
context:
space:
mode:
authorDavid P <megver83@parabola.nu>2020-01-06 22:43:23 -0300
committerDavid P <megver83@parabola.nu>2020-01-06 22:43:23 -0300
commit7dfb34b68de75b345f4a7dc75a5a83ed063994d2 (patch)
treef9e5e3e3b2a45b788c36eea05ae4a64909de4ef1 /libre/linux-libre-pae/0006-ACPI-PM-s2idle-Rework-ACPI-events-synchronization.patch
parent8971402589d668a3a5fc2b6e9b9f3e9775b6dd35 (diff)
downloadabslibre-7dfb34b68de75b345f4a7dc75a5a83ed063994d2.tar.gz
abslibre-7dfb34b68de75b345f4a7dc75a5a83ed063994d2.tar.bz2
abslibre-7dfb34b68de75b345f4a7dc75a5a83ed063994d2.zip
updpkg: libre/linux-libre-pae 5.4.8-1
Signed-off-by: David P <megver83@parabola.nu>
Diffstat (limited to 'libre/linux-libre-pae/0006-ACPI-PM-s2idle-Rework-ACPI-events-synchronization.patch')
-rw-r--r--libre/linux-libre-pae/0006-ACPI-PM-s2idle-Rework-ACPI-events-synchronization.patch78
1 files changed, 78 insertions, 0 deletions
diff --git a/libre/linux-libre-pae/0006-ACPI-PM-s2idle-Rework-ACPI-events-synchronization.patch b/libre/linux-libre-pae/0006-ACPI-PM-s2idle-Rework-ACPI-events-synchronization.patch
new file mode 100644
index 000000000..7b749ce70
--- /dev/null
+++ b/libre/linux-libre-pae/0006-ACPI-PM-s2idle-Rework-ACPI-events-synchronization.patch
@@ -0,0 +1,78 @@
+From f74b67cce5f0c5c37b0c5cb0020a818f0594a743 Mon Sep 17 00:00:00 2001
+From: "Rafael J. Wysocki" <rafael.j.wysocki@intel.com>
+Date: Thu, 28 Nov 2019 23:50:40 +0100
+Subject: [PATCH 06/13] ACPI: PM: s2idle: Rework ACPI events synchronization
+
+Note that the EC GPE processing need not be synchronized in
+acpi_s2idle_wake() after invoking acpi_ec_dispatch_gpe(), because
+that function checks the GPE status and dispatches its handler if
+need be and the SCI action handler is not going to run anyway at
+that point.
+
+Moreover, it is better to drain all of the pending ACPI events
+before restoring the working-state configuration of GPEs in
+acpi_s2idle_restore(), because those events are likely to be related
+to system wakeup, in which case they will not be relevant going
+forward.
+
+Rework the code to take these observations into account.
+
+Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
+---
+ drivers/acpi/sleep.c | 26 +++++++++++++++++++-------
+ 1 file changed, 19 insertions(+), 7 deletions(-)
+
+diff --git a/drivers/acpi/sleep.c b/drivers/acpi/sleep.c
+index 2af937a8b1c5..6747a279621b 100644
+--- a/drivers/acpi/sleep.c
++++ b/drivers/acpi/sleep.c
+@@ -977,6 +977,16 @@ static int acpi_s2idle_prepare_late(void)
+ return 0;
+ }
+
++static void acpi_s2idle_sync(void)
++{
++ /*
++ * The EC driver uses the system workqueue and an additional special
++ * one, so those need to be flushed too.
++ */
++ acpi_ec_flush_work();
++ acpi_os_wait_events_complete(); /* synchronize Notify handling */
++}
++
+ static void acpi_s2idle_wake(void)
+ {
+ /*
+@@ -1001,13 +1011,8 @@ static void acpi_s2idle_wake(void)
+ * should be missed by canceling the wakeup here.
+ */
+ pm_system_cancel_wakeup();
+- /*
+- * The EC driver uses the system workqueue and an additional
+- * special one, so those need to be flushed too.
+- */
+- acpi_os_wait_events_complete(); /* synchronize EC GPE processing */
+- acpi_ec_flush_work();
+- acpi_os_wait_events_complete(); /* synchronize Notify handling */
++
++ acpi_s2idle_sync();
+
+ rearm_wake_irq(acpi_sci_irq);
+ }
+@@ -1024,6 +1029,13 @@ static void acpi_s2idle_restore_early(void)
+
+ static void acpi_s2idle_restore(void)
+ {
++ /*
++ * Drain pending events before restoring the working-state configuration
++ * of GPEs.
++ */
++ acpi_os_wait_events_complete(); /* synchronize GPE processing */
++ acpi_s2idle_sync();
++
+ s2idle_wakeup = false;
+
+ acpi_enable_all_runtime_gpes();
+--
+2.24.1
+