Re: [PATCH v8 5/7] powerpc/64: make buildable without CONFIG_COMPAT
From: Michal Suchánek <hidden>
Date: 2019-09-12 20:19:55
Also in:
linux-fsdevel, lkml
On Thu, 12 Sep 2019 21:36:11 +0200 Christophe Leroy [off-list ref] wrote:
Le 12/09/2019 à 20:26, Michal Suchánek a écrit :quoted
On Thu, 12 Sep 2019 20:02:16 +0200 Christophe Leroy [off-list ref] wrote:quoted
Le 12/09/2019 à 19:26, Michal Suchanek a écrit :quoted
There are numerous references to 32bit functions in generic and 64bit code so ifdef them out. Signed-off-by: Michal Suchanek <redacted> --- 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 v7: - remove leftover perf_callchain_user_32 stub from previous series version v8: - fix build again - too trigger-happy with stub removal - remove a vdso.c hunk that causes warning according to kbuild test robot --- 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 | 3 +- arch/powerpc/perf/callchain.c | 39 ++++++++++++++------------ 7 files changed, 33 insertions(+), 31 deletions(-)diff --git a/arch/powerpc/include/asm/thread_info.h b/arch/powerpc/include/asm/thread_info.h index 8e1d0195ac36..c128d8a48ea3 100644 --- a/arch/powerpc/include/asm/thread_info.h +++ b/arch/powerpc/include/asm/thread_info.h@@ -144,10 +144,10 @@ static inline bool test_thread_local_flags(unsigned int flags) return (ti->local_flags & flags) != 0; } -#ifdef CONFIG_PPC64 +#ifdef CONFIG_COMPAT #define is_32bit_task() (test_thread_flag(TIF_32BIT)) #else -#define is_32bit_task() (1) +#define is_32bit_task() (IS_ENABLED(CONFIG_PPC32)) #endif #if defined(CONFIG_PPC64)[...]quoted
+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); +}Since at least commit ed1cd6deb013 ("powerpc: Activate CONFIG_THREAD_INFO_IN_TASK") [https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=ed1cd6d] the above comment is wrong and current_is_64bit() is equivalent to !is_32bit_task() See https://github.com/linuxppc/issues/issues/275 ChristopheI aim at changing the code as little as possible here. A separate patch on top removing this function would be ok?Yes I agree. By making prior to this patch a separate patch which drops current_is_64bit() would be good. And it would reduce the size of this patch by approximately one third.
Indeed, removing it before makes this patch much cleaner. Thanks Michal