Message ID | 1473319962-27591-1-git-send-email-clg@kaod.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Thu, Sep 08, 2016 at 09:32:42AM +0200, Cédric Le Goater wrote: > From: Benjamin Herrenschmidt <benh@kernel.crashing.org> > > Power ISA 2.x has deleted the rfi instruction and rfid shoud be used > instead on cpus following this instruction set or later. > > This will raise an invalid exception when rfi is used on such > processors: Book3S 64-bit processors. > > Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org> > Reviewed-by: David Gibson <david@gibson.dropbear.id.au> > [clg: the required fix in openbios, commit b747b6acc272 ('ppc: use > rfid when running under a CPU from the 970 family.'), is now > merged in qemu under commit 5cebd885d0d2 ('Update OpenBIOS > images to b747b6a built from submodule.') ] > Signed-off-by: Cédric Le Goater <clg@kaod.org> Applied to ppc-for-2.8, thanks. > --- > target-ppc/translate.c | 9 ++++++--- > 1 file changed, 6 insertions(+), 3 deletions(-) > > Index: qemu-dgibson-for-2.8.git/target-ppc/translate.c > =================================================================== > --- qemu-dgibson-for-2.8.git.orig/target-ppc/translate.c > +++ qemu-dgibson-for-2.8.git/target-ppc/translate.c > @@ -3585,10 +3585,13 @@ static void gen_rfi(DisasContext *ctx) > #if defined(CONFIG_USER_ONLY) > GEN_PRIV; > #else > - /* FIXME: This instruction doesn't exist anymore on 64-bit server > - * processors compliant with arch 2.x, we should remove it there, > - * but we need to fix OpenBIOS not to use it on 970 first > + /* This instruction doesn't exist anymore on 64-bit server > + * processors compliant with arch 2.x > */ > + if (ctx->insns_flags & PPC_SEGMENT_64B) { > + gen_inval_exception(ctx, POWERPC_EXCP_INVAL_INVAL); > + return; > + } > /* Restore CPU state */ > CHK_SV; > gen_update_cfar(ctx, ctx->nip - 4); >
Index: qemu-dgibson-for-2.8.git/target-ppc/translate.c =================================================================== --- qemu-dgibson-for-2.8.git.orig/target-ppc/translate.c +++ qemu-dgibson-for-2.8.git/target-ppc/translate.c @@ -3585,10 +3585,13 @@ static void gen_rfi(DisasContext *ctx) #if defined(CONFIG_USER_ONLY) GEN_PRIV; #else - /* FIXME: This instruction doesn't exist anymore on 64-bit server - * processors compliant with arch 2.x, we should remove it there, - * but we need to fix OpenBIOS not to use it on 970 first + /* This instruction doesn't exist anymore on 64-bit server + * processors compliant with arch 2.x */ + if (ctx->insns_flags & PPC_SEGMENT_64B) { + gen_inval_exception(ctx, POWERPC_EXCP_INVAL_INVAL); + return; + } /* Restore CPU state */ CHK_SV; gen_update_cfar(ctx, ctx->nip - 4);