[PATCH] arm64: mm: Fix operands of clz in __flush_dcache_all
Catalin Marinas
catalin.marinas at arm.com
Tue May 14 06:25:36 EDT 2013
On Tue, May 14, 2013 at 10:26:54AM +0100, Anup Patel wrote:
> From: Sukanto Ghosh <sghosh at apm.com>
>
> The format of the lower 32-bits of the 64-bit operand to 'dc cisw' is
> unchanged from ARMv7 architecture and the upper bits are RES0. This
> implies that the 'way' field of the operand of 'dc cisw' occupies the
> bit-positions [31 .. (32-A)]. Due to the use of 64-bit extended operands
> to 'clz', the existing implementation of __flush_dcache_all is incorrectly
> placing the 'way' field in the bit-positions [63 .. (64-A)].
>
> Signed-off-by: Sukanto Ghosh <sghosh at apm.com>
> Tested-by: Anup Patel <anup.patel at linaro.org>
> ---
> arch/arm64/mm/cache.S | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/arch/arm64/mm/cache.S b/arch/arm64/mm/cache.S
> index abe69b8..48a3860 100644
> --- a/arch/arm64/mm/cache.S
> +++ b/arch/arm64/mm/cache.S
> @@ -52,7 +52,7 @@ loop1:
> add x2, x2, #4 // add 4 (line length offset)
> mov x4, #0x3ff
> and x4, x4, x1, lsr #3 // find maximum number on the way size
> - clz x5, x4 // find bit position of way size increment
> + clz w5, w4 // find bit position of way size increment
> mov x7, #0x7fff
> and x7, x7, x1, lsr #13 // extract max number of the index size
> loop2:
Good catch. I'll queue it for 3.10-rc2.
Thanks.
--
Catalin
More information about the linux-arm-kernel
mailing list