public inbox for linux-acpi@vger.kernel.org
 help / color / mirror / Atom feed
* ACPI: Always return valid 'status' from acpi_battery_get_property()
@ 2007-11-07 23:09 Roland Dreier
  2007-11-08  8:29 ` Alexey Starikovskiy
  0 siblings, 1 reply; 6+ messages in thread
From: Roland Dreier @ 2007-11-07 23:09 UTC (permalink / raw)
  To: Len Brown; +Cc: linux-acpi, Alexey Starikovskiy

If a battery is at a critical charge level and not being charged or
discharged, then the ACPI _BST method will return a state of 4, and
the current acpi_battery_get_property() code will not set any property
value for POWER_SUPPLY_PROP_STATUS.  This will cause an oops in
power_supply_show_property() when it reads off the end of the
status_text array.  This actually was causing a 100% reproducible
crash on boot on my laptop with two batteries, when one battery was
completely drained and the laptop was not plugged in.

Fix this by making sure acpi_battery_get_property() returns
POWER_SUPPLY_STATUS_UNKNOWN for any battery state it doesn't already
handle explicitly.  There doesn't seem to be any status enum value
defined that makes more sense than 'unknown' for a battery at a
critical charge level.

Signed-off-by: Roland Dreier <roland@digitalvampire.org>
---
diff --git a/drivers/acpi/battery.c b/drivers/acpi/battery.c
index c2ce0ad..cbb27b4 100644
--- a/drivers/acpi/battery.c
+++ b/drivers/acpi/battery.c
@@ -152,6 +152,8 @@ static int acpi_battery_get_property(struct power_supply *psy,
 			val->intval = POWER_SUPPLY_STATUS_CHARGING;
 		else if (battery->state == 0)
 			val->intval = POWER_SUPPLY_STATUS_FULL;
+		else
+			val->intval = POWER_SUPPLY_STATUS_UNKNOWN;
 		break;
 	case POWER_SUPPLY_PROP_PRESENT:
 		val->intval = acpi_battery_present(battery);

^ permalink raw reply related	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2007-11-19 18:40 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-11-07 23:09 ACPI: Always return valid 'status' from acpi_battery_get_property() Roland Dreier
2007-11-08  8:29 ` Alexey Starikovskiy
2007-11-08 14:42   ` Henrique de Moraes Holschuh
2007-11-19 12:46     ` Alexey Starikovskiy
2007-11-19 18:36       ` Henrique de Moraes Holschuh
2007-11-19 18:41         ` Alexey Starikovskiy

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox