13 Jun 2012 09:39
[RFC] ACPI, APEI: Fix incorrect bit width + offset check condition
Xiao, Hui <hui.xiao <at> linux.intel.com>
2012-06-13 07:39:44 GMT
2012-06-13 07:39:44 GMT
Fix the incorrect bit width + offset check condition in apei_check_gar()
function introduced by commit v3.3-5-g15afae6.
The bug caused regression on EINJ error injection with errors:
[Firmware Bug]: APEI: Invalid bit width + offset in GAR [0x1121a5000/64/0/3/0]
on a valid address region of:
- Register bit width: 64 bits
- Register bit offset: 0
- Access Size: 03 [DWord Access: 32]
Signed-off-by: Xiao, Hui <hui.xiao <at> linux.intel.com>
Signed-off-by: Chen Gong <gong.chen <at> linux.intel.com>
---
drivers/acpi/apei/apei-base.c | 7 +++++--
1 files changed, 5 insertions(+), 2 deletions(-)
diff --git a/drivers/acpi/apei/apei-base.c b/drivers/acpi/apei/apei-base.c
index 5577762..95e07b2 100644
--- a/drivers/acpi/apei/apei-base.c
+++ b/drivers/acpi/apei/apei-base.c
<at> <at> -586,9 +586,12 <at> <at> static int apei_check_gar(struct acpi_generic_address *reg, u64 *paddr,
}
*access_bit_width = 1UL << (access_size_code + 2);
- if ((bit_width + bit_offset) > *access_bit_width) {
+ /* bit_width and bit_offset must be zero when addressing a data
+ * structure. So just check for non-zero case here */
+ if ((bit_width != 0 && *access_bit_width > bit_width) ||
(Continue reading)
RSS Feed