In preparation for using an instruction data type that can not be used directly with the '&' operator, use a function to mask instructions.
Signed-off-by: Jordan Niethe <jniet...@gmail.com> --- v4: New to series --- arch/powerpc/include/asm/sstep.h | 6 +++--- arch/powerpc/kernel/align.c | 2 +- arch/powerpc/kernel/trace/ftrace.c | 8 ++++---- arch/powerpc/lib/code-patching.c | 12 ++++++------ 4 files changed, 14 insertions(+), 14 deletions(-) diff --git a/arch/powerpc/include/asm/sstep.h b/arch/powerpc/include/asm/sstep.h index 9353916fcba7..ef5483288920 100644 --- a/arch/powerpc/include/asm/sstep.h +++ b/arch/powerpc/include/asm/sstep.h @@ -16,9 +16,9 @@ struct pt_regs; * Note that IS_MTMSRD returns true for both an mtmsr (32-bit) * and an mtmsrd (64-bit). */ -#define IS_MTMSRD(instr) (((instr) & 0xfc0007be) == 0x7c000124) -#define IS_RFID(instr) (((instr) & 0xfc0007fe) == 0x4c000024) -#define IS_RFI(instr) (((instr) & 0xfc0007fe) == 0x4c000064) +#define IS_MTMSRD(instr) ((ppc_inst_mask((instr), 0xfc0007be) == 0x7c000124)) +#define IS_RFID(instr) ((ppc_inst_mask((instr), 0xfc0007fe) == 0x4c000024)) +#define IS_RFI(instr) ((ppc_inst_mask((instr), 0xfc0007fe) == 0x4c000064)) enum instruction_type { COMPUTE, /* arith/logical/CR op, etc. */ diff --git a/arch/powerpc/kernel/align.c b/arch/powerpc/kernel/align.c index 6008f14a145b..38542fffa179 100644 --- a/arch/powerpc/kernel/align.c +++ b/arch/powerpc/kernel/align.c @@ -331,7 +331,7 @@ int fix_alignment(struct pt_regs *regs) * when pasting to a co-processor. Furthermore, paste_last is the * synchronisation point for preceding copy/paste sequences. */ - if ((instr & 0xfc0006fe) == (PPC_INST_COPY & 0xfc0006fe)) + if (ppc_inst_mask(instr, 0xfc0006fe) == (PPC_INST_COPY & 0xfc0006fe)) return -EIO; r = analyse_instr(&op, regs, instr); diff --git a/arch/powerpc/kernel/trace/ftrace.c b/arch/powerpc/kernel/trace/ftrace.c index 380f1ce77715..b189a34baaa2 100644 --- a/arch/powerpc/kernel/trace/ftrace.c +++ b/arch/powerpc/kernel/trace/ftrace.c @@ -98,19 +98,19 @@ static ppc_inst test_24bit_addr(unsigned long ip, unsigned long addr) static int is_bl_op(ppc_inst op) { - return (op & 0xfc000003) == 0x48000001; + return ppc_inst_mask(op, 0xfc000003) == 0x48000001; } static int is_b_op(ppc_inst op) { - return (op & 0xfc000003) == 0x48000000; + return ppc_inst_mask(op, 0xfc000003) == 0x48000000; } static unsigned long find_bl_target(unsigned long ip, ppc_inst op) { int offset; - offset = (op & 0x03fffffc); + offset = ppc_inst_mask(op, 0x03fffffc); /* make it signed */ if (offset & 0x02000000) offset |= 0xfe000000; @@ -494,7 +494,7 @@ expected_nop_sequence(void *ip, ppc_inst op0, ppc_inst op1) * The load offset is different depending on the ABI. For simplicity * just mask it out when doing the compare. */ - if ((op0 != 0x48000008) || ((op1 & 0xffff0000) != 0xe8410000)) + if ((op0 != 0x48000008) || (ppc_inst_mask(op1, 0xffff0000) != 0xe8410000)) return 0; return 1; } diff --git a/arch/powerpc/lib/code-patching.c b/arch/powerpc/lib/code-patching.c index 5d69e836337d..e2ba23fd6f4d 100644 --- a/arch/powerpc/lib/code-patching.c +++ b/arch/powerpc/lib/code-patching.c @@ -301,7 +301,7 @@ static int instr_is_branch_bform(ppc_inst instr) int instr_is_relative_branch(ppc_inst instr) { - if (instr & BRANCH_ABSOLUTE) + if (ppc_inst_mask(instr, BRANCH_ABSOLUTE)) return 0; return instr_is_branch_iform(instr) || instr_is_branch_bform(instr); @@ -309,20 +309,20 @@ int instr_is_relative_branch(ppc_inst instr) int instr_is_relative_link_branch(ppc_inst instr) { - return instr_is_relative_branch(instr) && (instr & BRANCH_SET_LINK); + return instr_is_relative_branch(instr) && ppc_inst_mask(instr, BRANCH_SET_LINK); } static unsigned long branch_iform_target(const ppc_inst *instr) { signed long imm; - imm = *instr & 0x3FFFFFC; + imm = ppc_inst_mask(*instr, 0x3FFFFFC); /* If the top bit of the immediate value is set this is negative */ if (imm & 0x2000000) imm -= 0x4000000; - if ((*instr & BRANCH_ABSOLUTE) == 0) + if ((ppc_inst_mask(*instr, BRANCH_ABSOLUTE)) == 0) imm += (unsigned long)instr; return (unsigned long)imm; @@ -332,13 +332,13 @@ static unsigned long branch_bform_target(const ppc_inst *instr) { signed long imm; - imm = *instr & 0xFFFC; + imm = ppc_inst_mask(*instr, 0xFFFC); /* If the top bit of the immediate value is set this is negative */ if (imm & 0x8000) imm -= 0x10000; - if ((*instr & BRANCH_ABSOLUTE) == 0) + if ((ppc_inst_mask(*instr, BRANCH_ABSOLUTE)) == 0) imm += (unsigned long)instr; return (unsigned long)imm; -- 2.17.1