Message ID | 2151922.M630KK6nC3@vostro.rjw.lan (mailing list archive) |
---|---|
State | New, archived |
Delegated to: | Bjorn Helgaas |
Headers | show |
On Mon, 2013-11-04 at 14:30 +0100, Rafael J. Wysocki wrote: > From: Rafael J. Wysocki <rafael.j.wysocki@intel.com> > > ACPI scan handlers should always be attached to struct acpi_device > objects before any ACPI drivers, but there is a window during which > a driver may be attached to a struct acpi_device before checking if > there is a matching scan handler. Namely, that will happen if an > ACPI driver module is loaded during acpi_bus_scan() right after > the first namespace walk is complete and before the given device > is processed by the second namespace walk. > > To prevent that from happening, set the match_driver flags of > struct acpi_device objects right before running device_attach() > for them in acpi_bus_device_attach(). > > Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com> Acked-by: Toshi Kani <toshi.kani@hp.com> Thanks, -Toshi -- To unsubscribe from this list: send the line "unsubscribe linux-pci" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Index: linux-pm/drivers/acpi/scan.c =================================================================== --- linux-pm.orig/drivers/acpi/scan.c +++ linux-pm/drivers/acpi/scan.c @@ -1676,7 +1676,6 @@ void acpi_init_device_object(struct acpi void acpi_device_add_finalize(struct acpi_device *device) { - device->flags.match_driver = true; dev_set_uevent_suppress(&device->dev, false); kobject_uevent(&device->dev.kobj, KOBJ_ADD); } @@ -1915,8 +1914,12 @@ static acpi_status acpi_bus_device_attac return AE_OK; ret = acpi_scan_attach_handler(device); - if (ret) - return ret > 0 ? AE_OK : AE_CTRL_DEPTH; + if (ret < 0) + return AE_CTRL_DEPTH; + + device->flags.match_driver = true; + if (ret > 0) + return AE_OK; ret = device_attach(&device->dev); return ret >= 0 ? AE_OK : AE_CTRL_DEPTH;