• Rafael J. Wysocki's avatar
    ACPI / hotplug / PCI: Consolidate ACPIPHP with ACPI core hotplug · 3c2cc7ff
    Rafael J. Wysocki authored
    The ACPI-based PCI hotplug (ACPIPHP) code currently attaches its
    hotplug context objects directly to ACPI namespace nodes representing
    hotplug devices.  However, after recent changes causing struct
    acpi_device to be created for every namespace node representing a
    device (regardless of its status), that is not necessary any more.
    Moreover, it's vulnerable to the theoretical issue that the ACPI
    handle passed in the context between handle_hotplug_event() and
    hotplug_event_work() may become invalid in the meantime (as a
    result of a concurrent table unload).
    
    In principle, this issue might be addressed by adding a non-empty
    release handler for ACPIPHP hotplug context objects analogous to
    acpi_scan_drop_device(), but that would duplicate the code in that
    function and in acpi_device_del_work_fn().  For this reason, it's
    better to modify ACPIPHP to attach its device hotplug contexts to
    struct device objects representing hotplug devices and make it
    use acpi_hotplug_notify_cb() as its notify handler.  At the same
    time, acpi_device_hotplug() can be modified to dispatch the new
    .hp.event() callback pointing to acpiphp_hotplug_event() from ACPI
    device objects associated with PCI devices or use the generic
    ACPI device hotplug code for device objects with matching scan
    handlers.
    
    This allows the existing code duplication between ACPIPHP and the
    ACPI core to be reduced too and makes further ACPI-based device
    hotplug consolidation possible.
    Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
    3c2cc7ff
scan.c 57.9 KB