[GIT PULL] Please pull powerpc/linux.git powerpc-4.8-6 tag

2016-09-17 Thread Michael Ellerman
Hi Linus,

Please pull some more powerpc fixes for 4.8:

The following changes since commit f077aaf0754bcba0fffdbd925bc12f09cd1e38aa:

  powerpc/mm: Don't alias user region to other regions below PAGE_OFFSET 
(2016-09-08 13:15:33 +1000)

are available in the git repository at:

  git://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux.git 
tags/powerpc-4.8-6

for you to fetch changes up to ed7d9a1d7da6fe7b1c7477dc70e95051583fd60c:

  powerpc/powernv/pci: Fix missed TCE invalidations that should fallback to 
OPAL (2016-09-15 17:05:11 +1000)


powerpc fixes for 4.8 #6

Fixes for code merged this cycle:
 - Fix restore of SPRs upon wake up from hypervisor state loss from Gautham R. 
Shenoy
 - Fix the state of root PE from Gavin Shan
 - Detach from PE on releasing PCI device from Gavin Shan
 - Fix size of NUM_CPU_FTR_KEYS on 32-bit
 - Fix missed TCE invalidations that should fallback to OPAL


Gautham R. Shenoy (1):
  powerpc/powernv: Fix restore of SPRs upon wake up from hypervisor state 
loss

Gavin Shan (2):
  powerpc/powernv: Fix the state of root PE
  powerpc/powernv: Detach from PE on releasing PCI device

Michael Ellerman (2):
  powerpc/kernel: Fix size of NUM_CPU_FTR_KEYS on 32-bit
  powerpc/powernv/pci: Fix missed TCE invalidations that should fallback to 
OPAL

 arch/powerpc/include/asm/cpu_has_feature.h |  2 +-
 arch/powerpc/kernel/idle_book3s.S  | 10 +-
 arch/powerpc/platforms/powernv/pci-ioda.c  | 26 +++---
 3 files changed, 29 insertions(+), 9 deletions(-)


signature.asc
Description: PGP signature


[PATCH v2 08/11] powerpc/tracing: fix compat syscall handling

2016-09-17 Thread Marcin Nowakowski
Adapt the code to make use of new syscall handling interface

Signed-off-by: Marcin Nowakowski 
Cc: Steven Rostedt 
Cc: Ingo Molnar 
Cc: Benjamin Herrenschmidt 
Cc: Paul Mackerras 
Cc: Michael Ellerman 
Cc: linuxppc-dev@lists.ozlabs.org
---
 arch/powerpc/include/asm/ftrace.h | 11 +++
 arch/powerpc/kernel/ftrace.c  |  4 
 2 files changed, 15 insertions(+)

diff --git a/arch/powerpc/include/asm/ftrace.h 
b/arch/powerpc/include/asm/ftrace.h
index 9697a73..d2ea3b6 100644
--- a/arch/powerpc/include/asm/ftrace.h
+++ b/arch/powerpc/include/asm/ftrace.h
@@ -86,6 +86,17 @@ static inline bool arch_syscall_match_sym_name(const char 
*sym, const char *name
return !strcmp(sym + prefix_len + 1, name + prefix_len);
 }
 #endif
+
+#if defined(CONFIG_COMPAT)
+#include 
+#include 
+
+#define ARCH_COMPAT_SYSCALL_NUMBERS_OVERLAP 1
+static inline bool arch_trace_is_compat_syscall(struct pt_regs *regs)
+{
+   return in_compat_syscall();
+}
+#endif /* CONFIG_COMPAT */
 #endif /* CONFIG_FTRACE_SYSCALLS && !__ASSEMBLY__ */
 
 #endif /* _ASM_POWERPC_FTRACE */
diff --git a/arch/powerpc/kernel/ftrace.c b/arch/powerpc/kernel/ftrace.c
index 71f4d07..0764fa5 100644
--- a/arch/powerpc/kernel/ftrace.c
+++ b/arch/powerpc/kernel/ftrace.c
@@ -605,6 +605,10 @@ out:
 #if defined(CONFIG_FTRACE_SYSCALLS) && defined(CONFIG_PPC64)
 unsigned long __init arch_syscall_addr(int nr, bool compat)
 {
+#ifdef CONFIG_COMPAT
+   if (compat)
+   return sys_call_table[nr*2+1];
+#endif
return sys_call_table[nr*2];
 }
 #endif /* CONFIG_FTRACE_SYSCALLS && CONFIG_PPC64 */
-- 
2.7.4



[PATCH v2 03/11] tracing/syscalls: add compat syscall metadata

2016-09-17 Thread Marcin Nowakowski
Now that compat syscalls are properly distinguished from native calls,
we can add metadata for compat syscalls as well.
All the macros used to generate the metadata are the same as for
standard syscalls, but with a compat_ prefix to distinguish them easily.

Signed-off-by: Marcin Nowakowski 
Cc: Steven Rostedt 
Cc: Ingo Molnar 
Cc: Benjamin Herrenschmidt 
Cc: Paul Mackerras 
Cc: Michael Ellerman 
Cc: linuxppc-dev@lists.ozlabs.org
---
 arch/powerpc/include/asm/ftrace.h | 15 +---
 include/linux/compat.h| 74 +++
 kernel/trace/trace_syscalls.c |  8 +++--
 3 files changed, 90 insertions(+), 7 deletions(-)

diff --git a/arch/powerpc/include/asm/ftrace.h 
b/arch/powerpc/include/asm/ftrace.h
index 686c5f7..9697a73 100644
--- a/arch/powerpc/include/asm/ftrace.h
+++ b/arch/powerpc/include/asm/ftrace.h
@@ -73,12 +73,17 @@ struct dyn_arch_ftrace {
 static inline bool arch_syscall_match_sym_name(const char *sym, const char 
*name)
 {
/*
-* Compare the symbol name with the system call name. Skip the .sys or 
.SyS
-* prefix from the symbol name and the sys prefix from the system call 
name and
-* just match the rest. This is only needed on ppc64 since symbol names 
on
-* 32bit do not start with a period so the generic function will work.
+* Compare the symbol name with the system call name. Skip the .sys,
+* .SyS or .compat_sys prefix from the symbol name and the sys prefix
+* from the system call name and just match the rest. This is only
+* needed on ppc64 since symbol names on 32bit do not start with a
+* period so the generic function will work.
 */
-   return !strcmp(sym + 4, name + 3);
+   int prefix_len = 3;
+
+   if (!strncasecmp(name, "compat_", 7))
+   prefix_len = 10;
+   return !strcmp(sym + prefix_len + 1, name + prefix_len);
 }
 #endif
 #endif /* CONFIG_FTRACE_SYSCALLS && !__ASSEMBLY__ */
diff --git a/include/linux/compat.h b/include/linux/compat.h
index f964ef7..9e84c92 100644
--- a/include/linux/compat.h
+++ b/include/linux/compat.h
@@ -30,7 +30,80 @@
 #define __SC_DELOUSE(t,v) ((t)(unsigned long)(v))
 #endif
 
+#ifdef CONFIG_FTRACE_SYSCALLS
+#ifndef __SC_STR_ADECL
+#define __SC_STR_ADECL(t, a)   #a
+#endif
+
+#ifndef __SC_STR_TDECL
+#define __SC_STR_TDECL(t, a)   #t
+#endif
+
+extern struct trace_event_class event_class_syscall_enter;
+extern struct trace_event_class event_class_syscall_exit;
+extern struct trace_event_functions enter_syscall_print_funcs;
+extern struct trace_event_functions exit_syscall_print_funcs;
+
+#define COMPAT_SYSCALL_TRACE_ENTER_EVENT(sname)
\
+   static struct syscall_metadata __syscall_meta_compat_##sname;   
\
+   static struct trace_event_call __used   \
+ event_enter_compat_##sname = {
\
+   .class  = &event_class_syscall_enter,   \
+   {   \
+   .name   = "compat_sys_enter"#sname, 
\
+   },  \
+   .event.funcs= &enter_syscall_print_funcs,   \
+   .data   = (void 
*)&__syscall_meta_compat_##sname,\
+   .flags  = TRACE_EVENT_FL_CAP_ANY,   \
+   };  \
+   static struct trace_event_call __used   \
+ __attribute__((section("_ftrace_events")))\
+*__event_enter_compat_##sname = &event_enter_compat_##sname;
+
+#define COMPAT_SYSCALL_TRACE_EXIT_EVENT(sname) 
\
+   static struct syscall_metadata __syscall_meta_compat_##sname;   
\
+   static struct trace_event_call __used   \
+ event_exit_compat_##sname = { \
+   .class  = &event_class_syscall_exit,\
+   {   \
+   .name   = "compat_sys_exit"#sname,  
\
+   },  \
+   .event.funcs= &exit_syscall_print_funcs,\
+   .data   = (void 
*)&__syscall_meta_compat_##sname,\
+   .flags  = TRACE_EVENT_FL_CAP_ANY,   \
+   };  \
+   static struct trace_event_call __used   \
+ __attribute__((section("_ftrace_events")))\
+   *__event_exit_compat_##sname = &event_exit_compat_##sname;
+
+#define COMPAT_SYSCALL_METADATA(sname, nb, ...)