Patchwork [powerpc] Wire up fanotify_init, fanotify_mark, prlimit64 syscalls

login
register
mail settings
Submitter Andreas Schwab
Date Aug. 19, 2010, 3:15 p.m.
Message ID <m28w42prae.fsf@igel.home>
Download mbox | patch
Permalink /patch/62177/
State Accepted
Commit bcc30d37582b3822ae24712e894379ccd8298e8f
Delegated to: Benjamin Herrenschmidt
Headers show

Comments

Andreas Schwab - Aug. 19, 2010, 3:15 p.m.
Signed-off-by: Andreas Schwab <schwab@linux-m68k.org>
---
 arch/powerpc/include/asm/systbl.h |    3 +++
 arch/powerpc/include/asm/unistd.h |    5 ++++-
 arch/powerpc/kernel/sys_ppc32.c   |    8 ++++++++
 3 files changed, 15 insertions(+), 1 deletions(-)
Arnd Bergmann - Aug. 19, 2010, 5:37 p.m.
On Thursday 19 August 2010 17:15:37 Andreas Schwab wrote:
> +SYSCALL(fanotify_init)
> +COMPAT_SYS(fanotify_mark)

why not _SPU? If it doesn't depend on getting signals,
SPUs should be able to use it.

	Arnd
Andreas Schwab - Aug. 19, 2010, 10:19 p.m.
Arnd Bergmann <arndbergmann@googlemail.com> writes:

> On Thursday 19 August 2010 17:15:37 Andreas Schwab wrote:
>> +SYSCALL(fanotify_init)
>> +COMPAT_SYS(fanotify_mark)
>
> why not _SPU?

See arch/powerpc/platforms/cell/spu_callbacks.c.

 * 4. They are optional and we can't rely on them being
 *    linked into the kernel. Unfortunately, the cond_syscall
 *    helper does not work here as it does not add the necessary
 *    opd symbols:

Andreas.
Arnd Bergmann - Aug. 23, 2010, 1:52 p.m.
On Friday 20 August 2010, Andreas Schwab wrote:
> See arch/powerpc/platforms/cell/spu_callbacks.c.
> 
>  * 4. They are optional and we can't rely on them being
>  *    linked into the kernel. Unfortunately, the cond_syscall
>  *    helper does not work here as it does not add the necessary
>  *    opd symbols:

Right. I should blame the person that wrote this comment.
If only I could remember who that was.

	Arnd
Benjamin Herrenschmidt - Aug. 24, 2010, 6:33 a.m.
On Mon, 2010-08-23 at 15:52 +0200, Arnd Bergmann wrote:
> On Friday 20 August 2010, Andreas Schwab wrote:
> > See arch/powerpc/platforms/cell/spu_callbacks.c.
> > 
> >  * 4. They are optional and we can't rely on them being
> >  *    linked into the kernel. Unfortunately, the cond_syscall
> >  *    helper does not work here as it does not add the necessary
> >  *    opd symbols:
> 
> Right. I should blame the person that wrote this comment.
> If only I could remember who that was.

Regardless of the outcome of that, I'm merging Andreas patch. We can
always add SPU bindings if we feel like it later.

Cheers,
Ben.
Arnd Bergmann - Aug. 24, 2010, 7:58 a.m.
On Tuesday 24 August 2010, Benjamin Herrenschmidt wrote:
> On Mon, 2010-08-23 at 15:52 +0200, Arnd Bergmann wrote:
> > On Friday 20 August 2010, Andreas Schwab wrote:
> > > See arch/powerpc/platforms/cell/spu_callbacks.c.
> > > 
> > >  * 4. They are optional and we can't rely on them being
> > >  *    linked into the kernel. Unfortunately, the cond_syscall
> > >  *    helper does not work here as it does not add the necessary
> > >  *    opd symbols:
> > 
> > Right. I should blame the person that wrote this comment.
> > If only I could remember who that was.
> 
> Regardless of the outcome of that, I'm merging Andreas patch. We can
> always add SPU bindings if we feel like it later.

Sorry, I should have added a ';-)' or been clearer. The patch is good,
I wrote the comment that Andreas quoted and it's probably my own fault
that we never found a way to handle syscalls like this correctly from
the SPU.

	Arnd

Patch

diff --git a/arch/powerpc/include/asm/systbl.h b/arch/powerpc/include/asm/systbl.h
index a5ee345..3d21266 100644
--- a/arch/powerpc/include/asm/systbl.h
+++ b/arch/powerpc/include/asm/systbl.h
@@ -326,3 +326,6 @@  SYSCALL_SPU(perf_event_open)
 COMPAT_SYS_SPU(preadv)
 COMPAT_SYS_SPU(pwritev)
 COMPAT_SYS(rt_tgsigqueueinfo)
+SYSCALL(fanotify_init)
+COMPAT_SYS(fanotify_mark)
+SYSCALL_SPU(prlimit64)
diff --git a/arch/powerpc/include/asm/unistd.h b/arch/powerpc/include/asm/unistd.h
index f0a1026..597e6f9 100644
--- a/arch/powerpc/include/asm/unistd.h
+++ b/arch/powerpc/include/asm/unistd.h
@@ -345,10 +345,13 @@ 
 #define __NR_preadv		320
 #define __NR_pwritev		321
 #define __NR_rt_tgsigqueueinfo	322
+#define __NR_fanotify_init	323
+#define __NR_fanotify_mark	324
+#define __NR_prlimit64		325
 
 #ifdef __KERNEL__
 
-#define __NR_syscalls		323
+#define __NR_syscalls		326
 
 #define __NR__exit __NR_exit
 #define NR_syscalls	__NR_syscalls
diff --git a/arch/powerpc/kernel/sys_ppc32.c b/arch/powerpc/kernel/sys_ppc32.c
index 20fd701..b1b6043 100644
--- a/arch/powerpc/kernel/sys_ppc32.c
+++ b/arch/powerpc/kernel/sys_ppc32.c
@@ -616,3 +616,11 @@  asmlinkage long compat_sys_sync_file_range2(int fd, unsigned int flags,
 
 	return sys_sync_file_range(fd, offset, nbytes, flags);
 }
+
+asmlinkage long compat_sys_fanotify_mark(int fanotify_fd, unsigned int flags,
+					 unsigned mask_hi, unsigned mask_lo,
+					 int dfd, const char __user *pathname)
+{
+	u64 mask = ((u64)mask_hi << 32) | mask_lo;
+	return sys_fanotify_mark(fanotify_fd, flags, mask, dfd, pathname);
+}