Thread (14 messages) flat view 14 messages, 3 authors, 2019-11-14

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

Christophe  
I 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
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help