powerpc/tracing: Allow tracing of mmap syscalls
authorBalbir Singh <bsingharora@gmail.com>
Wed, 12 Apr 2017 06:35:19 +0000 (16:35 +1000)
committerMichael Ellerman <mpe@ellerman.id.au>
Wed, 12 Apr 2017 12:32:43 +0000 (22:32 +1000)
Currently sys_mmap() and sys_mmap2() (32-bit only), are not visible to the
syscall tracing machinery. This means users are not able to see the execution of
mmap() syscalls using the syscall tracer.

Fix that by using SYSCALL_DEFINE6 for sys_mmap() and sys_mmap2() so that the
meta-data associated with these syscalls is visible to the syscall tracer.

A side-effect of this change is that the return type has changed from unsigned
long to long. However this should have no effect, the only code in the kernel
which uses the result of these syscalls is in the syscall return path, which is
written in asm and treats the result as unsigned regardless.

Example output:
  cat-3399  [001] ....   196.542410: sys_mmap(addr: 7fff922a0000, len: 20000, prot: 3, flags: 812, fd: 3, offset: 1b0000)
  cat-3399  [001] ....   196.542443: sys_mmap -> 0x7fff922a0000
  cat-3399  [001] ....   196.542668: sys_munmap(addr: 7fff922c0000, len: 6d2c)
  cat-3399  [001] ....   196.542677: sys_munmap -> 0x0

Signed-off-by: Balbir Singh <bsingharora@gmail.com>
[mpe: Massage change log, add detail on return type change]
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
arch/powerpc/include/asm/syscalls.h
arch/powerpc/kernel/syscalls.c

index 23be8f1e7e64bf5b71ee1489b11c22dd9f926a78..16fab68982406f1e772d92be21ee1d3ad866744e 100644 (file)
@@ -8,10 +8,10 @@
 
 struct rtas_args;
 
-asmlinkage unsigned long sys_mmap(unsigned long addr, size_t len,
+asmlinkage long sys_mmap(unsigned long addr, size_t len,
                unsigned long prot, unsigned long flags,
                unsigned long fd, off_t offset);
-asmlinkage unsigned long sys_mmap2(unsigned long addr, size_t len,
+asmlinkage long sys_mmap2(unsigned long addr, size_t len,
                unsigned long prot, unsigned long flags,
                unsigned long fd, unsigned long pgoff);
 asmlinkage long ppc64_personality(unsigned long personality);
index de04c9fbb5cd757af231394ab0f9d8c29053913b..a877bf8269fe8a6d2a3c83a7a8639889962c8d90 100644 (file)
 #include <asm/unistd.h>
 #include <asm/asm-prototypes.h>
 
-static inline unsigned long do_mmap2(unsigned long addr, size_t len,
+static inline long do_mmap2(unsigned long addr, size_t len,
                        unsigned long prot, unsigned long flags,
                        unsigned long fd, unsigned long off, int shift)
 {
-       unsigned long ret = -EINVAL;
+       long ret = -EINVAL;
 
        if (!arch_validate_prot(prot))
                goto out;
@@ -62,16 +62,16 @@ out:
        return ret;
 }
 
-unsigned long sys_mmap2(unsigned long addr, size_t len,
-                       unsigned long prot, unsigned long flags,
-                       unsigned long fd, unsigned long pgoff)
+SYSCALL_DEFINE6(mmap2, unsigned long, addr, size_t, len,
+               unsigned long, prot, unsigned long, flags,
+               unsigned long, fd, unsigned long, pgoff)
 {
        return do_mmap2(addr, len, prot, flags, fd, pgoff, PAGE_SHIFT-12);
 }
 
-unsigned long sys_mmap(unsigned long addr, size_t len,
-                      unsigned long prot, unsigned long flags,
-                      unsigned long fd, off_t offset)
+SYSCALL_DEFINE6(mmap, unsigned long, addr, size_t, len,
+               unsigned long, prot, unsigned long, flags,
+               unsigned long, fd, off_t, offset)
 {
        return do_mmap2(addr, len, prot, flags, fd, offset, PAGE_SHIFT);
 }