On Thu, Sep 13, 2012 at 2:17 PM, Yinghai Lu <yinghai@xxxxxxxxxx> wrote: > On Thu, Sep 13, 2012 at 12:39 PM, Bjorn Helgaas <bhelgaas@xxxxxxxxxx> wrote: >> If I understand you correctly, you're agreeing that if we change the >> .add()/.remove() interfaces, there is no need for RCU here. Correct >> me if I'm wrong. > > yes. > > just passing acpi_pci_root point or acpi_device pointer. related change. 1. update pci_root_hp split patch to *p2p* for some function, so will make add_bridge to take acpi_pci_root point. 2. remove one find_acpi_pci_root calling. 3. update the interface... now in acpiphp_glue.c::register_slot still have one calling left.... pdev = pbus->self; if (pdev && pci_is_pcie(pdev)) { tmp = acpi_find_root_bridge_handle(pdev); if (tmp) { struct acpi_pci_root *root = acpi_pci_find_root(tmp); if (root && (root->osc_control_set & OSC_PCI_EXPRESS_NATIVE_HP_CONTROL)) { dev_printk(KERN_DEBUG, &pdev->dev, "is already used by pciehp\n"); return AE_OK; } } } maybe could put acpi_pci_root *root in into every acpiphp_bridge. ? Thanks Yinghai
Attachment:
pci_root_acpiphp_split.patch
Description: Binary data
Attachment:
pci_root_hp_6.patch
Description: Binary data
Attachment:
update_acpi_pci_driver_add_remove.patch
Description: Binary data