[PATCH] ARM: mvebu: Fix the operand list in the inline asm of armada_370_xp_pmsu_idle_enter

Jason Cooper jason at lakedaemon.net
Tue Jul 8 05:26:41 PDT 2014


On Fri, Jul 04, 2014 at 04:22:16PM +0200, Gregory CLEMENT wrote:
> In the inline asm part of the function armada_370_xp_pmsu_idle_enter()
> the input operand was used. The intent here was to let the compiler
> choose this register so it could do the optimization it
> needed.
> 
> However an input operand is not supposed to be modified by the inline
> asm code. This can lead to improper generated instructions.
> 
> In some case generated instruction the compiler made the choice to
> reuse the same register to store the return value. But in the assembly
> part this register was modified, so it can lead to return an wrong
> value.
> 
> The fix is to use a clobber. Thanks to this the compiler will know
> that the value of this register will be modified.
> 
> Signed-off-by: Gregory CLEMENT <gregory.clement at free-electrons.com>
> ---
> Hi,
> 
> I found this bug while adding cpu idle support for Armada 370 and only
> recently after rebasing the code on mvebu/soc. So this patch fixes
> something which can really happen even if we didn't notice it on
> Armada XP. Fortunately the code fixed was introduced during this
> release, so there is no need to backport it, just to apply it on
> 3.16-rc.
> 
> Thanks,
> Gregory
> 
>  arch/arm/mach-mvebu/pmsu.c | 10 +++++-----
>  1 file changed, 5 insertions(+), 5 deletions(-)

Applied to mvebu/fixes with Thomas' Reviewed-by.

thx,

Jason.



More information about the linux-arm-kernel mailing list