Re: [PATCH v3 4/6] PCI/acpiphp: update ACPI hotplug slot informationwhen PCI hotplug happens

From: Jiang Liu
Date: Wed Jan 09 2013 - 11:29:48 EST


On 01/09/2013 08:04 AM, Rafael J. Wysocki wrote:
> On Wednesday, January 09, 2013 12:52:23 AM Jiang Liu wrote:
>> Currently the acpiphp driver fails to update hotplug slot information under
>> several conditions, such as:
>> 1) The bridge device is removed through /sys/bus/pci/devices/.../remove
>> 2) The bridge device is added/removed by PCI hotplug driver other than the
>> acpiphp driver itself. For example, if an IO expansion box with ACPI
>> hotplug slots available is hot-added by the pciehp driver, all ACPI
>> hotplug slots won't be discovered by the acpiphp driver.
>>
>> So hook the BUS_NOTIFY_ADD_DEVICE/BUS_NOTIFY_DEL_DEVICE events to
>> update ACPI hotplug slot information when PCI hotplug event happens.
>>
>> Signed-off-by: Jiang Liu <jiang.liu@xxxxxxxxxx>
>> Signed-off-by: Yijing Wang <wangyijing@xxxxxxxxxx>
>> ---
>> drivers/pci/hotplug/acpiphp_glue.c | 62 ++++++++++++++++++++++++++++++++++--
>> 1 file changed, 60 insertions(+), 2 deletions(-)
>>
snip
>> +static struct notifier_block acpi_pci_hp_notifier = {
>> + .notifier_call = &acpi_pci_hp_notify_fn,
>> +};
>> +
>> static struct acpi_pci_driver acpi_pci_hp_driver = {
>> .add = add_bridge,
>> .remove = remove_bridge,
>> @@ -1448,6 +1503,8 @@ int __init acpiphp_glue_init(void)
>> else
>> acpi_pci_register_driver(&acpi_pci_hp_driver);
>>
>> + bus_register_notifier(&pci_bus_type, &acpi_pci_hp_notifier);
>
> Your previous patch adds a PCI bus notifier for a similar thing. Why are
> you adding another one here?
Hi Rafael,
The acpiphp driver could be built as a module, and this bus notifier
is used to setup/tear down ACPI based PCI hotplug controllers under a PCI bridge.
The previous patch is to add/remove PCI slots. The PCI slot and PCI hotplug
controller are related but different objects, so we use two notifiers to support
them all.
Thanks!
Gerry

>
>
>> +
>> return 0;
>> }
>>
>> @@ -1459,6 +1516,7 @@ int __init acpiphp_glue_init(void)
>> */
>> void acpiphp_glue_exit(void)
>> {
>> + bus_unregister_notifier(&pci_bus_type, &acpi_pci_hp_notifier);
>> acpi_pci_unregister_driver(&acpi_pci_hp_driver);
>> }
>
> Thanks,
> Rafael
>
>

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/