On Wednesday 23 September 2015 10:15:42 Sudeep Holla wrote:
On 15/09/15 09:34, Viresh Kumar wrote:
global_lock is defined as an unsigned long and accessing only its lower 32 bits from sysfs is incorrect, as we need to consider other 32 bits for big endian 64 bit systems.
Fix that by making global_lock an u32 instead.
Cc: stable@vger.kernel.org # v4.1+ Signed-off-by: Viresh Kumar viresh.kumar@linaro.org
Its marked just for # v4.1+, because arm64 has the first 64 big-endian platform with ACPI. And ACPI support for that is mainlined recently only (Arnd Bergmann).
Just to clarify, we don't support big-endian with ACPI on ARM64. We mandate use of EFI for ACPI on ARM64 and EFI spec mandates only little endian.
EFI doesn't care what endianess the kernel has, as long as the data structures are interpreted in the same way that the firmware defines them, and I thought that at least UEFI on ARM64 with big-endian is working in principle (if not, that is a bug that should be fixed).
If ACPI is broken with big-endian kernels, we should probably add a Kconfig statement to forbid it, like this:
diff --git a/drivers/acpi/Kconfig b/drivers/acpi/Kconfig index 5d1015c26ff4..06cacc13e3d2 100644 --- a/drivers/acpi/Kconfig +++ b/drivers/acpi/Kconfig @@ -6,6 +6,7 @@ menuconfig ACPI bool "ACPI (Advanced Configuration and Power Interface) Support" depends on !IA64_HP_SIM depends on IA64 || X86 || (ARM64 && EXPERT) + depends on !ARM64 || !CPU_BIG_ENDIAN || BROKEN depends on PCI select PNP default y
Arnd