Re: [PATCH] Force to clear ASPM bits if CONFIG_PCIEASPM_PERFORMANCE is set

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, Nov 02, 2016 at 09:26:55AM +0000, Koehrer Mathias (ETAS/ESW5) wrote:
> On systems that have PCIe ASPM support in the BIOS enabled
> the commit 387d37577fdd05e9472c20885464c2a53b3c945f may lead
> to the situation that accesses to registers of enabled
> PCIe devices are extremely slow.
> This happens if the ACPI FADT declares incorrectly that the
> system doesn't support PCIe ASPM even if this is enabled in
> the BIOS.
> In this case the function pcie_no_aspm() will be called.
> However this sets the aspm_policy to POLICY_DEFAULT even
> if CONFIG_PCIEASPM_PERFORMANCE has been configured.
> As result, the ASPM on a PCIe may still be set even if 
> this is not expected.
> 
> This happens e.g. on a HP workstation 800 G1 together with
> an Intel dual port Ethernet server adapter i350 plugged in.
> Whenever ASPM is enabled in the BIOS the access to the 
> LAN registers are really slow (read access: slower than 20us).
> In this setup the LnkCap of the two LAN controllers and
> of the integrated PCIe switch is set to "ASPM L1 Enabled" 
> even if the controller is configured to be up and running.
> There has been a lengthy discussion on this performance issue
> due to this issue on the linux-rt-users list:
> http://marc.info/?l=linux-rt-users&m=147454824515022&w=2
>
> This patch solves this issue by forcing to disable ASPM
> if CONFIG_PCIEASPM_PERFORMANCE has been set.

The 387d37577fdd changelog says that when ACPI_FADT_NO_ASPM is
set, the expected behavior is for the OS to not touch the ASPM
configuration, and that this is what Windows does.

If I understand correctly, your proposal in this patch is to change
this so that if ACPI_FADT_NO_ASPM is set and
CONFIG_PCIEASPM_PERFORMANCE=y, we go ahead and disable ASPM.

Only the firmware author can tell whether it's really a bug that this
system sets ACPI_FADT_NO_ASPM.  It could be that there's some platform
issue that is avoided by leaving the BIOS ASPM configuration
untouched.

If it really *is* a firmware bug, and ACPI_FADT_NO_ASPM is not
supposed to be set on this platform, CONFIG_PCIEASPM_PERFORMANCE
doesn't feel like the right mechanism for working around it.  It
should be safe to enable that for all systems, and for other systems
that set ACPI_FADT_NO_ASPM correctly, we should not touch ASPM
configuration.

Can you open a bugzilla at http://bugzilla.kernel.org and attach the
complete dmesg log and "lspci -vv" output?  This is a subtle area
where we've had many break/fix cycles, and it's important to be able
to go back and look at details of problems that motivated previous
changes.

BTW, the conventional commit reference format is

  387d37577fdd ("PCI: Don't clear ASPM bits when the FADT declares
  it's unsupported")

> Signed-off-by: Mathias Koehrer <mathias.koehrer@xxxxxxxx>
> 
> ---
>  drivers/pci/pcie/aspm.c |    5 ++++-
>  1 file changed, 4 insertions(+), 1 deletion(-)
> 
> Index: linux-4.8/drivers/pci/pcie/aspm.c
> ===================================================================
> --- linux-4.8.orig/drivers/pci/pcie/aspm.c
> +++ linux-4.8/drivers/pci/pcie/aspm.c
> @@ -79,10 +79,13 @@ static LIST_HEAD(link_list);
>  
>  #ifdef CONFIG_PCIEASPM_PERFORMANCE
>  static int aspm_policy = POLICY_PERFORMANCE;
> +static int aspm_default_config_policy = POLICY_PERFORMANCE;
>  #elif defined CONFIG_PCIEASPM_POWERSAVE
>  static int aspm_policy = POLICY_POWERSAVE;
> +static int aspm_default_config_policy = POLICY_POWERSAFE;
>  #else
>  static int aspm_policy;
> +static int aspm_default_config_policy;
>  #endif
>  
>  static const char *policy_str[] = {
> @@ -946,7 +949,7 @@ void pcie_no_aspm(void)
>  	 * (b) prevent userspace from changing policy
>  	 */
>  	if (!aspm_force) {
> -		aspm_policy = POLICY_DEFAULT;
> +		aspm_policy = aspm_default_config_policy;

You would need to update the comment just above this to reflect the
new code.

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



[Index of Archives]     [DMA Engine]     [Linux Coverity]     [Linux USB]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Greybus]

  Powered by Linux