* [PATCH v10 0/3] Introduce and plumb PMSG_POWEROFF
@ 2025-11-12 22:40 Mario Limonciello (AMD)
2025-11-12 22:40 ` [PATCH v10 1/3] PM: Introduce new PMSG_POWEROFF event Mario Limonciello (AMD)
` (3 more replies)
0 siblings, 4 replies; 5+ messages in thread
From: Mario Limonciello (AMD) @ 2025-11-12 22:40 UTC (permalink / raw)
To: Rafael J . Wysocki, Greg Kroah-Hartman, Danilo Krummrich,
Bjorn Helgaas
Cc: Pavel Machek, Len Brown, Christian König,
open list:HIBERNATION (aka Software Suspend, aka swsusp),
open list:SCSI SUBSYSTEM, open list:USB SUBSYSTEM, AceLan Kao,
Kai-Heng Feng, Mark Pearson, Merthan Karakaş, Eric Naim,
Guilherme G . Piccoli, Mario Limonciello (AMD)
I've been working on a series that uses the hibernate flows (S4)
during shutdown (S5) [1], but it's a bit risky because it has changes
all around the kernel. To mitigate risk Rafael suggested [2] to split
the series into at least 3 parts across different kernel cycles.
Here is the first part, which just introduces a PMSG_POWEROFF event
and uses it in any driver that manipulates PM events.
There are no functional changes for these changes and this series is
intended for 6.19.
v10:
* Drop resume_event changes
* Drop patch 4 (will come in later phase)
Mario Limonciello (AMD) (3):
PM: Introduce new PMSG_POWEROFF event
scsi: Add PM_EVENT_POWEROFF into suspend callbacks
usb: sl811-hcd: Add PM_EVENT_POWEROFF into suspend callbacks
drivers/base/power/main.c | 5 +++++
drivers/scsi/mesh.c | 1 +
drivers/scsi/stex.c | 1 +
drivers/usb/host/sl811-hcd.c | 1 +
include/linux/pm.h | 3 +++
include/trace/events/power.h | 3 ++-
6 files changed, 13 insertions(+), 1 deletion(-)
--
2.43.0
^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH v10 1/3] PM: Introduce new PMSG_POWEROFF event
2025-11-12 22:40 [PATCH v10 0/3] Introduce and plumb PMSG_POWEROFF Mario Limonciello (AMD)
@ 2025-11-12 22:40 ` Mario Limonciello (AMD)
2025-11-12 22:40 ` [PATCH v10 2/3] scsi: Add PM_EVENT_POWEROFF into suspend callbacks Mario Limonciello (AMD)
` (2 subsequent siblings)
3 siblings, 0 replies; 5+ messages in thread
From: Mario Limonciello (AMD) @ 2025-11-12 22:40 UTC (permalink / raw)
To: Rafael J . Wysocki, Greg Kroah-Hartman, Danilo Krummrich,
Bjorn Helgaas
Cc: Pavel Machek, Len Brown, Christian König,
open list:HIBERNATION (aka Software Suspend, aka swsusp),
open list:SCSI SUBSYSTEM, open list:USB SUBSYSTEM, AceLan Kao,
Kai-Heng Feng, Mark Pearson, Merthan Karakaş, Eric Naim,
Guilherme G . Piccoli, Mario Limonciello (AMD)
PMSG_POWEROFF will be used for the PM core to allow differentiating between
a hibernation or shutdown sequence when re-using callbacks for common code.
Hibernation is started by writing a hibernation method (such as 'platform'
'shutdown', or 'reboot') to use into /sys/power/disk and writing 'disk' to
/sys/power/state.
Shutdown is initiated with the reboot() syscall with arguments on whether
to halt the system or power it off.
Tested-by: Eric Naim <dnaim@cachyos.org>
Signed-off-by: Mario Limonciello (AMD) <superm1@kernel.org>
---
v10:
* Drop resume event
---
drivers/base/power/main.c | 5 +++++
include/linux/pm.h | 3 +++
include/trace/events/power.h | 3 ++-
3 files changed, 10 insertions(+), 1 deletion(-)
diff --git a/drivers/base/power/main.c b/drivers/base/power/main.c
index 7a8807ec9a5d0..38fc8a978b88c 100644
--- a/drivers/base/power/main.c
+++ b/drivers/base/power/main.c
@@ -96,6 +96,8 @@ static const char *pm_verb(int event)
return "restore";
case PM_EVENT_RECOVER:
return "recover";
+ case PM_EVENT_POWEROFF:
+ return "poweroff";
default:
return "(unknown PM event)";
}
@@ -368,6 +370,7 @@ static pm_callback_t pm_op(const struct dev_pm_ops *ops, pm_message_t state)
case PM_EVENT_FREEZE:
case PM_EVENT_QUIESCE:
return ops->freeze;
+ case PM_EVENT_POWEROFF:
case PM_EVENT_HIBERNATE:
return ops->poweroff;
case PM_EVENT_THAW:
@@ -402,6 +405,7 @@ static pm_callback_t pm_late_early_op(const struct dev_pm_ops *ops,
case PM_EVENT_FREEZE:
case PM_EVENT_QUIESCE:
return ops->freeze_late;
+ case PM_EVENT_POWEROFF:
case PM_EVENT_HIBERNATE:
return ops->poweroff_late;
case PM_EVENT_THAW:
@@ -436,6 +440,7 @@ static pm_callback_t pm_noirq_op(const struct dev_pm_ops *ops, pm_message_t stat
case PM_EVENT_FREEZE:
case PM_EVENT_QUIESCE:
return ops->freeze_noirq;
+ case PM_EVENT_POWEROFF:
case PM_EVENT_HIBERNATE:
return ops->poweroff_noirq;
case PM_EVENT_THAW:
diff --git a/include/linux/pm.h b/include/linux/pm.h
index a72e42eec1303..7f69f739f6130 100644
--- a/include/linux/pm.h
+++ b/include/linux/pm.h
@@ -508,6 +508,7 @@ const struct dev_pm_ops name = { \
* RECOVER Creation of a hibernation image or restoration of the main
* memory contents from a hibernation image has failed, call
* ->thaw() and ->complete() for all devices.
+ * POWEROFF System will poweroff, call ->poweroff() for all devices.
*
* The following PM_EVENT_ messages are defined for internal use by
* kernel subsystems. They are never issued by the PM core.
@@ -538,6 +539,7 @@ const struct dev_pm_ops name = { \
#define PM_EVENT_USER 0x0100
#define PM_EVENT_REMOTE 0x0200
#define PM_EVENT_AUTO 0x0400
+#define PM_EVENT_POWEROFF 0x0800
#define PM_EVENT_SLEEP (PM_EVENT_SUSPEND | PM_EVENT_HIBERNATE)
#define PM_EVENT_USER_SUSPEND (PM_EVENT_USER | PM_EVENT_SUSPEND)
@@ -552,6 +554,7 @@ const struct dev_pm_ops name = { \
#define PMSG_QUIESCE ((struct pm_message){ .event = PM_EVENT_QUIESCE, })
#define PMSG_SUSPEND ((struct pm_message){ .event = PM_EVENT_SUSPEND, })
#define PMSG_HIBERNATE ((struct pm_message){ .event = PM_EVENT_HIBERNATE, })
+#define PMSG_POWEROFF ((struct pm_message){ .event = PM_EVENT_POWEROFF, })
#define PMSG_RESUME ((struct pm_message){ .event = PM_EVENT_RESUME, })
#define PMSG_THAW ((struct pm_message){ .event = PM_EVENT_THAW, })
#define PMSG_RESTORE ((struct pm_message){ .event = PM_EVENT_RESTORE, })
diff --git a/include/trace/events/power.h b/include/trace/events/power.h
index 82904291c2b81..370f8df2fdb4b 100644
--- a/include/trace/events/power.h
+++ b/include/trace/events/power.h
@@ -179,7 +179,8 @@ TRACE_EVENT(pstate_sample,
{ PM_EVENT_HIBERNATE, "hibernate" }, \
{ PM_EVENT_THAW, "thaw" }, \
{ PM_EVENT_RESTORE, "restore" }, \
- { PM_EVENT_RECOVER, "recover" })
+ { PM_EVENT_RECOVER, "recover" }, \
+ { PM_EVENT_POWEROFF, "poweroff" })
DEFINE_EVENT(cpu, cpu_frequency,
--
2.43.0
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH v10 2/3] scsi: Add PM_EVENT_POWEROFF into suspend callbacks
2025-11-12 22:40 [PATCH v10 0/3] Introduce and plumb PMSG_POWEROFF Mario Limonciello (AMD)
2025-11-12 22:40 ` [PATCH v10 1/3] PM: Introduce new PMSG_POWEROFF event Mario Limonciello (AMD)
@ 2025-11-12 22:40 ` Mario Limonciello (AMD)
2025-11-12 22:40 ` [PATCH v10 3/3] usb: sl811-hcd: " Mario Limonciello (AMD)
2025-11-14 16:12 ` [PATCH v10 0/3] Introduce and plumb PMSG_POWEROFF Rafael J. Wysocki
3 siblings, 0 replies; 5+ messages in thread
From: Mario Limonciello (AMD) @ 2025-11-12 22:40 UTC (permalink / raw)
To: Rafael J . Wysocki, Greg Kroah-Hartman, Danilo Krummrich,
Bjorn Helgaas
Cc: Pavel Machek, Len Brown, Christian König,
open list:HIBERNATION (aka Software Suspend, aka swsusp),
open list:SCSI SUBSYSTEM, open list:USB SUBSYSTEM, AceLan Kao,
Kai-Heng Feng, Mark Pearson, Merthan Karakaş, Eric Naim,
Guilherme G . Piccoli, Mario Limonciello (AMD),
Martin K . Petersen
If the PM core uses hibernation callbacks for powering off the
system, drivers will receive PM_EVENT_POWEROFF and should handle
it the same as they previously handled PM_EVENT_HIBERNATE.
Support this case in the scsi driver. No functional changes.
Reviewed-by: Martin K. Petersen <martin.petersen@oracle.com>
Tested-by: Eric Naim <dnaim@cachyos.org>
Signed-off-by: Mario Limonciello (AMD) <superm1@kernel.org>
---
drivers/scsi/mesh.c | 1 +
drivers/scsi/stex.c | 1 +
2 files changed, 2 insertions(+)
diff --git a/drivers/scsi/mesh.c b/drivers/scsi/mesh.c
index 1c15cac41d805..768b85eecc8fd 100644
--- a/drivers/scsi/mesh.c
+++ b/drivers/scsi/mesh.c
@@ -1762,6 +1762,7 @@ static int mesh_suspend(struct macio_dev *mdev, pm_message_t mesg)
case PM_EVENT_SUSPEND:
case PM_EVENT_HIBERNATE:
case PM_EVENT_FREEZE:
+ case PM_EVENT_POWEROFF:
break;
default:
return 0;
diff --git a/drivers/scsi/stex.c b/drivers/scsi/stex.c
index d8ad02c293205..e6357bc301cb9 100644
--- a/drivers/scsi/stex.c
+++ b/drivers/scsi/stex.c
@@ -1965,6 +1965,7 @@ static int stex_choice_sleep_mic(struct st_hba *hba, pm_message_t state)
case PM_EVENT_SUSPEND:
return ST_S3;
case PM_EVENT_HIBERNATE:
+ case PM_EVENT_POWEROFF:
hba->msi_lock = 0;
return ST_S4;
default:
--
2.43.0
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH v10 3/3] usb: sl811-hcd: Add PM_EVENT_POWEROFF into suspend callbacks
2025-11-12 22:40 [PATCH v10 0/3] Introduce and plumb PMSG_POWEROFF Mario Limonciello (AMD)
2025-11-12 22:40 ` [PATCH v10 1/3] PM: Introduce new PMSG_POWEROFF event Mario Limonciello (AMD)
2025-11-12 22:40 ` [PATCH v10 2/3] scsi: Add PM_EVENT_POWEROFF into suspend callbacks Mario Limonciello (AMD)
@ 2025-11-12 22:40 ` Mario Limonciello (AMD)
2025-11-14 16:12 ` [PATCH v10 0/3] Introduce and plumb PMSG_POWEROFF Rafael J. Wysocki
3 siblings, 0 replies; 5+ messages in thread
From: Mario Limonciello (AMD) @ 2025-11-12 22:40 UTC (permalink / raw)
To: Rafael J . Wysocki, Greg Kroah-Hartman, Danilo Krummrich,
Bjorn Helgaas
Cc: Pavel Machek, Len Brown, Christian König,
open list:HIBERNATION (aka Software Suspend, aka swsusp),
open list:SCSI SUBSYSTEM, open list:USB SUBSYSTEM, AceLan Kao,
Kai-Heng Feng, Mark Pearson, Merthan Karakaş, Eric Naim,
Guilherme G . Piccoli, Mario Limonciello (AMD)
When the ACPI core uses hibernation callbacks for shutdown drivers
will receive PM_EVENT_POWEROFF and should handle it the same as
PM_EVENT_HIBERNATE would have been used.
Tested-by: Eric Naim <dnaim@cachyos.org>
Signed-off-by: Mario Limonciello (AMD) <superm1@kernel.org>
---
drivers/usb/host/sl811-hcd.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/drivers/usb/host/sl811-hcd.c b/drivers/usb/host/sl811-hcd.c
index ea3cab99c5d40..5d6dba681e503 100644
--- a/drivers/usb/host/sl811-hcd.c
+++ b/drivers/usb/host/sl811-hcd.c
@@ -1748,6 +1748,7 @@ sl811h_suspend(struct platform_device *dev, pm_message_t state)
break;
case PM_EVENT_SUSPEND:
case PM_EVENT_HIBERNATE:
+ case PM_EVENT_POWEROFF:
case PM_EVENT_PRETHAW: /* explicitly discard hw state */
port_power(sl811, 0);
break;
--
2.43.0
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH v10 0/3] Introduce and plumb PMSG_POWEROFF
2025-11-12 22:40 [PATCH v10 0/3] Introduce and plumb PMSG_POWEROFF Mario Limonciello (AMD)
` (2 preceding siblings ...)
2025-11-12 22:40 ` [PATCH v10 3/3] usb: sl811-hcd: " Mario Limonciello (AMD)
@ 2025-11-14 16:12 ` Rafael J. Wysocki
3 siblings, 0 replies; 5+ messages in thread
From: Rafael J. Wysocki @ 2025-11-14 16:12 UTC (permalink / raw)
To: Mario Limonciello (AMD)
Cc: Rafael J . Wysocki, Greg Kroah-Hartman, Danilo Krummrich,
Bjorn Helgaas, Pavel Machek, Len Brown, Christian König,
open list:HIBERNATION (aka Software Suspend, aka swsusp),
open list:SCSI SUBSYSTEM, open list:USB SUBSYSTEM, AceLan Kao,
Kai-Heng Feng, Mark Pearson, Merthan Karakaş, Eric Naim,
Guilherme G . Piccoli
On Wed, Nov 12, 2025 at 11:40 PM Mario Limonciello (AMD)
<superm1@kernel.org> wrote:
>
> I've been working on a series that uses the hibernate flows (S4)
> during shutdown (S5) [1], but it's a bit risky because it has changes
> all around the kernel. To mitigate risk Rafael suggested [2] to split
> the series into at least 3 parts across different kernel cycles.
>
> Here is the first part, which just introduces a PMSG_POWEROFF event
> and uses it in any driver that manipulates PM events.
>
> There are no functional changes for these changes and this series is
> intended for 6.19.
>
> v10:
> * Drop resume_event changes
> * Drop patch 4 (will come in later phase)
>
> Mario Limonciello (AMD) (3):
> PM: Introduce new PMSG_POWEROFF event
> scsi: Add PM_EVENT_POWEROFF into suspend callbacks
> usb: sl811-hcd: Add PM_EVENT_POWEROFF into suspend callbacks
>
> drivers/base/power/main.c | 5 +++++
> drivers/scsi/mesh.c | 1 +
> drivers/scsi/stex.c | 1 +
> drivers/usb/host/sl811-hcd.c | 1 +
> include/linux/pm.h | 3 +++
> include/trace/events/power.h | 3 ++-
> 6 files changed, 13 insertions(+), 1 deletion(-)
>
> --
All 3 patches applied as 6.19 material, thanks!
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2025-11-14 16:12 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-11-12 22:40 [PATCH v10 0/3] Introduce and plumb PMSG_POWEROFF Mario Limonciello (AMD)
2025-11-12 22:40 ` [PATCH v10 1/3] PM: Introduce new PMSG_POWEROFF event Mario Limonciello (AMD)
2025-11-12 22:40 ` [PATCH v10 2/3] scsi: Add PM_EVENT_POWEROFF into suspend callbacks Mario Limonciello (AMD)
2025-11-12 22:40 ` [PATCH v10 3/3] usb: sl811-hcd: " Mario Limonciello (AMD)
2025-11-14 16:12 ` [PATCH v10 0/3] Introduce and plumb PMSG_POWEROFF Rafael J. Wysocki
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.