Skip to content
This repository was archived by the owner on Nov 8, 2023. It is now read-only.

Commit a231eed

Browse files
t-8chrafaeljw
authored andcommitted
ACPI: battery: create alarm sysfs attribute atomically
Let the power supply core register the attribute. This ensures that the attribute is created before the device is announced to userspace, avoid a race condition. Signed-off-by: Thomas Weißschuh <linux@weissschuh.net> Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
1 parent aa53266 commit a231eed

File tree

1 file changed

+12
-4
lines changed

1 file changed

+12
-4
lines changed

drivers/acpi/battery.c

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -678,12 +678,18 @@ static ssize_t acpi_battery_alarm_store(struct device *dev,
678678
return count;
679679
}
680680

681-
static const struct device_attribute alarm_attr = {
681+
static struct device_attribute alarm_attr = {
682682
.attr = {.name = "alarm", .mode = 0644},
683683
.show = acpi_battery_alarm_show,
684684
.store = acpi_battery_alarm_store,
685685
};
686686

687+
static struct attribute *acpi_battery_attrs[] = {
688+
&alarm_attr.attr,
689+
NULL
690+
};
691+
ATTRIBUTE_GROUPS(acpi_battery);
692+
687693
/*
688694
* The Battery Hooking API
689695
*
@@ -823,7 +829,10 @@ static void __exit battery_hook_exit(void)
823829

824830
static int sysfs_add_battery(struct acpi_battery *battery)
825831
{
826-
struct power_supply_config psy_cfg = { .drv_data = battery, };
832+
struct power_supply_config psy_cfg = {
833+
.drv_data = battery,
834+
.attr_grp = acpi_battery_groups,
835+
};
827836
bool full_cap_broken = false;
828837

829838
if (!ACPI_BATTERY_CAPACITY_VALID(battery->full_charge_capacity) &&
@@ -868,7 +877,7 @@ static int sysfs_add_battery(struct acpi_battery *battery)
868877
return result;
869878
}
870879
battery_hook_add_battery(battery);
871-
return device_create_file(&battery->bat->dev, &alarm_attr);
880+
return 0;
872881
}
873882

874883
static void sysfs_remove_battery(struct acpi_battery *battery)
@@ -879,7 +888,6 @@ static void sysfs_remove_battery(struct acpi_battery *battery)
879888
return;
880889
}
881890
battery_hook_remove_battery(battery);
882-
device_remove_file(&battery->bat->dev, &alarm_attr);
883891
power_supply_unregister(battery->bat);
884892
battery->bat = NULL;
885893
mutex_unlock(&battery->sysfs_lock);

0 commit comments

Comments
 (0)