On Fri, Sep 28, 2012 at 4:46 PM, Bjorn Helgaas <bhelgaas@xxxxxxxxxx> wrote: > On Thu, Sep 27, 2012 at 2:11 AM, Yinghai Lu <yinghai@xxxxxxxxxx> wrote: >> After we get hot-added ioapic registered. >> pci_enable_bridges will try to enable ioapic irq for pci bridges. > > What makes this specifically related to IOAPICs? > >> Signed-off-by: Yinghai Lu <yinghai@xxxxxxxxxx> >> --- >> drivers/acpi/pci_root.c | 7 +++++++ >> 1 files changed, 7 insertions(+), 0 deletions(-) >> >> diff --git a/drivers/acpi/pci_root.c b/drivers/acpi/pci_root.c >> index bce469c..27adbfd 100644 >> --- a/drivers/acpi/pci_root.c >> +++ b/drivers/acpi/pci_root.c >> @@ -644,12 +644,19 @@ static int acpi_pci_root_start(struct acpi_device *device) >> struct acpi_pci_root *root = acpi_driver_data(device); >> struct acpi_pci_driver *driver; >> >> + if (system_state != SYSTEM_BOOTING) >> + pci_assign_unassigned_bus_resources(root->bus); >> + >> mutex_lock(&acpi_pci_root_lock); >> list_for_each_entry(driver, &acpi_pci_drivers, node) >> if (driver->add) >> driver->add(root); >> mutex_unlock(&acpi_pci_root_lock); >> >> + /* need to after hot-added ioapic is registered */ >> + if (system_state != SYSTEM_BOOTING) >> + pci_enable_bridges(root->bus); > > Theoretically, we should be able to assign resources and enable > bridges here regardless of the system_state. > > I think the reason you don't want to do it while SYSTEM_BOOTING is > because we currently do this at boot-time: > > acpi_pci_root_add > pci_scan_child_bus > acpi_pci_root_start > pci_bus_add_devices > <account for some motherboard (PNP0C01) resources> > pcibios_assign_resources # fs_initcall > pci_assign_unassigned_resources > pci_enable_bridges > > and without the SYSTEM_BOOTING check, we might assign PCI resources at > boot-time that conflict with motherboard resources. > > Is that right? yes. > > This is completely non-obvious and future readers deserve a hint about > what's going on here. > > The right way to do this would be to pay attention to the host bridge > apertures, and assign resources from within the apertures. Then we > could always assign PCI resources when adding a host bridge instead of > in an fs_initcall. I understand we still have legacy issues and > machines where we still don't pay attention to _CRS. But if we're > doing things to work around a broken design, it's important to be > aware of how the design is broken so we have some hope of eventually > fixing the design. that could be another big topic. -- 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