lkml.org 
[lkml]   [2016]   [Mar]   [2]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v3 1/8] powerpc: Create a helper for getting the kernel toc value
    Date
    Move the logic to work out the kernel toc pointer into a header. This is
    a good cleanup, and also means we can use it elsewhere in future.

    Reviewed-by: Kamalesh Babulal <kamalesh@linux.vnet.ibm.com>
    Reviewed-by: Torsten Duwe <duwe@suse.de>
    Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
    ---
    arch/powerpc/include/asm/sections.h | 12 ++++++++++++
    arch/powerpc/kernel/paca.c | 11 +----------
    2 files changed, 13 insertions(+), 10 deletions(-)

    v3: No change.
    v2: New.

    diff --git a/arch/powerpc/include/asm/sections.h b/arch/powerpc/include/asm/sections.h
    index a5e930aca804..abf5866e08c6 100644
    --- a/arch/powerpc/include/asm/sections.h
    +++ b/arch/powerpc/include/asm/sections.h
    @@ -22,6 +22,18 @@ static inline int in_kernel_text(unsigned long addr)
    return 0;
    }

    +static inline unsigned long kernel_toc_addr(void)
    +{
    + /* Defined by the linker, see vmlinux.lds.S */
    + extern unsigned long __toc_start;
    +
    + /*
    + * The TOC register (r2) points 32kB into the TOC, so that 64kB of
    + * the TOC can be addressed using a single machine instruction.
    + */
    + return (unsigned long)(&__toc_start) + 0x8000UL;
    +}
    +
    static inline int overlaps_interrupt_vector_text(unsigned long start,
    unsigned long end)
    {
    diff --git a/arch/powerpc/kernel/paca.c b/arch/powerpc/kernel/paca.c
    index 01ea0edf0579..93dae296b6be 100644
    --- a/arch/powerpc/kernel/paca.c
    +++ b/arch/powerpc/kernel/paca.c
    @@ -17,10 +17,6 @@
    #include <asm/pgtable.h>
    #include <asm/kexec.h>

    -/* This symbol is provided by the linker - let it fill in the paca
    - * field correctly */
    -extern unsigned long __toc_start;
    -
    #ifdef CONFIG_PPC_BOOK3S

    /*
    @@ -149,11 +145,6 @@ EXPORT_SYMBOL(paca);

    void __init initialise_paca(struct paca_struct *new_paca, int cpu)
    {
    - /* The TOC register (GPR2) points 32kB into the TOC, so that 64kB
    - * of the TOC can be addressed using a single machine instruction.
    - */
    - unsigned long kernel_toc = (unsigned long)(&__toc_start) + 0x8000UL;
    -
    #ifdef CONFIG_PPC_BOOK3S
    new_paca->lppaca_ptr = new_lppaca(cpu);
    #else
    @@ -161,7 +152,7 @@ void __init initialise_paca(struct paca_struct *new_paca, int cpu)
    #endif
    new_paca->lock_token = 0x8000;
    new_paca->paca_index = cpu;
    - new_paca->kernel_toc = kernel_toc;
    + new_paca->kernel_toc = kernel_toc_addr();
    new_paca->kernelbase = (unsigned long) _stext;
    /* Only set MSR:IR/DR when MMU is initialized */
    new_paca->kernel_msr = MSR_KERNEL & ~(MSR_IR | MSR_DR);
    --
    2.5.0
    \
     
     \ /
      Last update: 2016-03-03 06:01    [W:4.791 / U:0.872 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site