[PATCH 03/14] ARM: fixup_pv_table bug when CPU_ENDIAN_BE8
Russell King - ARM Linux
linux at arm.linux.org.uk
Thu Jul 25 06:25:41 EDT 2013
On Thu, Jul 25, 2013 at 11:14:42AM +0100, Will Deacon wrote:
> What's wrong with the following?
Is this like a challenge to find the silly mistake?
> @@ -581,8 +581,13 @@ __fixup_a_pv_table:
> b 2f
> 1: add r7, r3
> ldrh ip, [r7, #2]
> +#ifdef CONFIG_CPU_ENDIAN_BE8
> + and ip, 0x008f
> + orr ip, ip, r6, lsl #24
> +#else
> and ip, 0x8f00
> orr ip, r6 @ mask in offset bits 31-24
> +#endif
> strh ip, [r7, #2]
Well, ip is being loaded/stored as 16bit, but you're putting r6 in to
ip's bits 31-24, which are going to be ignored by the following strh.
The comment "@ mask in offset bits 31-24" refers to the physical address
bits here, which are already pre-shifted to bits 7-0 in r6.
More information about the linux-arm-kernel
mailing list