linux-pci.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v2] PCI: Set up runtime PM on devices that don't support PCI PM
@ 2025-06-11 23:31 Mario Limonciello
  2025-06-12  0:40 ` Sathyanarayanan Kuppuswamy
                   ` (3 more replies)
  0 siblings, 4 replies; 5+ messages in thread
From: Mario Limonciello @ 2025-06-11 23:31 UTC (permalink / raw)
  To: mario.limonciello, bhelgaas, rafael
  Cc: Alex Williamson, Giovanni Cabiddu, Nicolas Dichtel, linux-pci

From: Mario Limonciello <mario.limonciello@amd.com>

commit 4d4c10f763d7 ("PCI: Explicitly put devices into D0 when
initializing") intended to put PCI devices into D0, but in doing so
unintentionally changed runtime PM initialization not to occur on
devices that don't support PCI PM.  This caused a regression in vfio-pci
due to an imbalance with it's use.

Adjust the logic in pci_pm_init() so that even if PCI PM isn't supported
runtime PM is still initialized.

Cc: Alex Williamson <alex.williamson@redhat.com>
Reported-by: Giovanni Cabiddu <giovanni.cabiddu@intel.com>
Closes: https://lore.kernel.org/linux-pci/20250424043232.1848107-1-superm1@kernel.org/T/#m7e8929d6421690dc8bd6dc639d86c2b4db27cbc4
Reported-by: Nicolas Dichtel <nicolas.dichtel@6wind.com>
Closes: https://lore.kernel.org/linux-pci/20250424043232.1848107-1-superm1@kernel.org/T/#m40d277dcdb9be64a1609a82412d1aa906263e201
Tested-by: Giovanni Cabiddu <giovanni.cabiddu@intel.com>
Fixes: 4d4c10f763d7 ("PCI: Explicitly put devices into D0 when initializing")
Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
---
v2:
 * remove pointless return
---
 drivers/pci/pci.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c
index 3dd44d1ad829b..160a9a482c732 100644
--- a/drivers/pci/pci.c
+++ b/drivers/pci/pci.c
@@ -3222,14 +3222,14 @@ void pci_pm_init(struct pci_dev *dev)
 	/* find PCI PM capability in list */
 	pm = pci_find_capability(dev, PCI_CAP_ID_PM);
 	if (!pm)
-		return;
+		goto poweron;
 	/* Check device's ability to generate PME# */
 	pci_read_config_word(dev, pm + PCI_PM_PMC, &pmc);
 
 	if ((pmc & PCI_PM_CAP_VER_MASK) > 3) {
 		pci_err(dev, "unsupported PM cap regs version (%u)\n",
 			pmc & PCI_PM_CAP_VER_MASK);
-		return;
+		goto poweron;
 	}
 
 	dev->pm_cap = pm;
@@ -3274,6 +3274,7 @@ void pci_pm_init(struct pci_dev *dev)
 	pci_read_config_word(dev, PCI_STATUS, &status);
 	if (status & PCI_STATUS_IMM_READY)
 		dev->imm_ready = 1;
+poweron:
 	pci_pm_power_up_and_verify_state(dev);
 	pm_runtime_forbid(&dev->dev);
 	pm_runtime_set_active(&dev->dev);
-- 
2.43.0


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCH v2] PCI: Set up runtime PM on devices that don't support PCI PM
  2025-06-11 23:31 [PATCH v2] PCI: Set up runtime PM on devices that don't support PCI PM Mario Limonciello
@ 2025-06-12  0:40 ` Sathyanarayanan Kuppuswamy
  2025-06-12  7:01 ` Nicolas Dichtel
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 5+ messages in thread
From: Sathyanarayanan Kuppuswamy @ 2025-06-12  0:40 UTC (permalink / raw)
  To: Mario Limonciello, mario.limonciello, bhelgaas, rafael
  Cc: Alex Williamson, Giovanni Cabiddu, Nicolas Dichtel, linux-pci


On 6/11/25 4:31 PM, Mario Limonciello wrote:
> From: Mario Limonciello <mario.limonciello@amd.com>
>
> commit 4d4c10f763d7 ("PCI: Explicitly put devices into D0 when
> initializing") intended to put PCI devices into D0, but in doing so
> unintentionally changed runtime PM initialization not to occur on
> devices that don't support PCI PM.  This caused a regression in vfio-pci
> due to an imbalance with it's use.
>
> Adjust the logic in pci_pm_init() so that even if PCI PM isn't supported
> runtime PM is still initialized.
>
> Cc: Alex Williamson <alex.williamson@redhat.com>
> Reported-by: Giovanni Cabiddu <giovanni.cabiddu@intel.com>
> Closes: https://lore.kernel.org/linux-pci/20250424043232.1848107-1-superm1@kernel.org/T/#m7e8929d6421690dc8bd6dc639d86c2b4db27cbc4
> Reported-by: Nicolas Dichtel <nicolas.dichtel@6wind.com>
> Closes: https://lore.kernel.org/linux-pci/20250424043232.1848107-1-superm1@kernel.org/T/#m40d277dcdb9be64a1609a82412d1aa906263e201
> Tested-by: Giovanni Cabiddu <giovanni.cabiddu@intel.com>
> Fixes: 4d4c10f763d7 ("PCI: Explicitly put devices into D0 when initializing")
> Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
> ---

Looks fine to me.

Reviewed-by: Kuppuswamy Sathyanarayanan <sathyanarayanan.kuppuswamy@linux.intel.com>
> v2:
>   * remove pointless return
> ---
>   drivers/pci/pci.c | 5 +++--
>   1 file changed, 3 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c
> index 3dd44d1ad829b..160a9a482c732 100644
> --- a/drivers/pci/pci.c
> +++ b/drivers/pci/pci.c
> @@ -3222,14 +3222,14 @@ void pci_pm_init(struct pci_dev *dev)
>   	/* find PCI PM capability in list */
>   	pm = pci_find_capability(dev, PCI_CAP_ID_PM);
>   	if (!pm)
> -		return;
> +		goto poweron;
>   	/* Check device's ability to generate PME# */
>   	pci_read_config_word(dev, pm + PCI_PM_PMC, &pmc);
>   
>   	if ((pmc & PCI_PM_CAP_VER_MASK) > 3) {
>   		pci_err(dev, "unsupported PM cap regs version (%u)\n",
>   			pmc & PCI_PM_CAP_VER_MASK);
> -		return;
> +		goto poweron;
>   	}
>   
>   	dev->pm_cap = pm;
> @@ -3274,6 +3274,7 @@ void pci_pm_init(struct pci_dev *dev)
>   	pci_read_config_word(dev, PCI_STATUS, &status);
>   	if (status & PCI_STATUS_IMM_READY)
>   		dev->imm_ready = 1;
> +poweron:
>   	pci_pm_power_up_and_verify_state(dev);
>   	pm_runtime_forbid(&dev->dev);
>   	pm_runtime_set_active(&dev->dev);

-- 
Sathyanarayanan Kuppuswamy
Linux Kernel Developer


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH v2] PCI: Set up runtime PM on devices that don't support PCI PM
  2025-06-11 23:31 [PATCH v2] PCI: Set up runtime PM on devices that don't support PCI PM Mario Limonciello
  2025-06-12  0:40 ` Sathyanarayanan Kuppuswamy
@ 2025-06-12  7:01 ` Nicolas Dichtel
  2025-06-12  9:39 ` Rafael J. Wysocki
  2025-06-13 19:43 ` Bjorn Helgaas
  3 siblings, 0 replies; 5+ messages in thread
From: Nicolas Dichtel @ 2025-06-12  7:01 UTC (permalink / raw)
  To: Mario Limonciello, mario.limonciello, bhelgaas, rafael
  Cc: Alex Williamson, Giovanni Cabiddu, linux-pci

Le 12/06/2025 à 01:31, Mario Limonciello a écrit :
> From: Mario Limonciello <mario.limonciello@amd.com>
> 
> commit 4d4c10f763d7 ("PCI: Explicitly put devices into D0 when
> initializing") intended to put PCI devices into D0, but in doing so
> unintentionally changed runtime PM initialization not to occur on
> devices that don't support PCI PM.  This caused a regression in vfio-pci
> due to an imbalance with it's use.
> 
> Adjust the logic in pci_pm_init() so that even if PCI PM isn't supported
> runtime PM is still initialized.
> 
> Cc: Alex Williamson <alex.williamson@redhat.com>
> Reported-by: Giovanni Cabiddu <giovanni.cabiddu@intel.com>
> Closes: https://lore.kernel.org/linux-pci/20250424043232.1848107-1-superm1@kernel.org/T/#m7e8929d6421690dc8bd6dc639d86c2b4db27cbc4
> Reported-by: Nicolas Dichtel <nicolas.dichtel@6wind.com>
> Closes: https://lore.kernel.org/linux-pci/20250424043232.1848107-1-superm1@kernel.org/T/#m40d277dcdb9be64a1609a82412d1aa906263e201
> Tested-by: Giovanni Cabiddu <giovanni.cabiddu@intel.com>
> Fixes: 4d4c10f763d7 ("PCI: Explicitly put devices into D0 when initializing")
> Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>

Tested-by: Nicolas Dichtel <nicolas.dichtel@6wind.com>

Thanks for the quick fix!


Regards,
Nicolas

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH v2] PCI: Set up runtime PM on devices that don't support PCI PM
  2025-06-11 23:31 [PATCH v2] PCI: Set up runtime PM on devices that don't support PCI PM Mario Limonciello
  2025-06-12  0:40 ` Sathyanarayanan Kuppuswamy
  2025-06-12  7:01 ` Nicolas Dichtel
@ 2025-06-12  9:39 ` Rafael J. Wysocki
  2025-06-13 19:43 ` Bjorn Helgaas
  3 siblings, 0 replies; 5+ messages in thread
From: Rafael J. Wysocki @ 2025-06-12  9:39 UTC (permalink / raw)
  To: Mario Limonciello
  Cc: mario.limonciello, bhelgaas, rafael, Alex Williamson,
	Giovanni Cabiddu, Nicolas Dichtel, linux-pci

On Thu, Jun 12, 2025 at 1:31 AM Mario Limonciello <superm1@kernel.org> wrote:
>
> From: Mario Limonciello <mario.limonciello@amd.com>
>
> commit 4d4c10f763d7 ("PCI: Explicitly put devices into D0 when
> initializing") intended to put PCI devices into D0, but in doing so
> unintentionally changed runtime PM initialization not to occur on
> devices that don't support PCI PM.  This caused a regression in vfio-pci
> due to an imbalance with it's use.
>
> Adjust the logic in pci_pm_init() so that even if PCI PM isn't supported
> runtime PM is still initialized.
>
> Cc: Alex Williamson <alex.williamson@redhat.com>
> Reported-by: Giovanni Cabiddu <giovanni.cabiddu@intel.com>
> Closes: https://lore.kernel.org/linux-pci/20250424043232.1848107-1-superm1@kernel.org/T/#m7e8929d6421690dc8bd6dc639d86c2b4db27cbc4
> Reported-by: Nicolas Dichtel <nicolas.dichtel@6wind.com>
> Closes: https://lore.kernel.org/linux-pci/20250424043232.1848107-1-superm1@kernel.org/T/#m40d277dcdb9be64a1609a82412d1aa906263e201
> Tested-by: Giovanni Cabiddu <giovanni.cabiddu@intel.com>
> Fixes: 4d4c10f763d7 ("PCI: Explicitly put devices into D0 when initializing")
> Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>

Acked-by: Rafael J. Wysocki <rafael@kernel.org>

> ---
> v2:
>  * remove pointless return
> ---
>  drivers/pci/pci.c | 5 +++--
>  1 file changed, 3 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c
> index 3dd44d1ad829b..160a9a482c732 100644
> --- a/drivers/pci/pci.c
> +++ b/drivers/pci/pci.c
> @@ -3222,14 +3222,14 @@ void pci_pm_init(struct pci_dev *dev)
>         /* find PCI PM capability in list */
>         pm = pci_find_capability(dev, PCI_CAP_ID_PM);
>         if (!pm)
> -               return;
> +               goto poweron;
>         /* Check device's ability to generate PME# */
>         pci_read_config_word(dev, pm + PCI_PM_PMC, &pmc);
>
>         if ((pmc & PCI_PM_CAP_VER_MASK) > 3) {
>                 pci_err(dev, "unsupported PM cap regs version (%u)\n",
>                         pmc & PCI_PM_CAP_VER_MASK);
> -               return;
> +               goto poweron;
>         }
>
>         dev->pm_cap = pm;
> @@ -3274,6 +3274,7 @@ void pci_pm_init(struct pci_dev *dev)
>         pci_read_config_word(dev, PCI_STATUS, &status);
>         if (status & PCI_STATUS_IMM_READY)
>                 dev->imm_ready = 1;
> +poweron:
>         pci_pm_power_up_and_verify_state(dev);
>         pm_runtime_forbid(&dev->dev);
>         pm_runtime_set_active(&dev->dev);
> --
> 2.43.0
>

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH v2] PCI: Set up runtime PM on devices that don't support PCI PM
  2025-06-11 23:31 [PATCH v2] PCI: Set up runtime PM on devices that don't support PCI PM Mario Limonciello
                   ` (2 preceding siblings ...)
  2025-06-12  9:39 ` Rafael J. Wysocki
@ 2025-06-13 19:43 ` Bjorn Helgaas
  3 siblings, 0 replies; 5+ messages in thread
From: Bjorn Helgaas @ 2025-06-13 19:43 UTC (permalink / raw)
  To: Mario Limonciello
  Cc: mario.limonciello, bhelgaas, rafael, Alex Williamson,
	Giovanni Cabiddu, Nicolas Dichtel, linux-pci

On Wed, Jun 11, 2025 at 06:31:16PM -0500, Mario Limonciello wrote:
> From: Mario Limonciello <mario.limonciello@amd.com>
> 
> commit 4d4c10f763d7 ("PCI: Explicitly put devices into D0 when
> initializing") intended to put PCI devices into D0, but in doing so
> unintentionally changed runtime PM initialization not to occur on
> devices that don't support PCI PM.  This caused a regression in vfio-pci
> due to an imbalance with it's use.
> 
> Adjust the logic in pci_pm_init() so that even if PCI PM isn't supported
> runtime PM is still initialized.
> 
> Cc: Alex Williamson <alex.williamson@redhat.com>
> Reported-by: Giovanni Cabiddu <giovanni.cabiddu@intel.com>
> Closes: https://lore.kernel.org/linux-pci/20250424043232.1848107-1-superm1@kernel.org/T/#m7e8929d6421690dc8bd6dc639d86c2b4db27cbc4
> Reported-by: Nicolas Dichtel <nicolas.dichtel@6wind.com>
> Closes: https://lore.kernel.org/linux-pci/20250424043232.1848107-1-superm1@kernel.org/T/#m40d277dcdb9be64a1609a82412d1aa906263e201
> Tested-by: Giovanni Cabiddu <giovanni.cabiddu@intel.com>
> Fixes: 4d4c10f763d7 ("PCI: Explicitly put devices into D0 when initializing")
> Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>

4d4c10f763d7 appeared in v6.16-rc1, so I applied this to pci/for-linus
for v6.16, thanks for the quick resolution!

> ---
> v2:
>  * remove pointless return
> ---
>  drivers/pci/pci.c | 5 +++--
>  1 file changed, 3 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c
> index 3dd44d1ad829b..160a9a482c732 100644
> --- a/drivers/pci/pci.c
> +++ b/drivers/pci/pci.c
> @@ -3222,14 +3222,14 @@ void pci_pm_init(struct pci_dev *dev)
>  	/* find PCI PM capability in list */
>  	pm = pci_find_capability(dev, PCI_CAP_ID_PM);
>  	if (!pm)
> -		return;
> +		goto poweron;
>  	/* Check device's ability to generate PME# */
>  	pci_read_config_word(dev, pm + PCI_PM_PMC, &pmc);
>  
>  	if ((pmc & PCI_PM_CAP_VER_MASK) > 3) {
>  		pci_err(dev, "unsupported PM cap regs version (%u)\n",
>  			pmc & PCI_PM_CAP_VER_MASK);
> -		return;
> +		goto poweron;
>  	}
>  
>  	dev->pm_cap = pm;
> @@ -3274,6 +3274,7 @@ void pci_pm_init(struct pci_dev *dev)
>  	pci_read_config_word(dev, PCI_STATUS, &status);
>  	if (status & PCI_STATUS_IMM_READY)
>  		dev->imm_ready = 1;
> +poweron:
>  	pci_pm_power_up_and_verify_state(dev);
>  	pm_runtime_forbid(&dev->dev);
>  	pm_runtime_set_active(&dev->dev);
> -- 
> 2.43.0
> 

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2025-06-13 19:43 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-06-11 23:31 [PATCH v2] PCI: Set up runtime PM on devices that don't support PCI PM Mario Limonciello
2025-06-12  0:40 ` Sathyanarayanan Kuppuswamy
2025-06-12  7:01 ` Nicolas Dichtel
2025-06-12  9:39 ` Rafael J. Wysocki
2025-06-13 19:43 ` Bjorn Helgaas

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).