[PATCH 2/6] Allow create_branch() to return errors
Michael Ellerman
michael at ellerman.id.au
Thu Jun 5 13:48:02 EST 2008
On Thu, 2008-05-29 at 16:20 +1000, Michael Ellerman wrote:
> Currently create_branch() creates a branch instruction for you, and patches
> it into the call site. In some circumstances it would be nice to be able to
> create the instruction and patch it later, and also some code might want
> to check for errors in the branch creation before doing the patching. A
> future patch will change create_branch() to check for errors.
>
> For callers that don't care, replace create_branch() with patch_branch(),
> which just creates the branch and patches it directly.
>
> Signed-off-by: Michael Ellerman <michael at ellerman.id.au>
> ---
> arch/powerpc/kernel/crash_dump.c | 4 ++--
> arch/powerpc/lib/code-patching.c | 11 ++++++++---
> arch/powerpc/platforms/86xx/mpc86xx_smp.c | 2 +-
> arch/powerpc/platforms/powermac/smp.c | 2 +-
> include/asm-powerpc/code-patching.h | 5 +++--
> 5 files changed, 15 insertions(+), 9 deletions(-)
>
> diff --git a/arch/powerpc/kernel/crash_dump.c b/arch/powerpc/kernel/crash_dump.c
> index 35b9a66..ee2dac5 100644
> --- a/arch/powerpc/kernel/crash_dump.c
> +++ b/arch/powerpc/kernel/crash_dump.c
> @@ -42,8 +42,8 @@ static void __init create_trampoline(unsigned long addr)
> * branch to "addr" we jump to ("addr" + 32 MB). Although it requires
> * two instructions it doesn't require any registers.
> */
> - create_instruction(addr, 0x60000000); /* nop */
> - create_branch(addr + 4, addr + PHYSICAL_START, 0);
> + patch_instruction(addr, 0x60000000); /* nop */
> + patch_branch(addr + 4, addr + PHYSICAL_START, 0);
> }
>
> void __init setup_kdump_trampoline(void)
> diff --git a/arch/powerpc/lib/code-patching.c b/arch/powerpc/lib/code-patching.c
> index 7afae88..1391981 100644
> --- a/arch/powerpc/lib/code-patching.c
> +++ b/arch/powerpc/lib/code-patching.c
> @@ -11,7 +11,7 @@
> #include <asm/code-patching.h>
>
>
> -void create_instruction(unsigned long addr, unsigned int instr)
> +void patch_instruction(unsigned long addr, unsigned int instr)
> {
> unsigned int *p;
> p = (unsigned int *)addr;
Reviewing my own patches again .. this should take an unsigned int *
instead of an unsigned long.
I'll repost sometime.
cheers
--
Michael Ellerman
OzLabs, IBM Australia Development Lab
wwweb: http://michael.ellerman.id.au
phone: +61 2 6212 1183 (tie line 70 21183)
We do not inherit the earth from our ancestors,
we borrow it from our children. - S.M.A.R.T Person
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: This is a digitally signed message part
URL: <http://lists.ozlabs.org/pipermail/linuxppc-dev/attachments/20080605/24ff70e2/attachment.pgp>
More information about the Linuxppc-dev
mailing list