tangled
alpha
login
or
join now
tjh.dev
/
kernel
Linux kernel mirror (for testing)
git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel
os
linux
1
fork
atom
overview
issues
pulls
pipelines
Pull bugzilla-8768 into release branch
Len Brown
18 years ago
fc0dc4d3
53fdc518
+17
-30
1 changed file
expand all
collapse all
unified
split
drivers
acpi
battery.c
+17
-30
drivers/acpi/battery.c
···
113
113
acpi_string oem_info;
114
114
};
115
115
116
116
-
enum acpi_battery_files{
116
116
+
enum acpi_battery_files {
117
117
ACPI_BATTERY_INFO = 0,
118
118
ACPI_BATTERY_STATE,
119
119
ACPI_BATTERY_ALARM,
···
129
129
};
130
130
131
131
struct acpi_battery {
132
132
-
struct mutex mutex;
133
132
struct acpi_device *device;
134
133
struct acpi_battery_flags flags;
135
134
struct acpi_buffer bif_data;
136
135
struct acpi_buffer bst_data;
136
136
+
struct mutex lock;
137
137
unsigned long alarm;
138
138
unsigned long update_time[ACPI_BATTERY_NUMFILES];
139
139
+
139
140
};
140
141
141
142
inline int acpi_battery_present(struct acpi_battery *battery)
···
236
235
return 0;
237
236
238
237
/* Evaluate _BIF */
239
239
-
240
240
-
status =
241
241
-
acpi_evaluate_object(acpi_battery_handle(battery), "_BIF", NULL,
242
242
-
&buffer);
238
238
+
mutex_lock(&battery->lock);
239
239
+
status = acpi_evaluate_object(acpi_battery_handle(battery), "_BIF",
240
240
+
NULL, &buffer);
241
241
+
mutex_unlock(&battery->lock);
243
242
if (ACPI_FAILURE(status)) {
244
243
ACPI_EXCEPTION((AE_INFO, status, "Evaluating _BIF"));
245
244
return -ENODEV;
···
286
285
return 0;
287
286
288
287
/* Evaluate _BST */
289
289
-
290
290
-
status =
291
291
-
acpi_evaluate_object(acpi_battery_handle(battery), "_BST", NULL,
292
292
-
&buffer);
288
288
+
mutex_lock(&battery->lock);
289
289
+
status = acpi_evaluate_object(acpi_battery_handle(battery), "_BST",
290
290
+
NULL, &buffer);
291
291
+
mutex_unlock(&battery->lock);
293
292
if (ACPI_FAILURE(status)) {
294
293
ACPI_EXCEPTION((AE_INFO, status, "Evaluating _BST"));
295
294
return -ENODEV;
···
337
336
338
337
arg0.integer.value = alarm;
339
338
340
340
-
status =
341
341
-
acpi_evaluate_object(acpi_battery_handle(battery), "_BTP",
339
339
+
mutex_lock(&battery->lock);
340
340
+
status = acpi_evaluate_object(acpi_battery_handle(battery), "_BTP",
342
341
&arg_list, NULL);
342
342
+
mutex_unlock(&battery->lock);
343
343
if (ACPI_FAILURE(status))
344
344
return -ENODEV;
345
345
···
660
658
if (!battery || (count > sizeof(alarm_string) - 1))
661
659
return -EINVAL;
662
660
663
663
-
mutex_lock(&battery->mutex);
664
664
-
665
661
result = acpi_battery_update(battery, 1, &update_result);
666
662
if (result) {
667
663
result = -ENODEV;
···
688
688
acpi_battery_check_result(battery, result);
689
689
690
690
if (!result)
691
691
-
result = count;
692
692
-
693
693
-
mutex_unlock(&battery->mutex);
691
691
+
return count;
694
692
695
693
return result;
696
694
}
···
712
714
int update_result = ACPI_BATTERY_NONE_UPDATE;
713
715
int update = 0;
714
716
715
715
-
mutex_lock(&battery->mutex);
716
716
-
717
717
update = (get_seconds() - battery->update_time[fid] >= update_time);
718
718
update = (update | battery->flags.update[fid]);
719
719
···
729
733
result = acpi_read_funcs[fid].print(seq, result);
730
734
acpi_battery_check_result(battery, result);
731
735
battery->flags.update[fid] = result;
732
732
-
mutex_unlock(&battery->mutex);
733
736
return result;
734
737
}
735
738
···
892
897
if (!battery)
893
898
return -ENOMEM;
894
899
895
895
-
mutex_init(&battery->mutex);
896
896
-
897
897
-
mutex_lock(&battery->mutex);
898
898
-
900
900
+
mutex_init(&battery->lock);
899
901
battery->device = device;
900
902
strcpy(acpi_device_name(device), ACPI_BATTERY_DEVICE_NAME);
901
903
strcpy(acpi_device_class(device), ACPI_BATTERY_CLASS);
···
928
936
kfree(battery);
929
937
}
930
938
931
931
-
mutex_unlock(&battery->mutex);
932
939
933
940
return result;
934
941
}
···
942
951
943
952
battery = acpi_driver_data(device);
944
953
945
945
-
mutex_lock(&battery->mutex);
946
946
-
947
954
status = acpi_remove_notify_handler(device->handle,
948
955
ACPI_ALL_NOTIFY,
949
956
acpi_battery_notify);
···
952
963
953
964
kfree(battery->bst_data.pointer);
954
965
955
955
-
mutex_unlock(&battery->mutex);
956
956
-
957
957
-
mutex_destroy(&battery->mutex);
966
966
+
mutex_destroy(&battery->lock);
958
967
959
968
kfree(battery);
960
969