powerpc/security: Use PPC_RAW_BLR() and PPC_RAW_NOP()
On the road to remove all use of PPC_INST_xxx, replace PPC_INST_BLR by PPC_RAW_BLR(). Same for PPC_INST_NOP. Signed-off-by: Christophe Leroy <christophe.leroy@csgroup.eu> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au> Link: https://lore.kernel.org/r/c04f88d0e53d2122fbbe92226892a01ebc668b6a.1621506159.git.christophe.leroy@csgroup.eu
This commit is contained in:
parent
47b04699d0
commit
e730459756
@ -289,7 +289,6 @@
|
||||
#define PPC_INST_MFLR 0x7c0802a6
|
||||
#define PPC_INST_ADDIS 0x3c000000
|
||||
#define PPC_INST_ADD 0x7c000214
|
||||
#define PPC_INST_BLR 0x4e800020
|
||||
#define PPC_INST_DIVD 0x7c0003d2
|
||||
#define PPC_INST_RLDICR 0x78000004
|
||||
#define PPC_INST_ORI 0x60000000
|
||||
@ -478,7 +477,7 @@
|
||||
#define PPC_RAW_ADDC(t, a, b) (0x7c000014 | ___PPC_RT(t) | ___PPC_RA(a) | ___PPC_RB(b))
|
||||
#define PPC_RAW_ADDC_DOT(t, a, b) (0x7c000014 | ___PPC_RT(t) | ___PPC_RA(a) | ___PPC_RB(b) | 0x1)
|
||||
#define PPC_RAW_NOP() (PPC_INST_NOP)
|
||||
#define PPC_RAW_BLR() (PPC_INST_BLR)
|
||||
#define PPC_RAW_BLR() (0x4e800020)
|
||||
#define PPC_RAW_BLRL() (0x4e800021)
|
||||
#define PPC_RAW_MTLR(r) (0x7c0803a6 | ___PPC_RT(r))
|
||||
#define PPC_RAW_MFLR(t) (PPC_INST_MFLR | ___PPC_RT(t))
|
||||
|
@ -438,7 +438,7 @@ static void update_branch_cache_flush(void)
|
||||
site = &patch__call_kvm_flush_link_stack;
|
||||
// This controls the branch from guest_exit_cont to kvm_flush_link_stack
|
||||
if (link_stack_flush_type == BRANCH_CACHE_FLUSH_NONE) {
|
||||
patch_instruction_site(site, ppc_inst(PPC_INST_NOP));
|
||||
patch_instruction_site(site, ppc_inst(PPC_RAW_NOP()));
|
||||
} else {
|
||||
// Could use HW flush, but that could also flush count cache
|
||||
patch_branch_site(site, (u64)&kvm_flush_link_stack, BRANCH_SET_LINK);
|
||||
@ -447,11 +447,11 @@ static void update_branch_cache_flush(void)
|
||||
|
||||
// Patch out the bcctr first, then nop the rest
|
||||
site = &patch__call_flush_branch_caches3;
|
||||
patch_instruction_site(site, ppc_inst(PPC_INST_NOP));
|
||||
patch_instruction_site(site, ppc_inst(PPC_RAW_NOP()));
|
||||
site = &patch__call_flush_branch_caches2;
|
||||
patch_instruction_site(site, ppc_inst(PPC_INST_NOP));
|
||||
patch_instruction_site(site, ppc_inst(PPC_RAW_NOP()));
|
||||
site = &patch__call_flush_branch_caches1;
|
||||
patch_instruction_site(site, ppc_inst(PPC_INST_NOP));
|
||||
patch_instruction_site(site, ppc_inst(PPC_RAW_NOP()));
|
||||
|
||||
// This controls the branch from _switch to flush_branch_caches
|
||||
if (count_cache_flush_type == BRANCH_CACHE_FLUSH_NONE &&
|
||||
@ -474,12 +474,12 @@ static void update_branch_cache_flush(void)
|
||||
// If we just need to flush the link stack, early return
|
||||
if (count_cache_flush_type == BRANCH_CACHE_FLUSH_NONE) {
|
||||
patch_instruction_site(&patch__flush_link_stack_return,
|
||||
ppc_inst(PPC_INST_BLR));
|
||||
ppc_inst(PPC_RAW_BLR()));
|
||||
|
||||
// If we have flush instruction, early return
|
||||
} else if (count_cache_flush_type == BRANCH_CACHE_FLUSH_HW) {
|
||||
patch_instruction_site(&patch__flush_count_cache_return,
|
||||
ppc_inst(PPC_INST_BLR));
|
||||
ppc_inst(PPC_RAW_BLR()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user