Patchwork PCI / PM: Fix messages printed by acpi_pci_set_power_state()

login
register
mail settings
Submitter Rafael J. Wysocki
Date July 25, 2012, 7:51 p.m.
Message ID <201207252151.14069.rjw@sisk.pl>
Download mbox | patch
Permalink /patch/173249/
State Accepted
Headers show

Comments

Rafael J. Wysocki - July 25, 2012, 7:51 p.m.
If a PCI device is put into D3_cold by acpi_bus_set_power(),
the message printed by acpi_pci_set_power_state() says that its
power state has been changed to D4, which doesn't make sense.
In turn, if the device is put into D3_hot, the message says just
"D3" without specifying which variant of D3 it is.

Fix that by using an array of state names corresponding to the
PCI device power states instead of building the state name from
the numeric value corresponding to the given state directly.

Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl>
---
 drivers/pci/pci-acpi.c |   14 +++++++++++---
 1 file changed, 11 insertions(+), 3 deletions(-)

--
To unsubscribe from this list: send the line "unsubscribe linux-pci" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Alan Stern - July 25, 2012, 8:02 p.m.
On Wed, 25 Jul 2012, Rafael J. Wysocki wrote:

> 
> If a PCI device is put into D3_cold by acpi_bus_set_power(),
> the message printed by acpi_pci_set_power_state() says that its
> power state has been changed to D4, which doesn't make sense.
> In turn, if the device is put into D3_hot, the message says just
> "D3" without specifying which variant of D3 it is.
> 
> Fix that by using an array of state names corresponding to the
> PCI device power states instead of building the state name from
> the numeric value corresponding to the given state directly.
> 
> Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl>
> ---
>  drivers/pci/pci-acpi.c |   14 +++++++++++---
>  1 file changed, 11 insertions(+), 3 deletions(-)
> 
> Index: linux/drivers/pci/pci-acpi.c
> ===================================================================
> --- linux.orig/drivers/pci/pci-acpi.c
> +++ linux/drivers/pci/pci-acpi.c
> @@ -265,9 +265,17 @@ static int acpi_pci_set_power_state(stru
>  		error = acpi_bus_set_power(handle, state_conv[state]);
>  	}
>  
> -	if (!error)
> -		dev_printk(KERN_INFO, &dev->dev,
> -				"power state changed by ACPI to D%d\n", state);
> +	if (!error) {
> +		static const char *state_name[] = {
> +			[PCI_D0] = "D0",
> +			[PCI_D1] = "D1",
> +			[PCI_D2] = "D2",
> +			[PCI_D3hot] = "D3hot",
> +			[PCI_D3cold] = "D3cold"
> +		};
> +		dev_info(&dev->dev, "power state changed by ACPI to %s\n",
> +			 state_name[state]);
> +	}

How about using the pci_power_name macro defined in
include/linux/pci.h instead?

Alan Stern

--
To unsubscribe from this list: send the line "unsubscribe linux-pci" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Patch

Index: linux/drivers/pci/pci-acpi.c
===================================================================
--- linux.orig/drivers/pci/pci-acpi.c
+++ linux/drivers/pci/pci-acpi.c
@@ -265,9 +265,17 @@  static int acpi_pci_set_power_state(stru
 		error = acpi_bus_set_power(handle, state_conv[state]);
 	}
 
-	if (!error)
-		dev_printk(KERN_INFO, &dev->dev,
-				"power state changed by ACPI to D%d\n", state);
+	if (!error) {
+		static const char *state_name[] = {
+			[PCI_D0] = "D0",
+			[PCI_D1] = "D1",
+			[PCI_D2] = "D2",
+			[PCI_D3hot] = "D3hot",
+			[PCI_D3cold] = "D3cold"
+		};
+		dev_info(&dev->dev, "power state changed by ACPI to %s\n",
+			 state_name[state]);
+	}
 
 	return error;
 }