Skip to content

Commit

Permalink
powerpc: simplify patch_instruction_site() and patch_branch_site()
Browse files Browse the repository at this point in the history
Using patch_site_addr() helper, patch_instruction_site() and
patch_branch_site() can be simplified and inlined.

Signed-off-by: Christophe Leroy <christophe.leroy@c-s.fr>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
  • Loading branch information
Christophe Leroy authored and Michael Ellerman committed Dec 19, 2018
1 parent 584dbc7 commit 45090c2
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 18 deletions.
12 changes: 10 additions & 2 deletions arch/powerpc/include/asm/code-patching.h
Original file line number Diff line number Diff line change
Expand Up @@ -33,14 +33,22 @@ unsigned int create_cond_branch(const unsigned int *addr,
int patch_branch(unsigned int *addr, unsigned long target, int flags);
int patch_instruction(unsigned int *addr, unsigned int instr);
int raw_patch_instruction(unsigned int *addr, unsigned int instr);
int patch_instruction_site(s32 *addr, unsigned int instr);
int patch_branch_site(s32 *site, unsigned long target, int flags);

static inline unsigned long patch_site_addr(s32 *site)
{
return (unsigned long)site + *site;
}

static inline int patch_instruction_site(s32 *site, unsigned int instr)
{
return patch_instruction((unsigned int *)patch_site_addr(site), instr);
}

static inline int patch_branch_site(s32 *site, unsigned long target, int flags)
{
return patch_branch((unsigned int *)patch_site_addr(site), target, flags);
}

int instr_is_relative_branch(unsigned int instr);
int instr_is_relative_link_branch(unsigned int instr);
int instr_is_branch_to_addr(const unsigned int *instr, unsigned long addr);
Expand Down
16 changes: 0 additions & 16 deletions arch/powerpc/lib/code-patching.c
Original file line number Diff line number Diff line change
Expand Up @@ -204,22 +204,6 @@ int patch_branch(unsigned int *addr, unsigned long target, int flags)
return patch_instruction(addr, create_branch(addr, target, flags));
}

int patch_branch_site(s32 *site, unsigned long target, int flags)
{
unsigned int *addr;

addr = (unsigned int *)((unsigned long)site + *site);
return patch_instruction(addr, create_branch(addr, target, flags));
}

int patch_instruction_site(s32 *site, unsigned int instr)
{
unsigned int *addr;

addr = (unsigned int *)((unsigned long)site + *site);
return patch_instruction(addr, instr);
}

bool is_offset_in_branch_range(long offset)
{
/*
Expand Down

0 comments on commit 45090c2

Please sign in to comment.