Commit 344e222e authored by Dan Carpenter's avatar Dan Carpenter Committed by Len Brown

ACPI throttling: fix endian bug in acpi_read_throttling_status()

Using a u64 here creates an endian bug.  We store a u32 number in the
top byte which is a larger number than intended on big endian systems.
There is no reason to use a 64 bit data type here, I guess it was just
an oversight.

I removed the initialization to zero as well.  It's needed with a u64
but with a u32, the variable gets initialized properly inside the call
to acpi_os_read_port().
Signed-off-by: default avatarDan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: default avatarLen Brown <len.brown@intel.com>
parent c264c651
...@@ -769,7 +769,7 @@ static int acpi_read_throttling_status(struct acpi_processor *pr, ...@@ -769,7 +769,7 @@ static int acpi_read_throttling_status(struct acpi_processor *pr,
u64 *value) u64 *value)
{ {
u32 bit_width, bit_offset; u32 bit_width, bit_offset;
u64 ptc_value; u32 ptc_value;
u64 ptc_mask; u64 ptc_mask;
struct acpi_processor_throttling *throttling; struct acpi_processor_throttling *throttling;
int ret = -1; int ret = -1;
...@@ -777,12 +777,11 @@ static int acpi_read_throttling_status(struct acpi_processor *pr, ...@@ -777,12 +777,11 @@ static int acpi_read_throttling_status(struct acpi_processor *pr,
throttling = &pr->throttling; throttling = &pr->throttling;
switch (throttling->status_register.space_id) { switch (throttling->status_register.space_id) {
case ACPI_ADR_SPACE_SYSTEM_IO: case ACPI_ADR_SPACE_SYSTEM_IO:
ptc_value = 0;
bit_width = throttling->status_register.bit_width; bit_width = throttling->status_register.bit_width;
bit_offset = throttling->status_register.bit_offset; bit_offset = throttling->status_register.bit_offset;
acpi_os_read_port((acpi_io_address) throttling->status_register. acpi_os_read_port((acpi_io_address) throttling->status_register.
address, (u32 *) &ptc_value, address, &ptc_value,
(u32) (bit_width + bit_offset)); (u32) (bit_width + bit_offset));
ptc_mask = (1 << bit_width) - 1; ptc_mask = (1 << bit_width) - 1;
*value = (u64) ((ptc_value >> bit_offset) & ptc_mask); *value = (u64) ((ptc_value >> bit_offset) & ptc_mask);
......
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