diff mbox series

[v2] PCI: vmd: Do not change the Hotplug setting on VMD rootports

Message ID 20230725035405.932765-1-nirmal.patel@linux.intel.com
State New
Headers show
Series [v2] PCI: vmd: Do not change the Hotplug setting on VMD rootports | expand

Commit Message

Nirmal Patel July 25, 2023, 3:54 a.m. UTC
The hotplug functionality is broken in various combinations of guest
OSes i.e. RHEL, SLES and hypervisors i.e. KVM and ESXI.

During the VMD rootport creation, VMD honors ACPI settings and assigns
respective values to Hotplug, AER, DPC, PM etc which works in case of
Host OS. But these have been restored back to the power on default
state in Guest OSes, which puts the root port hot plug enable to
default OFF.

When BIOS boots, all root ports under VMD is inaccessible by BIOS and
they maintain their power on default states. The VMD UEFI driver loads
and configure all devices under VMD. This is how AER, power management,
DPC and hotplug gets enabled in UEFI, since the BIOS pci driver cannot
access the root ports. With the absence of VMD UEFI driver in Guest,
Hotplug stays Disabled.

This change will  cause the hot plug to start working again in guest,
as the settings implemented by the UEFI VMD DXE driver will remain in
effect in the Guest OS.

Signed-off-by: Nirmal Patel <nirmal.patel@linux.intel.com>
---
 drivers/pci/controller/vmd.c | 2 --
 1 file changed, 2 deletions(-)

Comments

Nirmal Patel Aug. 17, 2023, 9:30 p.m. UTC | #1
On 7/24/2023 8:54 PM, Nirmal Patel wrote:
> The hotplug functionality is broken in various combinations of guest
> OSes i.e. RHEL, SLES and hypervisors i.e. KVM and ESXI.
>
> During the VMD rootport creation, VMD honors ACPI settings and assigns
> respective values to Hotplug, AER, DPC, PM etc which works in case of
> Host OS. But these have been restored back to the power on default
> state in Guest OSes, which puts the root port hot plug enable to
> default OFF.
>
> When BIOS boots, all root ports under VMD is inaccessible by BIOS and
> they maintain their power on default states. The VMD UEFI driver loads
> and configure all devices under VMD. This is how AER, power management,
> DPC and hotplug gets enabled in UEFI, since the BIOS pci driver cannot
> access the root ports. With the absence of VMD UEFI driver in Guest,
> Hotplug stays Disabled.
>
> This change will  cause the hot plug to start working again in guest,
> as the settings implemented by the UEFI VMD DXE driver will remain in
> effect in the Guest OS.
>
> Signed-off-by: Nirmal Patel <nirmal.patel@linux.intel.com>
> ---
>  drivers/pci/controller/vmd.c | 2 --
>  1 file changed, 2 deletions(-)
>
> diff --git a/drivers/pci/controller/vmd.c b/drivers/pci/controller/vmd.c
> index 769eedeb8802..52c2461b4761 100644
> --- a/drivers/pci/controller/vmd.c
> +++ b/drivers/pci/controller/vmd.c
> @@ -701,8 +701,6 @@ static int vmd_alloc_irqs(struct vmd_dev *vmd)
>  static void vmd_copy_host_bridge_flags(struct pci_host_bridge *root_bridge,
>  				       struct pci_host_bridge *vmd_bridge)
>  {
> -	vmd_bridge->native_pcie_hotplug = root_bridge->native_pcie_hotplug;
> -	vmd_bridge->native_shpc_hotplug = root_bridge->native_shpc_hotplug;
>  	vmd_bridge->native_aer = root_bridge->native_aer;
>  	vmd_bridge->native_pme = root_bridge->native_pme;
>  	vmd_bridge->native_ltr = root_bridge->native_ltr;

Gentle ping!

Thanks.
Lorenzo Pieralisi Aug. 21, 2023, 9:38 a.m. UTC | #2
On Mon, Jul 24, 2023 at 11:54:05PM -0400, Nirmal Patel wrote:
> The hotplug functionality is broken in various combinations of guest
> OSes i.e. RHEL, SLES and hypervisors i.e. KVM and ESXI.

What about the configurations that are actually working ?

Will this patch change anything on that front ?

> During the VMD rootport creation, VMD honors ACPI settings and assigns
> respective values to Hotplug, AER, DPC, PM etc which works in case of
> Host OS. But these have been restored back to the power on default
> state in Guest OSes, which puts the root port hot plug enable to
> default OFF.
> 
> When BIOS boots, all root ports under VMD is inaccessible by BIOS and
> they maintain their power on default states. The VMD UEFI driver loads
> and configure all devices under VMD. This is how AER, power management,
> DPC and hotplug gets enabled in UEFI, since the BIOS pci driver cannot
> access the root ports. With the absence of VMD UEFI driver in Guest,
> Hotplug stays Disabled.
> 
> This change will  cause the hot plug to start working again in guest,
> as the settings implemented by the UEFI VMD DXE driver will remain in
> effect in the Guest OS.

This explanation is unclear to me - in particular the link between
code changes and the commit log. Please write a commit log that
explains and justifies the changes you are making below.

Thanks,
Lorenzo

> Signed-off-by: Nirmal Patel <nirmal.patel@linux.intel.com>
> ---
>  drivers/pci/controller/vmd.c | 2 --
>  1 file changed, 2 deletions(-)
> 
> diff --git a/drivers/pci/controller/vmd.c b/drivers/pci/controller/vmd.c
> index 769eedeb8802..52c2461b4761 100644
> --- a/drivers/pci/controller/vmd.c
> +++ b/drivers/pci/controller/vmd.c
> @@ -701,8 +701,6 @@ static int vmd_alloc_irqs(struct vmd_dev *vmd)
>  static void vmd_copy_host_bridge_flags(struct pci_host_bridge *root_bridge,
>  				       struct pci_host_bridge *vmd_bridge)
>  {
> -	vmd_bridge->native_pcie_hotplug = root_bridge->native_pcie_hotplug;
> -	vmd_bridge->native_shpc_hotplug = root_bridge->native_shpc_hotplug;
>  	vmd_bridge->native_aer = root_bridge->native_aer;
>  	vmd_bridge->native_pme = root_bridge->native_pme;
>  	vmd_bridge->native_ltr = root_bridge->native_ltr;
> -- 
> 2.31.1
>
Nirmal Patel Aug. 21, 2023, 3:16 p.m. UTC | #3
On 8/21/2023 2:38 AM, Lorenzo Pieralisi wrote:
> On Mon, Jul 24, 2023 at 11:54:05PM -0400, Nirmal Patel wrote:
>> The hotplug functionality is broken in various combinations of guest
>> OSes i.e. RHEL, SLES and hypervisors i.e. KVM and ESXI.
> What about the configurations that are actually working ?
>
> Will this patch change anything on that front ?

None of the Guest - Host combinations are working. This change with fix all
the scenarios.

>
>> During the VMD rootport creation, VMD honors ACPI settings and assigns
>> respective values to Hotplug, AER, DPC, PM etc which works in case of
>> Host OS. But these have been restored back to the power on default
>> state in Guest OSes, which puts the root port hot plug enable to
>> default OFF.
>>
>> When BIOS boots, all root ports under VMD is inaccessible by BIOS and
>> they maintain their power on default states. The VMD UEFI driver loads
>> and configure all devices under VMD. This is how AER, power management,
>> DPC and hotplug gets enabled in UEFI, since the BIOS pci driver cannot
>> access the root ports. With the absence of VMD UEFI driver in Guest,
>> Hotplug stays Disabled.
>>
>> This change will  cause the hot plug to start working again in guest,
>> as the settings implemented by the UEFI VMD DXE driver will remain in
>> effect in the Guest OS.
> This explanation is unclear to me - in particular the link between
> code changes and the commit log. Please write a commit log that
> explains and justifies the changes you are making below.
>
> Thanks,
> Lorenzo

will do.

>
>> Signed-off-by: Nirmal Patel <nirmal.patel@linux.intel.com>
>> ---
>>  drivers/pci/controller/vmd.c | 2 --
>>  1 file changed, 2 deletions(-)
>>
>> diff --git a/drivers/pci/controller/vmd.c b/drivers/pci/controller/vmd.c
>> index 769eedeb8802..52c2461b4761 100644
>> --- a/drivers/pci/controller/vmd.c
>> +++ b/drivers/pci/controller/vmd.c
>> @@ -701,8 +701,6 @@ static int vmd_alloc_irqs(struct vmd_dev *vmd)
>>  static void vmd_copy_host_bridge_flags(struct pci_host_bridge *root_bridge,
>>  				       struct pci_host_bridge *vmd_bridge)
>>  {
>> -	vmd_bridge->native_pcie_hotplug = root_bridge->native_pcie_hotplug;
>> -	vmd_bridge->native_shpc_hotplug = root_bridge->native_shpc_hotplug;
>>  	vmd_bridge->native_aer = root_bridge->native_aer;
>>  	vmd_bridge->native_pme = root_bridge->native_pme;
>>  	vmd_bridge->native_ltr = root_bridge->native_ltr;
>> -- 
>> 2.31.1
>>
diff mbox series

Patch

diff --git a/drivers/pci/controller/vmd.c b/drivers/pci/controller/vmd.c
index 769eedeb8802..52c2461b4761 100644
--- a/drivers/pci/controller/vmd.c
+++ b/drivers/pci/controller/vmd.c
@@ -701,8 +701,6 @@  static int vmd_alloc_irqs(struct vmd_dev *vmd)
 static void vmd_copy_host_bridge_flags(struct pci_host_bridge *root_bridge,
 				       struct pci_host_bridge *vmd_bridge)
 {
-	vmd_bridge->native_pcie_hotplug = root_bridge->native_pcie_hotplug;
-	vmd_bridge->native_shpc_hotplug = root_bridge->native_shpc_hotplug;
 	vmd_bridge->native_aer = root_bridge->native_aer;
 	vmd_bridge->native_pme = root_bridge->native_pme;
 	vmd_bridge->native_ltr = root_bridge->native_ltr;