forked from Minki/linux
ACPI / scan: Fix acpi_bus_id_list bookkeeping
acpi_device_add() allocates and adds an element to acpi_bus_id_list (or increments the instance count if the device's HID is already present in the list), but the element is never deleted from the list nor freed. Fix it. Signed-off-by: Lukas Wunner <lukas@wunner.de> Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
This commit is contained in:
parent
e399037e06
commit
ca9dc8d42b
@ -471,10 +471,24 @@ static void acpi_device_release(struct device *dev)
|
|||||||
|
|
||||||
static void acpi_device_del(struct acpi_device *device)
|
static void acpi_device_del(struct acpi_device *device)
|
||||||
{
|
{
|
||||||
|
struct acpi_device_bus_id *acpi_device_bus_id;
|
||||||
|
|
||||||
mutex_lock(&acpi_device_lock);
|
mutex_lock(&acpi_device_lock);
|
||||||
if (device->parent)
|
if (device->parent)
|
||||||
list_del(&device->node);
|
list_del(&device->node);
|
||||||
|
|
||||||
|
list_for_each_entry(acpi_device_bus_id, &acpi_bus_id_list, node)
|
||||||
|
if (!strcmp(acpi_device_bus_id->bus_id,
|
||||||
|
acpi_device_hid(device))) {
|
||||||
|
if (acpi_device_bus_id->instance_no > 0)
|
||||||
|
acpi_device_bus_id->instance_no--;
|
||||||
|
else {
|
||||||
|
list_del(&acpi_device_bus_id->node);
|
||||||
|
kfree(acpi_device_bus_id);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
list_del(&device->wakeup_list);
|
list_del(&device->wakeup_list);
|
||||||
mutex_unlock(&acpi_device_lock);
|
mutex_unlock(&acpi_device_lock);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user