mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-03-30 19:15:14 +00:00
Merge branch 'release' of git://git.kernel.org/pub/scm/linux/kernel/git/lenb/linux-acpi-2.6
* 'release' of git://git.kernel.org/pub/scm/linux/kernel/git/lenb/linux-acpi-2.6: Battery: sysfs_remove_battery(): possible circular locking
This commit is contained in:
commit
f38092b50f
1 changed files with 7 additions and 3 deletions
|
@ -99,6 +99,7 @@ enum {
|
||||||
|
|
||||||
struct acpi_battery {
|
struct acpi_battery {
|
||||||
struct mutex lock;
|
struct mutex lock;
|
||||||
|
struct mutex sysfs_lock;
|
||||||
struct power_supply bat;
|
struct power_supply bat;
|
||||||
struct acpi_device *device;
|
struct acpi_device *device;
|
||||||
struct notifier_block pm_nb;
|
struct notifier_block pm_nb;
|
||||||
|
@ -573,16 +574,16 @@ static int sysfs_add_battery(struct acpi_battery *battery)
|
||||||
|
|
||||||
static void sysfs_remove_battery(struct acpi_battery *battery)
|
static void sysfs_remove_battery(struct acpi_battery *battery)
|
||||||
{
|
{
|
||||||
mutex_lock(&battery->lock);
|
mutex_lock(&battery->sysfs_lock);
|
||||||
if (!battery->bat.dev) {
|
if (!battery->bat.dev) {
|
||||||
mutex_unlock(&battery->lock);
|
mutex_unlock(&battery->sysfs_lock);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
device_remove_file(battery->bat.dev, &alarm_attr);
|
device_remove_file(battery->bat.dev, &alarm_attr);
|
||||||
power_supply_unregister(&battery->bat);
|
power_supply_unregister(&battery->bat);
|
||||||
battery->bat.dev = NULL;
|
battery->bat.dev = NULL;
|
||||||
mutex_unlock(&battery->lock);
|
mutex_unlock(&battery->sysfs_lock);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -982,6 +983,7 @@ static int acpi_battery_add(struct acpi_device *device)
|
||||||
strcpy(acpi_device_class(device), ACPI_BATTERY_CLASS);
|
strcpy(acpi_device_class(device), ACPI_BATTERY_CLASS);
|
||||||
device->driver_data = battery;
|
device->driver_data = battery;
|
||||||
mutex_init(&battery->lock);
|
mutex_init(&battery->lock);
|
||||||
|
mutex_init(&battery->sysfs_lock);
|
||||||
if (ACPI_SUCCESS(acpi_get_handle(battery->device->handle,
|
if (ACPI_SUCCESS(acpi_get_handle(battery->device->handle,
|
||||||
"_BIX", &handle)))
|
"_BIX", &handle)))
|
||||||
set_bit(ACPI_BATTERY_XINFO_PRESENT, &battery->flags);
|
set_bit(ACPI_BATTERY_XINFO_PRESENT, &battery->flags);
|
||||||
|
@ -1010,6 +1012,7 @@ static int acpi_battery_add(struct acpi_device *device)
|
||||||
fail:
|
fail:
|
||||||
sysfs_remove_battery(battery);
|
sysfs_remove_battery(battery);
|
||||||
mutex_destroy(&battery->lock);
|
mutex_destroy(&battery->lock);
|
||||||
|
mutex_destroy(&battery->sysfs_lock);
|
||||||
kfree(battery);
|
kfree(battery);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
@ -1027,6 +1030,7 @@ static int acpi_battery_remove(struct acpi_device *device, int type)
|
||||||
#endif
|
#endif
|
||||||
sysfs_remove_battery(battery);
|
sysfs_remove_battery(battery);
|
||||||
mutex_destroy(&battery->lock);
|
mutex_destroy(&battery->lock);
|
||||||
|
mutex_destroy(&battery->sysfs_lock);
|
||||||
kfree(battery);
|
kfree(battery);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue