[PATCH] nvme/pci: default to simple suspend

Keith Busch kbusch at kernel.org
Mon Feb 7 08:06:55 PST 2022


On Fri, Feb 04, 2022 at 08:10:12AM +0100, Christoph Hellwig wrote:
> On Wed, Feb 02, 2022 at 08:03:34AM -0800, Keith Busch wrote:
> > On Wed, Feb 02, 2022 at 08:55:02AM +0100, Christoph Hellwig wrote:
> > > On Tue, Feb 01, 2022 at 08:50:06AM -0800, Keith Busch wrote:
> > > > There is no complete set of attributes a driver can check to know if
> > > > nvme power management is the correct thing to do in a runtime suspend
> > > > situation. Every attempt so far to optimize idle power consumption and
> > > > resume latency for a particular platform just leads to regressions
> > > > elsewhere.
> > > > 
> > > > Default to the simple shutdown since it is the historically safest
> > > > option, and provide a user parameter to override it if the user knows
> > > > it's safe to use for their platform.
> > > 
> > > Sigh.  The platforms really should be asking for a explicit D3cold if
> > > they need one..
> > 
> > It's too late now, but perhaps the new property should have been
> > inverted since preparing for D3 was the previous default behavior;
> > platforms could have instead explicitly asked for "no-D3" if they wanted
> > it. That would have been easier for backward compatibility.
> 
> I'd really prefer to sort this out at the platform level.  We can't work
> around broken platforms in nvme forever.

I agree, but I'm not sure how to get everyone aligned.

How about this to resolve the regressions: if the platform doesn't
provide StorageD3Enable property, can we just default to the simple
shutdown method? We'd only use the nvme power management capabilities if
the platform explicity says it doesn't want D3, making the default the
same as the legacy behavior.

---
diff --git a/drivers/nvme/host/pci.c b/drivers/nvme/host/pci.c
index d8585df2c2fd..edd8f7dae77f 100644
--- a/drivers/nvme/host/pci.c
+++ b/drivers/nvme/host/pci.c
@@ -20,6 +20,7 @@
 #include <linux/mutex.h>
 #include <linux/once.h>
 #include <linux/pci.h>
+#include <linux/property.h>
 #include <linux/suspend.h>
 #include <linux/t10-pi.h>
 #include <linux/types.h>
@@ -3086,7 +3087,9 @@ static int nvme_probe(struct pci_dev *pdev, const struct pci_device_id *id)
 
 	quirks |= check_vendor_combination_bug(pdev);
 
-	if (!noacpi && acpi_storage_d3(&pdev->dev)) {
+	if (!noacpi && (acpi_storage_d3(&pdev->dev) ||
+			!device_property_present(&pdev->dev,
+						 "StorageD3Enable"))) {
 		/*
 		 * Some systems use a bios work around to ask for D3 on
 		 * platforms that support kernel managed suspend.
--



More information about the Linux-nvme mailing list