[PATCH 03/14] ARM: fixup_pv_table bug when CPU_ENDIAN_BE8

Russell King - ARM Linux
2013-07-25T10:25:41Z

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.