On Thu, Jul 14, 2016 at 12:01 PM, Ingo Molnar <mi...@kernel.org> wrote: > > * H.J. Lu <hjl.to...@gmail.com> wrote: > >> Add compat_sys_preadv64v2 and compat_sys_pwritev64v2 so that 64-bit offset >> is passed in one 64-bit register on x32, similar to compat_sys_preadv64 >> and compat_sys_pwritev64. >> >> Signed-off-by: H.J. Lu <hjl.to...@gmail.com> > >> From 100f17970625dfeb27539a4bb2470acefe3982e1 Mon Sep 17 00:00:00 2001 >> From: "H.J. Lu" <hjl.to...@gmail.com> >> Date: Thu, 14 Jul 2016 08:42:12 -0700 >> Subject: [PATCH] Add compat_sys_preadv64v2/compat_sys_pwritev64v2 >> >> Add compat_sys_preadv64v2 and compat_sys_pwritev64v2 so that 64-bit offset >> is passed in one 64-bit register on x32, similar to compat_sys_preadv64 >> and compat_sys_pwritev64. >> >> Signed-off-by: H.J. Lu <hjl.to...@gmail.com> >> --- >> arch/x86/entry/syscalls/syscall_64.tbl | 2 ++ >> arch/x86/include/asm/unistd.h | 2 ++ >> fs/read_write.c | 18 ++++++++++++++++++ >> 3 files changed, 22 insertions(+) > > Could you please send this against the latest upstream kernel, such as > v4.7-rc7? > The patch does not apply cleanly: > > patching file arch/x86/entry/syscalls/syscall_64.tbl > Hunk #1 FAILED at 374. > 1 out of 1 hunk FAILED -- rejects in file > arch/x86/entry/syscalls/syscall_64.tbl > patching file arch/x86/include/asm/unistd.h > patching file fs/read_write.c > Hunk #1 succeeded at 1168 (offset -14 lines). > Hunk #2 succeeded at 1274 (offset -14 lines). > > Also, could you please Cc: linux-kernel@vger.kernel.org to patch submissions? > > Thanks,
Here is the updated patch. -- H.J.
From a5819cd3ca58291067526b7430b3109fefa4e8b1 Mon Sep 17 00:00:00 2001 From: "H.J. Lu" <hjl.to...@gmail.com> Date: Thu, 14 Jul 2016 08:42:12 -0700 Subject: [PATCH] Add compat_sys_preadv64v2/compat_sys_pwritev64v2 Don't use the same syscall numbers for 2 different syscalls: 534 x32 preadv compat_sys_preadv64 535 x32 pwritev compat_sys_pwritev64 534 x32 preadv2 compat_sys_preadv2 535 x32 pwritev2 compat_sys_pwritev2 Add compat_sys_preadv64v2 and compat_sys_pwritev64v2 so that 64-bit offset is passed in one 64-bit register on x32, similar to compat_sys_preadv64 and compat_sys_pwritev64. Signed-off-by: H.J. Lu <hjl.to...@gmail.com> --- arch/x86/entry/syscalls/syscall_64.tbl | 4 ++-- arch/x86/include/asm/unistd.h | 2 ++ fs/read_write.c | 18 ++++++++++++++++++ 3 files changed, 22 insertions(+), 2 deletions(-) diff --git a/arch/x86/entry/syscalls/syscall_64.tbl b/arch/x86/entry/syscalls/syscall_64.tbl index 555263e..e9ce9c7 100644 --- a/arch/x86/entry/syscalls/syscall_64.tbl +++ b/arch/x86/entry/syscalls/syscall_64.tbl @@ -374,5 +374,5 @@ 543 x32 io_setup compat_sys_io_setup 544 x32 io_submit compat_sys_io_submit 545 x32 execveat compat_sys_execveat/ptregs -534 x32 preadv2 compat_sys_preadv2 -535 x32 pwritev2 compat_sys_pwritev2 +546 x32 preadv2 compat_sys_preadv64v2 +547 x32 pwritev2 compat_sys_pwritev64v2 diff --git a/arch/x86/include/asm/unistd.h b/arch/x86/include/asm/unistd.h index 2b19caa..32712a9 100644 --- a/arch/x86/include/asm/unistd.h +++ b/arch/x86/include/asm/unistd.h @@ -26,6 +26,8 @@ # define __ARCH_WANT_COMPAT_SYS_GETDENTS64 # define __ARCH_WANT_COMPAT_SYS_PREADV64 # define __ARCH_WANT_COMPAT_SYS_PWRITEV64 +# define __ARCH_WANT_COMPAT_SYS_PREADV64V2 +# define __ARCH_WANT_COMPAT_SYS_PWRITEV64V2 # endif diff --git a/fs/read_write.c b/fs/read_write.c index 933b53a..66215a7 100644 --- a/fs/read_write.c +++ b/fs/read_write.c @@ -1168,6 +1168,15 @@ COMPAT_SYSCALL_DEFINE5(preadv, compat_ulong_t, fd, return do_compat_preadv64(fd, vec, vlen, pos, 0); } +#ifdef __ARCH_WANT_COMPAT_SYS_PREADV64V2 +COMPAT_SYSCALL_DEFINE5(preadv64v2, unsigned long, fd, + const struct compat_iovec __user *,vec, + unsigned long, vlen, loff_t, pos, int, flags) +{ + return do_compat_preadv64(fd, vec, vlen, pos, flags); +} +#endif + COMPAT_SYSCALL_DEFINE6(preadv2, compat_ulong_t, fd, const struct compat_iovec __user *,vec, compat_ulong_t, vlen, u32, pos_low, u32, pos_high, @@ -1265,6 +1274,15 @@ COMPAT_SYSCALL_DEFINE5(pwritev, compat_ulong_t, fd, return do_compat_pwritev64(fd, vec, vlen, pos, 0); } +#ifdef __ARCH_WANT_COMPAT_SYS_PWRITEV64V2 +COMPAT_SYSCALL_DEFINE5(pwritev64v2, unsigned long, fd, + const struct compat_iovec __user *,vec, + unsigned long, vlen, loff_t, pos, int, flags) +{ + return do_compat_pwritev64(fd, vec, vlen, pos, flags); +} +#endif + COMPAT_SYSCALL_DEFINE6(pwritev2, compat_ulong_t, fd, const struct compat_iovec __user *,vec, compat_ulong_t, vlen, u32, pos_low, u32, pos_high, int, flags) -- 2.7.4