• Aaron Lu's avatar
    ACPI / scan: do not match drivers against objects having scan handlers · 9f29ab11
    Aaron Lu authored
    With the introduction of ACPI scan handlers, an ACPI device object
    with an ACPI scan handler attached to it must not be bound to an ACPI
    driver any more.  Therefore it doesn't make sense to match those
    ACPI device objects against a newly registered ACPI driver in
    acpi_bus_match(), so make that function return 0 if the device
    object passed to it has an ACPI scan handler attached.
    
    This also addresses a regression related to a broken ACPI table in
    the BIOS, where it has defined a _ROM method under the PCI root
    bridge object.  This causes the video module to treat that object
    as a display controller device (since only display devices are
    supposed to have a _ROM method defined according to the ACPI spec).
    As a result, the ACPI video driver binds to the PCI root bridge
    object and overwrites the previously assigned driver_data field of
    it, causing subsequent calls to acpi_get_pci_dev() to fail.
    
    [rjw: Subject and changelog]
    References: https://bugzilla.kernel.org/show_bug.cgi?id=58091Reported-by: default avatarJason Cassell <bluesloth600@gmail.com>
    Reported-and-bisected-by: default avatarDmitry S. Demin <dmitryy.demin@gmail.com>
    Cc: 3.9+ <stable@kernel.org>
    Signed-off-by: default avatarAaron Lu <aaron.lu@intel.com>
    Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
    9f29ab11
scan.c 53.2 KB