[PATCH 2/2] powerpc: Fix emulation of mfocrf in emulate_step()

Naveen N. Rao naveen.n.rao at linux.vnet.ibm.com
Fri Jun 16 03:27:34 AEST 2017


On 2017/06/15 09:46AM, Anton Blanchard wrote:
> From: Anton Blanchard <anton at samba.org>
> 
> From POWER4 onwards, mfocrf() only places the specified CR field into
> the destination GPR, and the rest of it is set to 0. The PowerPC AS
> from version 3.0 now requires this behaviour.
> 
> The emulation code currently puts the entire CR into the destination GPR.
> Fix it.
> 
> Cc: stable at vger.kernel.org
> Signed-off-by: Anton Blanchard <anton at samba.org>

Acked-by: Naveen N. Rao <naveen.n.rao at linux.vnet.ibm.com>

> ---
>  arch/powerpc/lib/sstep.c | 13 +++++++++++++
>  1 file changed, 13 insertions(+)
> 
> diff --git a/arch/powerpc/lib/sstep.c b/arch/powerpc/lib/sstep.c
> index fb84f51b1f0b..ee33327686ae 100644
> --- a/arch/powerpc/lib/sstep.c
> +++ b/arch/powerpc/lib/sstep.c
> @@ -966,6 +966,19 @@ int analyse_instr(struct instruction_op *op, struct pt_regs *regs,
>  #endif
> 
>  		case 19:	/* mfcr */
> +			if ((instr >> 20) & 1) {
> +				imm = 0xf0000000UL;
> +				for (sh = 0; sh < 8; ++sh) {
> +					if (instr & (0x80000 >> sh)) {
> +						regs->gpr[rd] = regs->ccr & imm;
> +						break;
> +					}
> +					imm >>= 4;
> +				}
> +
> +				goto instr_done;
> +			}
> +
>  			regs->gpr[rd] = regs->ccr;
>  			regs->gpr[rd] &= 0xffffffffUL;
>  			goto instr_done;
> -- 
> 2.11.0
> 



More information about the Linuxppc-dev mailing list