ACPI, APEI: Cleanup alignment related codes for APEI
Subsystems (3)
PATCH 1/1 ACPI, APEI: Cleanup alignment related codes for APEI
We ever used *memcpy* to avoid access alignment issue between firmware and OS. Now we can use a better and standard way to avoid this issue. No functional changes.
--- drivers/acpi/apei/apei-base.c | 4 ++-- drivers/acpi/apei/einj.c | 19 +++++++++---------- drivers/acpi/apei/erst.c | 2 +- 3 files changed, 12 insertions(+), 13 deletions(-)
drivers/acpi/apei/apei-base.c +2 -2
@@ -41,6 +41,7 @@#include <linux/rculist.h> #include <linux/interrupt.h> #include <linux/debugfs.h> +#include <asm/unaligned.h> #include "apei-internal.h"
@@ -567,8 +568,7 @@ static int apei_check_gar(struct acpi_generic_address *reg, u64 *paddr, bit_offset = reg->bit_offset; access_size_code = reg->access_width; space_id = reg->space_id; -/* Handle possible alignment issues */ -memcpy (paddr, ®->address,sizeof (*paddr)); + paddr =get_unaligned (®->address);if (!*paddr) { pr_warning(FW_BUG APEI_PFX "Invalid physical address in GAR [0x%llx/%u/%u/%u/%u]\n",
drivers/acpi/apei/einj.c +9 -10
@@ -34,6 +34,7 @@#include <linux/delay.h> #include <linux/mm.h> #include <acpi/acpi.h> +#include <asm/unaligned.h> #include "apei-internal.h"
@@ -216,7 +217,7 @@ static void check_vendor_extension(u64 paddr,static void *einj_get_parameter_address (void ) {int i; -u64 paddrv4 =0 , paddrv5 =0 ; +u64 pa_v4 =0 , pa_v5 =0 ;struct acpi_whea_header *entry; entry =EINJ_TAB_ENTRY (einj_tab);
@@ -225,30 +226,28 @@ static void *einj_get_parameter_address(void) entry->instruction == ACPI_EINJ_WRITE_REGISTER && entry->register_region.space_id == ACPI_ADR_SPACE_SYSTEM_MEMORY) -memcpy (&paddrv4, &entry->register_region.address, -sizeof (paddrv4)); + pa_v4 =get_unaligned (&entry->register_region.address);if (entry->action ==ACPI_EINJ_SET_ERROR_TYPE_WITH_ADDRESS && entry->instruction ==ACPI_EINJ_WRITE_REGISTER && entry->register_region.space_id ==ACPI_ADR_SPACE_SYSTEM_MEMORY ) -memcpy (&paddrv5, &entry->register_region.address, -sizeof (paddrv5)); + pa_v5 =get_unaligned (&entry->register_region.address); entry++; } -if (paddrv5) { +if (pa_v5) {struct set_error_type_with_address *v5param; - v5param =acpi_os_map_memory (paddrv5,sizeof (*v5param)); + v5param =acpi_os_map_memory (pa_v5,sizeof (*v5param));if (v5param) { acpi5 =1 ; -check_vendor_extension (paddrv5, v5param); +check_vendor_extension (pa_v5, v5param);return v5param; } } -if (param_extension && paddrv4) { +if (param_extension && pa_v4) {struct einj_parameter *v4param; - v4param =acpi_os_map_memory (paddrv4,sizeof (*v4param)); + v4param =acpi_os_map_memory (pa_v4,sizeof (*v4param));if (!v4param)return NULL ;if (v4param->reserved1 || v4param->reserved2) {
drivers/acpi/apei/erst.c +1 -1
@@ -611,7 +611,7 @@ static void __erst_record_id_cache_compact(void)if (entries[i] ==APEI_ERST_INVALID_RECORD_ID )continue ;if (wpos != i) -memcpy (&entries[wpos], &entries[i],sizeof (entries[i])); + entries[wpos] = entries[i]; wpos++; } erst_record_id_cache.len = wpos;
Signature · 1 line
1.8.4.rc3
Luck, Tony
reviewerQuoted 3 lines
We ever used *memcpy* to avoid access alignment issue between firmware and OS. Now we can use a better and standard way to avoid this issue. No functional changes.
There are some other cleanups in here (changing variable names, using structure assignment instead of memcpy). Commit message should describe them all, not just the change that you started out to make.
-Tony
Quoted 10 lines · Tony
Date: Thu, 7 Nov 2013 20:51:32 +0000
From: "Luck, Tony" <[email protected]>
To: "Chen, Gong" <[email protected]>, "[email protected]" <[email protected]>
CC: "[email protected]" <[email protected]>
Subject: RE: [PATCH] ACPI, APEI: Cleanup alignment related codes for APEIQuoted 3 lines
We ever used *memcpy* to avoid access alignment issue between firmware and OS. Now we can use a better and standard way to avoid this issue. No functional changes.
Quoted 6 lines
There are some other cleanups in here (changing variable names, using structure assignment instead of memcpy). Commit message should describe them all, not just the change that you started out to make.
-Tony
How about this:
We ever used *memcpy* to avoid access alignment issue between firmware and OS. Now we can use a better and standard way to avoid this issue. In the meanwhile, simplify some variable names to avoid the limit of 80 characters per line and use structure assignment instead of unnecessary memcpy. No functional changes.