| From f406270bf73d71ea7b35ee3f7a08a44f6594c9b1 Mon Sep 17 00:00:00 2001 |
| From: "Rafael J. Wysocki" <rafael.j.wysocki@intel.com> |
| Date: Tue, 11 Apr 2017 00:23:42 +0200 |
| Subject: ACPI / scan: Set the visited flag for all enumerated devices |
| |
| From: Rafael J. Wysocki <rafael.j.wysocki@intel.com> |
| |
| commit f406270bf73d71ea7b35ee3f7a08a44f6594c9b1 upstream. |
| |
| Commit 10c7e20b2ff3 (ACPI / scan: fix enumeration (visited) flags for |
| bus rescans) attempted to fix a problem with ACPI-based enumerateion |
| of I2C/SPI devices, but it forgot to ensure that the visited flag |
| will be set for all of the other enumerated devices, so fix that. |
| |
| Fixes: 10c7e20b2ff3 (ACPI / scan: fix enumeration (visited) flags for bus rescans) |
| Link: https://bugzilla.kernel.org/show_bug.cgi?id=194885 |
| Reported-and-tested-by: Kevin Locke <kevin@kevinlocke.name> |
| Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com> |
| Reviewed-by: Mika Westerberg <mika.westerberg@linux.intel.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/acpi/scan.c | 19 ++++++++++++------- |
| 1 file changed, 12 insertions(+), 7 deletions(-) |
| |
| --- a/drivers/acpi/scan.c |
| +++ b/drivers/acpi/scan.c |
| @@ -1827,15 +1827,20 @@ static void acpi_bus_attach(struct acpi_ |
| return; |
| |
| device->flags.match_driver = true; |
| - if (!ret) { |
| - ret = device_attach(&device->dev); |
| - if (ret < 0) |
| - return; |
| - |
| - if (!ret && device->pnp.type.platform_id) |
| - acpi_default_enumeration(device); |
| + if (ret > 0) { |
| + acpi_device_set_enumerated(device); |
| + goto ok; |
| } |
| |
| + ret = device_attach(&device->dev); |
| + if (ret < 0) |
| + return; |
| + |
| + if (ret > 0 || !device->pnp.type.platform_id) |
| + acpi_device_set_enumerated(device); |
| + else |
| + acpi_default_enumeration(device); |
| + |
| ok: |
| list_for_each_entry(child, &device->children, node) |
| acpi_bus_attach(child); |