Thread (29 messages) 29 messages, 7 authors, 2021-12-17

Re: [PATCH 2/4] ACPI: PM: Remove redundant cache flushing

From: "Rafael J. Wysocki" <rafael@kernel.org>
Date: 2021-12-17 18:04:45
Also in: lkml

On Thu, Dec 9, 2021 at 2:32 PM Kirill A. Shutemov
[off-list ref] wrote:
On Tue, Dec 07, 2021 at 05:35:38PM +0100, Rafael J. Wysocki wrote:
quoted
I don't think this is needed for S2, because the function doesn't do
anything low-level in that case and simply returns (IOW, S2 isn't
really supported).
Updated patch is below. Does it look good?
It does, and so applied as 5.17 material with some minor edits in the changelog.

Thanks!
quoted hunk ↗ jump to hunk
From 5eb4ec7d8dd463ba186b779dcef2a802d999c59c Mon Sep 17 00:00:00 2001
From: "Kirill A. Shutemov" <redacted>
Date: Thu, 9 Dec 2021 16:08:02 +0300
Subject: [PATCH 1/2] ACPI: PM: Remove redundant cache flushing

ACPICA code takes care about cache flushing on S1/S2/S3 in
acpi_hw_extended_sleep() and acpi_hw_legacy_sleep().

acpi_suspend_enter() calls into ACPICA code via acpi_enter_sleep_state()
for S1 or x86_acpi_suspend_lowlevel() for S3.

acpi_sleep_prepare() call tree:
  __acpi_pm_prepare()
    acpi_pm_prepare()
      acpi_suspend_ops::prepare_late()
      acpi_hibernation_ops::pre_snapshot()
      acpi_hibernation_ops::prepare()
    acpi_suspend_begin_old()
      acpi_suspend_begin_old::begin()
  acpi_hibernation_begin_old()
    acpi_hibernation_ops_old::acpi_hibernation_begin_old()
  acpi_power_off_prepare()
    pm_power_off_prepare()

Hibernation (S4) and Power Off (S5) don't require cache flushing. So,
the only interesting callsites are acpi_suspend_ops::prepare_late() and
acpi_suspend_begin_old::begin(). Both of them have cache flush on
->enter() operation in acpi_suspend_enter().

Remove redundant ACPI_FLUSH_CPU_CACHE() in acpi_sleep_prepare() and
acpi_suspend_enter().

Signed-off-by: Kirill A. Shutemov <redacted>
---
 drivers/acpi/sleep.c | 3 ---
 1 file changed, 3 deletions(-)
diff --git a/drivers/acpi/sleep.c b/drivers/acpi/sleep.c
index eaa47753b758..5ca6c223ba3d 100644
--- a/drivers/acpi/sleep.c
+++ b/drivers/acpi/sleep.c
@@ -73,7 +73,6 @@ static int acpi_sleep_prepare(u32 acpi_state)
                acpi_set_waking_vector(acpi_wakeup_address);

        }
-       ACPI_FLUSH_CPU_CACHE();
 #endif
        pr_info("Preparing to enter system sleep state S%d\n", acpi_state);
        acpi_enable_wakeup_devices(acpi_state);
@@ -566,8 +565,6 @@ static int acpi_suspend_enter(suspend_state_t pm_state)
        u32 acpi_state = acpi_target_sleep_state;
        int error;

-       ACPI_FLUSH_CPU_CACHE();
-
        trace_suspend_resume(TPS("acpi_suspend"), acpi_state, true);
        switch (acpi_state) {
        case ACPI_STATE_S1:
--
 Kirill A. Shutemov
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help