* [PATCH 1/2] powerpc/sstep: Fix issues with set_cr0()
@ 2017-09-19 10:45 Anton Blanchard
2017-09-19 10:45 ` [PATCH 2/2] powerpc/sstep: Fix issues with mcrf Anton Blanchard
2017-09-21 1:46 ` [1/2] powerpc/sstep: Fix issues with set_cr0() Michael Ellerman
0 siblings, 2 replies; 3+ messages in thread
From: Anton Blanchard @ 2017-09-19 10:45 UTC (permalink / raw)
To: benh, paulus, mpe; +Cc: linuxppc-dev
From: Anton Blanchard <anton@samba.org>
set_cr0() broke when we changed analyse_instr() to not modify the
register state. Instead of looking at regs->gpr[x] which has not
been updated yet, we need to look at op->val.
Fixes: 3cdfcbfd32b9 ("powerpc: Change analyse_instr so it doesn't modify *regs")
Signed-off-by: Anton Blanchard <anton@samba.org>
---
arch/powerpc/lib/sstep.c | 14 +++++++-------
1 file changed, 7 insertions(+), 7 deletions(-)
diff --git a/arch/powerpc/lib/sstep.c b/arch/powerpc/lib/sstep.c
index fb9f58b868e7..9d72e5900320 100644
--- a/arch/powerpc/lib/sstep.c
+++ b/arch/powerpc/lib/sstep.c
@@ -944,9 +944,9 @@ NOKPROBE_SYMBOL(emulate_dcbz);
: "r" (addr), "i" (-EFAULT), "0" (err))
static nokprobe_inline void set_cr0(const struct pt_regs *regs,
- struct instruction_op *op, int rd)
+ struct instruction_op *op)
{
- long val = regs->gpr[rd];
+ long val = op->val;
op->type |= SETCC;
op->ccval = (regs->ccr & 0x0fffffff) | ((regs->xer >> 3) & 0x10000000);
@@ -1326,7 +1326,7 @@ int analyse_instr(struct instruction_op *op, const struct pt_regs *regs,
case 13: /* addic. */
imm = (short) instr;
add_with_carry(regs, op, rd, regs->gpr[ra], imm, 0);
- set_cr0(regs, op, rd);
+ set_cr0(regs, op);
return 1;
case 14: /* addi */
@@ -1397,13 +1397,13 @@ int analyse_instr(struct instruction_op *op, const struct pt_regs *regs,
case 28: /* andi. */
op->val = regs->gpr[rd] & (unsigned short) instr;
- set_cr0(regs, op, ra);
+ set_cr0(regs, op);
goto logical_done_nocc;
case 29: /* andis. */
imm = (unsigned short) instr;
op->val = regs->gpr[rd] & (imm << 16);
- set_cr0(regs, op, ra);
+ set_cr0(regs, op);
goto logical_done_nocc;
#ifdef __powerpc64__
@@ -2526,7 +2526,7 @@ int analyse_instr(struct instruction_op *op, const struct pt_regs *regs,
logical_done:
if (instr & 1)
- set_cr0(regs, op, ra);
+ set_cr0(regs, op);
logical_done_nocc:
op->reg = ra;
op->type |= SETREG;
@@ -2534,7 +2534,7 @@ int analyse_instr(struct instruction_op *op, const struct pt_regs *regs,
arith_done:
if (instr & 1)
- set_cr0(regs, op, rd);
+ set_cr0(regs, op);
compute_done:
op->reg = rd;
op->type |= SETREG;
--
2.11.0
^ permalink raw reply related [flat|nested] 3+ messages in thread
* [PATCH 2/2] powerpc/sstep: Fix issues with mcrf
2017-09-19 10:45 [PATCH 1/2] powerpc/sstep: Fix issues with set_cr0() Anton Blanchard
@ 2017-09-19 10:45 ` Anton Blanchard
2017-09-21 1:46 ` [1/2] powerpc/sstep: Fix issues with set_cr0() Michael Ellerman
1 sibling, 0 replies; 3+ messages in thread
From: Anton Blanchard @ 2017-09-19 10:45 UTC (permalink / raw)
To: benh, paulus, mpe; +Cc: linuxppc-dev
From: Anton Blanchard <anton@samba.org>
mcrf broke when we changed analyse_instr() to not modify the register
state. The instruction writes to the CR, so we need to store the result
in op->ccval, not op->val.
Fixes: 3cdfcbfd32b9 ("powerpc: Change analyse_instr so it doesn't modify *regs")
Signed-off-by: Anton Blanchard <anton@samba.org>
---
arch/powerpc/lib/sstep.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/arch/powerpc/lib/sstep.c b/arch/powerpc/lib/sstep.c
index 9d72e5900320..c4cda1afb49d 100644
--- a/arch/powerpc/lib/sstep.c
+++ b/arch/powerpc/lib/sstep.c
@@ -1513,10 +1513,10 @@ int analyse_instr(struct instruction_op *op, const struct pt_regs *regs,
op->type = COMPUTE + SETCC;
imm = 0xf0000000UL;
val = regs->gpr[rd];
- op->val = regs->ccr;
+ op->ccval = regs->ccr;
for (sh = 0; sh < 8; ++sh) {
if (instr & (0x80000 >> sh))
- op->val = (op->val & ~imm) |
+ op->ccval = (op->ccval & ~imm) |
(val & imm);
imm >>= 4;
}
--
2.11.0
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [1/2] powerpc/sstep: Fix issues with set_cr0()
2017-09-19 10:45 [PATCH 1/2] powerpc/sstep: Fix issues with set_cr0() Anton Blanchard
2017-09-19 10:45 ` [PATCH 2/2] powerpc/sstep: Fix issues with mcrf Anton Blanchard
@ 2017-09-21 1:46 ` Michael Ellerman
1 sibling, 0 replies; 3+ messages in thread
From: Michael Ellerman @ 2017-09-21 1:46 UTC (permalink / raw)
To: Anton Blanchard, benh, paulus; +Cc: linuxppc-dev
On Tue, 2017-09-19 at 10:45:52 UTC, Anton Blanchard wrote:
> From: Anton Blanchard <anton@samba.org>
>
> set_cr0() broke when we changed analyse_instr() to not modify the
> register state. Instead of looking at regs->gpr[x] which has not
> been updated yet, we need to look at op->val.
>
> Fixes: 3cdfcbfd32b9 ("powerpc: Change analyse_instr so it doesn't modify *regs")
> Signed-off-by: Anton Blanchard <anton@samba.org>
Series applied to powerpc fixes, thanks.
https://git.kernel.org/powerpc/c/ad47ff3e33503e0969db2d4f9a4094
cheers
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2017-09-21 1:46 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-09-19 10:45 [PATCH 1/2] powerpc/sstep: Fix issues with set_cr0() Anton Blanchard
2017-09-19 10:45 ` [PATCH 2/2] powerpc/sstep: Fix issues with mcrf Anton Blanchard
2017-09-21 1:46 ` [1/2] powerpc/sstep: Fix issues with set_cr0() Michael Ellerman
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).