public inbox for linux-scsi@vger.kernel.org
 help / color / mirror / Atom feed
* [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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox