Re: [PATCH v2] ACPI / scan: do not match drivers against objects having scan handlers

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thursday, June 06, 2013 10:54:52 AM Aaron Lu wrote:
> 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=58091
> Reported-and-tested-by: Jason Cassell <bluesloth600@xxxxxxxxx>
> Reported-bisected-and-tested-by: Dmitry S. Demin <dmitryy.demin@xxxxxxxxx>
> Cc: 3.9+ <stable@xxxxxxxxxx>
> Signed-off-by: Aaron Lu <aaron.lu@xxxxxxxxx>

I've applied this one already.

Thanks,
Rafael


> ---
> v2:
> Remove WARN_ON as it would cause unnecessary warnings for devices that
> already have drivers bound.
> 
> drivers/acpi/scan.c | 6 ++++++
>  1 file changed, 6 insertions(+)
> 
> diff --git a/drivers/acpi/scan.c b/drivers/acpi/scan.c
> index 5e7e991..67ce501 100644
> --- a/drivers/acpi/scan.c
> +++ b/drivers/acpi/scan.c
> @@ -553,6 +553,10 @@ static int acpi_bus_match(struct device *dev, struct device_driver *drv)
>  	struct acpi_device *acpi_dev = to_acpi_device(dev);
>  	struct acpi_driver *acpi_drv = to_acpi_driver(drv);
>  
> +	/* Skip ACPI device objects with scan handlers attached. */
> +	if (acpi_dev->handler)
> +		return 0;
> +
>  	return acpi_dev->flags.match_driver
>  		&& !acpi_match_device_ids(acpi_dev, acpi_drv->ids);
>  }
-- 
I speak only for myself.
Rafael J. Wysocki, Intel Open Source Technology Center.
--
To unsubscribe from this list: send the line "unsubscribe linux-acpi" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Linux IBM ACPI]     [Linux Power Management]     [Linux Kernel]     [Linux Laptop]     [Kernel Newbies]     [Share Photos]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Video 4 Linux]     [Device Mapper]     [Linux Resources]

  Powered by Linux