Thread (21 messages) 21 messages, 5 authors, 2019-09-02

Re: [PATCH v6 4/6] powerpc/64: make buildable without CONFIG_COMPAT

From: Christophe Leroy <hidden>
Date: 2019-08-30 20:21:14
Also in: lkml


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 <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
---
  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(-)
[...]
quoted hunk ↗ jump to hunk
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)
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help