lkml.org 
[lkml]   [2019]   [Aug]   [30]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    SubjectRe: [PATCH v6 4/6] powerpc/64: make buildable without CONFIG_COMPAT
    From
    Date


    Le 30/08/2019 à 20:57, Michal Suchanek a écrit :
    > There are numerous references to 32bit functions in generic and 64bit
    > code so ifdef them out.
    >
    > Signed-off-by: Michal Suchanek <msuchanek@suse.de>
    > ---
    > v2:
    > - fix 32bit ifdef condition in signal.c
    > - simplify the compat ifdef condition in vdso.c - 64bit is redundant
    > - simplify the compat ifdef condition in callchain.c - 64bit is redundant
    > v3:
    > - use IS_ENABLED and maybe_unused where possible
    > - do not ifdef declarations
    > - clean up Makefile
    > v4:
    > - further makefile cleanup
    > - simplify is_32bit_task conditions
    > - avoid ifdef in condition by using return
    > v5:
    > - avoid unreachable code on 32bit
    > - make is_current_64bit constant on !COMPAT
    > - add stub perf_callchain_user_32 to avoid some ifdefs
    > v6:
    > - consolidate current_is_64bit
    > ---
    > arch/powerpc/include/asm/thread_info.h | 4 +--
    > arch/powerpc/kernel/Makefile | 7 +++--
    > arch/powerpc/kernel/entry_64.S | 2 ++
    > arch/powerpc/kernel/signal.c | 3 +--
    > arch/powerpc/kernel/syscall_64.c | 6 ++---
    > arch/powerpc/kernel/vdso.c | 5 ++--
    > arch/powerpc/perf/callchain.c | 37 +++++++++++++++-----------
    > 7 files changed, 33 insertions(+), 31 deletions(-)
    >

    [...]

    > diff --git a/arch/powerpc/perf/callchain.c b/arch/powerpc/perf/callchain.c
    > index b7cdcce20280..788ad2c63f18 100644
    > --- a/arch/powerpc/perf/callchain.c
    > +++ b/arch/powerpc/perf/callchain.c
    > @@ -15,7 +15,7 @@
    > #include <asm/sigcontext.h>
    > #include <asm/ucontext.h>
    > #include <asm/vdso.h>
    > -#ifdef CONFIG_PPC64
    > +#ifdef CONFIG_COMPAT
    > #include "../kernel/ppc32.h"
    > #endif
    > #include <asm/pte-walk.h>
    > @@ -268,16 +268,6 @@ static void perf_callchain_user_64(struct perf_callchain_entry_ctx *entry,
    > }
    > }
    >
    > -static inline int current_is_64bit(void)
    > -{
    > - /*
    > - * We can't use test_thread_flag() here because we may be on an
    > - * interrupt stack, and the thread flags don't get copied over
    > - * from the thread_info on the main stack to the interrupt stack.
    > - */
    > - return !test_ti_thread_flag(task_thread_info(current), TIF_32BIT);
    > -}
    > -
    > #else /* CONFIG_PPC64 */
    > static int read_user_stack_slow(void __user *ptr, void *buf, int nb)
    > {
    > @@ -314,11 +304,6 @@ static inline void perf_callchain_user_64(struct perf_callchain_entry_ctx *entry
    > {
    > }
    >
    > -static inline int current_is_64bit(void)
    > -{
    > - return 0;
    > -}
    > -
    > static inline int valid_user_sp(unsigned long sp, int is_64)
    > {
    > if (!sp || (sp & 7) || sp > TASK_SIZE - 32)
    > @@ -334,6 +319,7 @@ static inline int valid_user_sp(unsigned long sp, int is_64)
    >
    > #endif /* CONFIG_PPC64 */
    >
    > +#if defined(CONFIG_PPC32) || defined(CONFIG_COMPAT)
    > /*
    > * Layout for non-RT signal frames
    > */
    > @@ -475,6 +461,25 @@ static void perf_callchain_user_32(struct perf_callchain_entry_ctx *entry,
    > sp = next_sp;
    > }
    > }
    > +#else /* 32bit */
    > +static void perf_callchain_user_32(struct perf_callchain_entry_ctx *entry,
    > + struct pt_regs *regs)
    > +{
    > + (void)&read_user_stack_32; /* unused if !COMPAT */

    You don't need that anymore do you ?

    Christophe

    > +}
    > +#endif /* 32bit */
    > +
    > +static inline int current_is_64bit(void)
    > +{
    > + if (!IS_ENABLED(CONFIG_COMPAT))
    > + return IS_ENABLED(CONFIG_PPC64);
    > + /*
    > + * We can't use test_thread_flag() here because we may be on an
    > + * interrupt stack, and the thread flags don't get copied over
    > + * from the thread_info on the main stack to the interrupt stack.
    > + */
    > + return !test_ti_thread_flag(task_thread_info(current), TIF_32BIT);
    > +}
    >
    > void
    > perf_callchain_user(struct perf_callchain_entry_ctx *entry, struct pt_regs *regs)
    >

    \
     
     \ /
      Last update: 2019-08-30 22:21    [W:4.650 / U:0.644 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site