[PATCH 4/7] ARM: cache-v7: optimise branches in v7_flush_cache_louis

Arnd Bergmann arnd at arndb.de
Thu Apr 9 01:13:06 PDT 2015


On Friday 03 April 2015 11:54:32 Russell King wrote:
> diff --git a/arch/arm/mm/cache-v7.S b/arch/arm/mm/cache-v7.S
> index 5b5d0c00bca7..793d061b4dce 100644
> --- a/arch/arm/mm/cache-v7.S
> +++ b/arch/arm/mm/cache-v7.S
> @@ -93,17 +93,18 @@ ENTRY(v7_flush_dcache_louis)
>  ALT_SMP(mov	r3, r0, lsr #20)		@ move LoUIS into position
>  ALT_UP(	mov	r3, r0, lsr #26)		@ move LoUU into position
>  	ands	r3, r3, #7 << 1 		@ extract LoU*2 field from clidr
> +	bne	start_flush_levels		@ LoU != 0, start flushing
>  #ifdef CONFIG_ARM_ERRATA_643719
> -	ALT_SMP(mrceq	p15, 0, r2, c0, c0, 0)	@ read main ID register
> -	ALT_UP(reteq	lr)			@ LoUU is zero, so nothing to do
> -	movweq	r1, #:lower16:0x410fc090	@ ID of ARM Cortex A9 r0p?
> -	movteq	r1, #:upper16:0x410fc090
> -	biceq	r2, r2, #0x0000000f             @ clear minor revision number
> -	teqeq	r2, r1                          @ test for errata affected core and if so...
> -	moveqs	r3, #1 << 1			@   fix LoUIS value (and set flags state to 'ne')
> +ALT_SMP(mrc	p15, 0, r2, c0, c0, 0)		@ read main ID register
> +ALT_UP(	ret	lr)				@ LoUU is zero, so nothing to do
> +	movw	r1, #:lower16:0x410fc090	@ ID of ARM Cortex A9 r0p?

With this in linux-next, I get a build failure on randconfig kernels with
THUMB2_KERNEL enabled:

arch/arm/mm/cache-v7.S: Assembler messages:
arch/arm/mm/cache-v7.S:99: Error: ALT_UP() content must assemble to exactly 4 bytes

Any idea for a method that will work with all combinations of SMP/UP
and ARM/THUMB? The best I could come up with was to add an extra 'mov r0,r0',
but that gets rather ugly as you then have to do it only for THUMB2.

	Arnd



More information about the linux-arm-kernel mailing list