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 <msucha...@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)

Reply via email to