linux-acpi.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Len Brown <len.brown@intel.com>
To: linux-acpi@vger.kernel.org
Cc: Len Brown <len.brown@intel.com>
Subject: [PATCH 03/25] Revert "ACPI: Battery: Synchronize battery operations."
Date: Fri, 24 Aug 2007 03:20:50 -0400	[thread overview]
Message-ID: <11879400793131-git-send-email-len.brown@intel.com> (raw)
Message-ID: <5b31d895874f56174e4d885c065c9fc4b24b28bb.1187939442.git.len.brown@intel.com> (raw)
In-Reply-To: <11879400782033-git-send-email-len.brown@intel.com>
In-Reply-To: <3c1d36da1d5ed36979340efd233ddaacc45b0a02.1187939442.git.len.brown@intel.com>

This reverts commit 3bd92ba19a89fe61ebf58804f9c8675372f50c1c.

It is no longer necessary, and it opens up a race.

Acked-by: Vladimir Lebedev <vladimir.p.lebedev@gmail.com>
Acked-by: Alexey Starikovskiy <astarikovskiy@suse.de>
Signed-off-by: Len Brown <len.brown@intel.com>
---
 drivers/acpi/battery.c |   47 ++++++++++++++++++++++++++++++-----------------
 1 files changed, 30 insertions(+), 17 deletions(-)

diff --git a/drivers/acpi/battery.c b/drivers/acpi/battery.c
index d7b499f..8165103 100644
--- a/drivers/acpi/battery.c
+++ b/drivers/acpi/battery.c
@@ -113,7 +113,7 @@ struct acpi_battery_info {
 	acpi_string oem_info;
 };
 
-enum acpi_battery_files {
+enum acpi_battery_files{
 	ACPI_BATTERY_INFO = 0,
 	ACPI_BATTERY_STATE,
 	ACPI_BATTERY_ALARM,
@@ -129,14 +129,13 @@ struct acpi_battery_flags {
 };
 
 struct acpi_battery {
+	struct mutex mutex;
 	struct acpi_device *device;
 	struct acpi_battery_flags flags;
 	struct acpi_buffer bif_data;
 	struct acpi_buffer bst_data;
-	struct mutex lock;
 	unsigned long alarm;
 	unsigned long update_time[ACPI_BATTERY_NUMFILES];
-
 };
 
 inline int acpi_battery_present(struct acpi_battery *battery)
@@ -236,10 +235,10 @@ static int acpi_battery_get_info(struct acpi_battery *battery)
 		return 0;
 
 	/* Evaluate _BIF */
-	mutex_lock(&battery->lock);
-	status = acpi_evaluate_object(acpi_battery_handle(battery), "_BIF",
-				      NULL, &buffer);
-	mutex_unlock(&battery->lock);
+
+	status =
+	    acpi_evaluate_object(acpi_battery_handle(battery), "_BIF", NULL,
+				 &buffer);
 	if (ACPI_FAILURE(status)) {
 		ACPI_EXCEPTION((AE_INFO, status, "Evaluating _BIF"));
 		return -ENODEV;
@@ -286,10 +285,10 @@ static int acpi_battery_get_state(struct acpi_battery *battery)
 		return 0;
 
 	/* Evaluate _BST */
-	mutex_lock(&battery->lock);
-	status = acpi_evaluate_object(acpi_battery_handle(battery), "_BST",
-				      NULL, &buffer);
-	mutex_unlock(&battery->lock);
+
+	status =
+	    acpi_evaluate_object(acpi_battery_handle(battery), "_BST", NULL,
+				 &buffer);
 	if (ACPI_FAILURE(status)) {
 		ACPI_EXCEPTION((AE_INFO, status, "Evaluating _BST"));
 		return -ENODEV;
@@ -337,10 +336,9 @@ static int acpi_battery_set_alarm(struct acpi_battery *battery,
 
 	arg0.integer.value = alarm;
 
-	mutex_lock(&battery->lock);
-	status = acpi_evaluate_object(acpi_battery_handle(battery), "_BTP",
+	status =
+	    acpi_evaluate_object(acpi_battery_handle(battery), "_BTP",
 				 &arg_list, NULL);
-	mutex_unlock(&battery->lock);
 	if (ACPI_FAILURE(status))
 		return -ENODEV;
 
@@ -660,6 +658,8 @@ acpi_battery_write_alarm(struct file *file,
 	if (!battery || (count > sizeof(alarm_string) - 1))
 		return -EINVAL;
 
+	mutex_lock(&battery->mutex);
+
 	result = acpi_battery_update(battery, 1, &update_result);
 	if (result) {
 		result = -ENODEV;
@@ -688,7 +688,9 @@ acpi_battery_write_alarm(struct file *file,
 	acpi_battery_check_result(battery, result);
 
 	if (!result)
-		return count;
+		result = count;
+
+	mutex_unlock(&battery->mutex);
 
 	return result;
 }
@@ -712,6 +714,8 @@ static int acpi_battery_read(int fid, struct seq_file *seq)
 	int update_result = ACPI_BATTERY_NONE_UPDATE;
 	int update = 0;
 
+	mutex_lock(&battery->mutex);
+
 	update = (get_seconds() - battery->update_time[fid] >= update_time);
 	update = (update | battery->flags.update[fid]);
 
@@ -729,6 +733,7 @@ static int acpi_battery_read(int fid, struct seq_file *seq)
 	result = acpi_read_funcs[fid].print(seq, result);
 	acpi_battery_check_result(battery, result);
 	battery->flags.update[fid] = result;
+	mutex_unlock(&battery->mutex);
 	return result;
 }
 
@@ -892,7 +897,10 @@ static int acpi_battery_add(struct acpi_device *device)
 	if (!battery)
 		return -ENOMEM;
 
-	mutex_init(&battery->lock);
+	mutex_init(&battery->mutex);
+
+	mutex_lock(&battery->mutex);
+
 	battery->device = device;
 	strcpy(acpi_device_name(device), ACPI_BATTERY_DEVICE_NAME);
 	strcpy(acpi_device_class(device), ACPI_BATTERY_CLASS);
@@ -928,6 +936,7 @@ static int acpi_battery_add(struct acpi_device *device)
 		kfree(battery);
 	}
 
+	mutex_unlock(&battery->mutex);
 
 	return result;
 }
@@ -942,6 +951,8 @@ static int acpi_battery_remove(struct acpi_device *device, int type)
 
 	battery = acpi_driver_data(device);
 
+	mutex_lock(&battery->mutex);
+
 	status = acpi_remove_notify_handler(device->handle,
 					    ACPI_ALL_NOTIFY,
 					    acpi_battery_notify);
@@ -952,7 +963,9 @@ static int acpi_battery_remove(struct acpi_device *device, int type)
 
 	kfree(battery->bst_data.pointer);
 
-	mutex_destroy(&battery->lock);
+	mutex_unlock(&battery->mutex);
+
+	mutex_destroy(&battery->mutex);
 
 	kfree(battery);
 
-- 
1.5.3.rc6.17.g1911

  parent reply	other threads:[~2007-08-24  7:21 UTC|newest]

Thread overview: 28+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-08-24  7:20 ACPI patches for Linux-2.6.23-rc3 Len Brown
     [not found] ` <3c1d36da1d5ed36979340efd233ddaacc45b0a02.1187939442.git.len.brown@intel.com>
2007-08-24  7:20   ` [PATCH 01/25] ACPI: thermal: clean up MODULE_PARM_DESC newlines Len Brown
     [not found]   ` <c52a7419af18594426bc601d1ea346dbbcf71e28.1187939442.git.len.brown@intel.com>
2007-08-24  7:20     ` [PATCH 02/25] ACPI: thermal: create "thermal.crt=C" bootparam Len Brown
     [not found]   ` <5b31d895874f56174e4d885c065c9fc4b24b28bb.1187939442.git.len.brown@intel.com>
2007-08-24  7:20     ` Len Brown [this message]
     [not found]   ` <8c99fdce30787b0d1fc00b907d4cd55a714e4cdd.1187939442.git.len.brown@intel.com>
2007-08-24  7:20     ` [PATCH 04/25] ACPI: thermal: set "thermal.nocrt" via DMI on Gigabyte GA-7ZX Len Brown
     [not found]   ` <61ec7567db103d537329b0db9a887db570431ff4.1187939442.git.len.brown@intel.com>
2007-08-24  7:20     ` [PATCH 05/25] ACPI: boot correctly with "nosmp" or "maxcpus=0" Len Brown
     [not found]   ` <a9a4d1771cbb3c97f247534358ed24b1abf0aacb.1187939442.git.len.brown@intel.com>
2007-08-24  7:20     ` [PATCH 06/25] Subject: "ACPI handle has no context!" should be KERN_DEBUG Len Brown
     [not found]   ` <14e04fb34ffa82ee61ae69f98d8fca12d2e8e31c.1187939442.git.len.brown@intel.com>
2007-08-24  7:20     ` [PATCH 08/25] ACPI: Schedule /proc/acpi/event for removal Len Brown
     [not found]   ` <f63211caacf6822049f02015faf1b78ba7a7984f.1187939442.git.len.brown@intel.com>
2007-08-24  7:20     ` [PATCH 09/25] ACPI: Fix a warning of discarding qualifiers from pointer target type Len Brown
     [not found]   ` <a7ecd1ea913346a72f41a002c365882dc05c9bd5.1187939442.git.len.brown@intel.com>
2007-08-24  7:20     ` [PATCH 10/25] ACPI: video: Add keycode for ACPI video driver hotkey events Len Brown
     [not found]   ` <a1eb96a2f635cdb8f626f4074dae2ba5a6fce1e8.1187939442.git.len.brown@intel.com>
2007-08-24  7:20     ` [PATCH 11/25] ACPI video hotkey: remove invalid events handler for video output devices Len Brown
     [not found]   ` <745ce81328d09b1a5ebddacd1fffc20905d1cce3.1187939442.git.len.brown@intel.com>
2007-08-24  7:20     ` [PATCH 12/25] ACPI video hotkey: export ACPI video hotkey events via input layer Len Brown
     [not found]   ` <f9319f903f898dd4b15dbc386499725ce6c59776.1187939442.git.len.brown@intel.com>
2007-08-24  7:21     ` [PATCH 13/25] ACPI: EC: revert fix for bugzilla 8709 Len Brown
     [not found]   ` <f46d1604ed84e5a4107bae1db7283e3a76d72ace.1187939442.git.len.brown@intel.com>
2007-08-24  7:21     ` [PATCH 14/25] sony-laptop: enable Vaio FZ events Len Brown
     [not found]   ` <015a916fbbf105bb15f4bbfd80c3b9b2f2e0d7db.1187939442.git.len.brown@intel.com>
2007-08-24  7:21     ` [PATCH 15/25] sony-laptop: call sonypi_compat_init earlier Len Brown
     [not found]   ` <e1996a69e162b1c99c3d3802684d1c388b54f47d.1187939442.git.len.brown@intel.com>
2007-08-24  7:21     ` [PATCH 16/25] asus-laptop: Fix rmmod of asus_laptop Len Brown
     [not found]   ` <79d2dfaa4e787f94b7f65f4611bc7d1c8d85fabc.1187939442.git.len.brown@intel.com>
2007-08-24  7:21     ` [PATCH 17/25] ACPI: enable GPEs before calling _WAK on resume Len Brown
     [not found]   ` <1e0aa9ad721349781b728ec4226876247e3fd431.1187939442.git.len.brown@intel.com>
2007-08-24  7:21     ` [PATCH 18/25] PNP: fix up after Lindent Len Brown
     [not found]   ` <4cec086b219224167c22dd020d3dd2d9220e1d98.1187939443.git.len.brown@intel.com>
2007-08-24  7:21     ` [PATCH 19/25] PNPACPI: simplify irq_flags() Len Brown
     [not found]   ` <4721a4cc8864f0eb92958c3e0479e7994e8b0072.1187939443.git.len.brown@intel.com>
2007-08-24  7:21     ` [PATCH 20/25] PNPACPI: remove unnecessary casts of "void *" Len Brown
     [not found]   ` <6c504d30a48157b7c05a0dfb6a799c72095e957d.1187939443.git.len.brown@intel.com>
2007-08-24  7:21     ` [PATCH 21/25] ISAPNP: removed unused isapnp_detected and ISAPNP_DEBUG Len Brown
     [not found]   ` <4f0217e30249ac0eb13b65ef64f2aee627465da2.1187939443.git.len.brown@intel.com>
2007-08-24  7:21     ` [PATCH 22/25] PNP: remove MODULE infrastructure Len Brown
     [not found]   ` <b173491339b9ae7f1322241ce6228c1268513a39.1187939443.git.len.brown@intel.com>
2007-08-24  7:21     ` [PATCH 23/25] PNP: remove null pointer checks Len Brown
     [not found]   ` <29bb7fd39d8976d9d510a9ab79f8942fdcd2b2ea.1187939443.git.len.brown@intel.com>
2007-08-24  7:21     ` [PATCH 24/25] make drivers/acpi/scan.c:create_modalias() static Len Brown
     [not found]   ` <3e069ee0c30d6f28b79e409ef2df1ffa427897ae.1187939443.git.len.brown@intel.com>
2007-08-24  7:21     ` [PATCH 25/25] ACPI: fix ia64 allnoconfig build Len Brown
2007-08-24  8:07 ` ACPI patches for Linux-2.6.23-rc3 Zhang Rui
2007-08-24 23:37   ` Len Brown
2007-08-25  5:26     ` Zhang Rui

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=11879400793131-git-send-email-len.brown@intel.com \
    --to=len.brown@intel.com \
    --cc=linux-acpi@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).