Commit b8a1bdb1 authored by Alexey Starikovskiy's avatar Alexey Starikovskiy Committed by Len Brown

ACPI: battery: Don't return -EFAIL on broken packages.

Acer BIOS has a bug which is exposed when a dead battery is present.

The package template that is used to describe battery status is
over-written with sane values when the battery is live.
But when the batter is dead, a bogus reference in the template
is used.  In this case, Linux returns a fault, when instead
it should simply return that it doesn't know the missing value.

http://bugzilla.kernel.org/show_bug.cgi?id=8573
http://bugzilla.kernel.org/show_bug.cgi?id=10202Signed-off-by: default avatarAlexey Starikovskiy <astarikovskiy@suse.de>
Signed-off-by: default avatarLen Brown <len.brown@intel.com>
parent bde4f8fa
...@@ -293,13 +293,12 @@ static int extract_package(struct acpi_battery *battery, ...@@ -293,13 +293,12 @@ static int extract_package(struct acpi_battery *battery,
strncpy(ptr, (u8 *)&element->integer.value, strncpy(ptr, (u8 *)&element->integer.value,
sizeof(acpi_integer)); sizeof(acpi_integer));
ptr[sizeof(acpi_integer)] = 0; ptr[sizeof(acpi_integer)] = 0;
} else return -EFAULT; } else
*ptr = 0; /* don't have value */
} else { } else {
if (element->type == ACPI_TYPE_INTEGER) { int *x = (int *)((u8 *)battery + offsets[i].offset);
int *x = (int *)((u8 *)battery + *x = (element->type == ACPI_TYPE_INTEGER) ?
offsets[i].offset); element->integer.value : -1;
*x = element->integer.value;
} else return -EFAULT;
} }
} }
return 0; return 0;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment