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. 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; 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