On Fri, Jun 14, 2013 at 10:57 AM, Yinghai Lu <yinghai@xxxxxxxxxx> wrote: > On Fri, Jun 14, 2013 at 9:33 AM, Bjorn Helgaas <bhelgaas@xxxxxxxxxx> wrote: >> On Fri, Jun 14, 2013 at 10:17 AM, Yinghai Lu <yinghai@xxxxxxxxxx> wrote: >> >> Can you please refer to specific function names? I can't read your mind. >> >> You might be referring to quirk_disable_aspm_l0s(). This is a >> pci_fixup_final quirk that calls pci_disable_link_state(). In the >> current tree, we enumerate devices before requesting _OSC control. >> However, pci_fixup_final quirks are not run until the >> pci_apply_final_quirks() fs_initcall, which is after we request _OSC >> control. >> >> As far as I can tell, we never call pci_disable_link_state() before >> calling pcie_no_aspm(). > > ok, you are right, that is not pci_disable_link_state. > > It is pcie_aspm_init_link_state ==> pcie_aspm_sanity_check in booting path > that disable aspm. It has "if (aspm_disabled)" in it, and it cause > the difference. Yes, I agree, the pcie_aspm_init_link_state() path uses aspm_disabled before we set it: acpi_pci_root_add pci_acpi_scan_root pci_scan_child_bus pci_scan_slot pcie_aspm_init_link_state pcie_aspm_sanity_check if (aspm_disabled) # used before set ... acpi_pci_osc_control_set pcie_no_aspm aspm_disabled = 1 # set That might mean we do some ASPM configuration during enumeration (in pci_scan_slot()) even though the BIOS hasn't given us permission. It looks like we did that even in v3.7, since we did the enumeration before the _OSC there as well. That looks like a bug to me. I don't think the fact that we have been doing ASPM config during enumeration before _OSC is an argument for dropping the check in pci_disable_link_state(). Bjorn -- 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