All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Rafael J. Wysocki" <rjw@rjwysocki.net>
To: Chris Wilson <chris@chris-wilson.co.uk>
Cc: linux-kernel@vger.kernel.org,
	Linus Torvalds <torvalds@linux-foundation.org>,
	"Rafael J. Wysocki" <rafael.j.wysocki@intel.com>,
	Linux PM <linux-pm@vger.kernel.org>,
	Linux ACPI <linux-acpi@vger.kernel.org>
Subject: Re: Linux 5.6-rc2
Date: Fri, 21 Feb 2020 01:46:18 +0100	[thread overview]
Message-ID: <4974198.mf5Me8BlfX@kreacher> (raw)
In-Reply-To: <10791544.HYfhKnFLvn@kreacher>

On Thursday, February 20, 2020 11:41:22 PM CET Rafael J. Wysocki wrote:
> On Monday, February 17, 2020 10:29:35 PM CET Chris Wilson wrote:
> > Quoting Linus Torvalds (2020-02-17 21:20:27)
> > > On Mon, Feb 17, 2020 at 8:22 AM Chris Wilson <chris@chris-wilson.co.uk> wrote:
> > > >
> > > > Quoting Linus Torvalds (2020-02-16 21:32:32)
> > > > > Rafael J. Wysocki (4):
> > > > >       ACPI: EC: Fix flushing of pending work
> > > > >       ACPI: PM: s2idle: Avoid possible race related to the EC GPE
> > > > >       ACPICA: Introduce acpi_any_gpe_status_set()
> > > > >       ACPI: PM: s2idle: Prevent spurious SCIs from waking up the system
> > > >
> > > > Our S0 testing broke on all platforms, so we've reverted
> > > > e3728b50cd9b ("ACPI: PM: s2idle: Avoid possible race related to the EC GPE")
> > > > fdde0ff8590b ("ACPI: PM: s2idle: Prevent spurious SCIs from waking up the system")
> > > >
> > > > There wasn't much in the logs, for example,
> > > > https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5445/fi-kbl-7500u/igt@gem_exec_suspend@basic-s0.html
> > > 
> > > So the machine suspends, but never comes back?
> > > 
> > > Do you need to revert both for it to work for you? Or is the revert of
> > > fdde0ff8590b just to avoid the conflict?
> > 
> > fdde0ff85 was just to avoid conflicts.
> >  
> > > I'm assuming you bisected this, and the bisect indicated e3728b50cd9b,
> > > and then to revert it you reverted the other commit too..
> > 
> > Lucky guess based on diff rc1..rc2. Bisect was going to be painful, but
> > could be done if this is not enough clue for Rafael.
> 
> Sorry for the delayed response, was away.
> 
> I'm guessing that you are using rtcwake for wakeup, in which case reverting
> fdde0ff85 alone should unbreak it.
> 
> Can you please double check that?

And below is a patch that should fix it if I'm not mistaken (verified on my
system where I was able to reproduce the issue), so it would suffice to test
this one on top of the -rc2.

---
From: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Subject: [PATCH] ACPI: PM: s2idle: Check fixed wakeup events in acpi_s2idle_wake()

Commit fdde0ff8590b ("ACPI: PM: s2idle: Prevent spurious SCIs from
waking up the system") overlooked the fact that fixed events can wake
up the system too and broke RTC wakeup from suspend-to-idle as a
result.

Fix this issue by checking the fixed events in acpi_s2idle_wake() in
addition to checking wakeup GPEs and break out of the suspend-to-idle
loop if the status bits of any enabled fixed events are set then.

Fixes: fdde0ff8590b ("ACPI: PM: s2idle: Prevent spurious SCIs from waking up the system")
Reported-by: Chris Wilson <chris@chris-wilson.co.uk>
Cc: 5.4+ <stable@vger.kernel.org> # 5.4+
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
---
 drivers/acpi/acpica/evevent.c |   45 ++++++++++++++++++++++++++++++++++++++++++
 drivers/acpi/sleep.c          |    7 ++++++
 include/acpi/acpixf.h         |    1 
 3 files changed, 53 insertions(+)

Index: linux-pm/drivers/acpi/acpica/evevent.c
===================================================================
--- linux-pm.orig/drivers/acpi/acpica/evevent.c
+++ linux-pm/drivers/acpi/acpica/evevent.c
@@ -265,4 +265,49 @@ static u32 acpi_ev_fixed_event_dispatch(
 		 handler) (acpi_gbl_fixed_event_handlers[event].context));
 }
 
+/*******************************************************************************
+ *
+ * FUNCTION:    acpi_any_fixed_event_status_set
+ *
+ * PARAMETERS:  None
+ *
+ * RETURN:      TRUE or FALSE
+ *
+ * DESCRIPTION: Checks the PM status register for active fixed events
+ *
+ ******************************************************************************/
+
+u32 acpi_any_fixed_event_status_set(void)
+{
+	acpi_status status;
+	u32 in_status;
+	u32 in_enable;
+	u32 i;
+
+	status = acpi_hw_register_read(ACPI_REGISTER_PM1_ENABLE, &in_enable);
+	if (ACPI_FAILURE(status)) {
+		return (FALSE);
+	}
+
+	status = acpi_hw_register_read(ACPI_REGISTER_PM1_STATUS, &in_status);
+	if (ACPI_FAILURE(status)) {
+		return (FALSE);
+	}
+
+	/*
+	 * Check for all possible Fixed Events and dispatch those that are active
+	 */
+	for (i = 0; i < ACPI_NUM_FIXED_EVENTS; i++) {
+
+		/* Both the status and enable bits must be on for this event */
+
+		if ((in_status & acpi_gbl_fixed_event_info[i].status_bit_mask) &&
+		    (in_enable & acpi_gbl_fixed_event_info[i].enable_bit_mask)) {
+			return (TRUE);
+		}
+	}
+
+	return (FALSE);
+}
+
 #endif				/* !ACPI_REDUCED_HARDWARE */
Index: linux-pm/include/acpi/acpixf.h
===================================================================
--- linux-pm.orig/include/acpi/acpixf.h
+++ linux-pm/include/acpi/acpixf.h
@@ -753,6 +753,7 @@ ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_sta
 ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status acpi_enable_all_runtime_gpes(void))
 ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status acpi_enable_all_wakeup_gpes(void))
 ACPI_HW_DEPENDENT_RETURN_UINT32(u32 acpi_any_gpe_status_set(void))
+ACPI_HW_DEPENDENT_RETURN_UINT32(u32 acpi_any_fixed_event_status_set(void))
 
 ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status
 				acpi_get_gpe_device(u32 gpe_index,
Index: linux-pm/drivers/acpi/sleep.c
===================================================================
--- linux-pm.orig/drivers/acpi/sleep.c
+++ linux-pm/drivers/acpi/sleep.c
@@ -1006,6 +1006,13 @@ static bool acpi_s2idle_wake(void)
 			return true;
 
 		/*
+		 * If the status bit of any enabled fixed event is set, the
+		 * wakeup is regarded as valid.
+		 */
+		if (acpi_any_fixed_event_status_set())
+			return true;
+
+		/*
 		 * If there are no EC events to process and at least one of the
 		 * other enabled GPEs is active, the wakeup is regarded as a
 		 * genuine one.




  reply	other threads:[~2020-02-21  0:46 UTC|newest]

Thread overview: 30+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-02-16 21:32 Linux 5.6-rc2 Linus Torvalds
2020-02-17  2:08 ` Dave Jones
2020-02-17  2:24   ` Linus Torvalds
2020-02-17  3:02     ` Josef Bacik
2020-02-17  5:08       ` Linus Torvalds
2020-02-17 12:30         ` David Sterba
2020-02-17 16:45           ` Dave Jones
2020-02-17 16:04         ` Filipe Manana
2020-02-17 16:21 ` Chris Wilson
2020-02-17 21:20   ` Linus Torvalds
2020-02-17 21:29     ` Chris Wilson
2020-02-20 22:41       ` Rafael J. Wysocki
2020-02-21  0:46         ` Rafael J. Wysocki [this message]
2020-02-21  9:19           ` Chris Wilson
     [not found]             ` <CAJZ5v0h07em8y5bXcnUTBcjie8pCttADK9QX9W_cB0WQRcDfGQ@mail.gmail.com>
2020-02-21 18:02               ` Linus Torvalds
2020-02-23 23:57                 ` Rafael J. Wysocki
2020-02-17 18:42 ` sinisa
2020-02-17 20:17   ` Dominik Brodowski
2020-02-21  1:38   ` [Intel-gfx] " Dave Airlie
2020-02-21  1:38     ` Dave Airlie
2020-02-21  2:23     ` [Intel-gfx] " Souza, Jose
2020-02-21  2:23       ` Souza, Jose
2020-02-24 18:24       ` Siniša Bandin
2020-02-24 18:24         ` Siniša Bandin
2020-03-02 16:39       ` Siniša Bandin
2020-03-02 16:39         ` Siniša Bandin
2020-03-02 17:04         ` Jani Nikula
2020-03-02 17:04           ` Jani Nikula
2020-03-03  7:08           ` Sinisa
2020-03-03  7:08             ` Sinisa

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4974198.mf5Me8BlfX@kreacher \
    --to=rjw@rjwysocki.net \
    --cc=chris@chris-wilson.co.uk \
    --cc=linux-acpi@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pm@vger.kernel.org \
    --cc=rafael.j.wysocki@intel.com \
    --cc=torvalds@linux-foundation.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.