On Mon, Dec 7, 2009 at 04:54, Al Viro <viro@xxxxxxxxxxxxxxxx> wrote: > > New helper - sys_mmap_pgoff(); switch syscalls to using it. > > Signed-off-by: Al Viro <viro@xxxxxxxxxxxxxxxxxx> > --- > arch/alpha/kernel/osf_sys.c | 19 ++----- > arch/arm/kernel/entry-common.S | 4 +- > arch/arm/kernel/sys_arm.c | 30 +---------- > arch/avr32/include/asm/syscalls.h | 4 -- > arch/avr32/kernel/sys_avr32.c | 31 ----------- > arch/avr32/kernel/syscall-stubs.S | 2 +- > arch/blackfin/kernel/sys_bfin.c | 33 ----------- > arch/blackfin/mach-common/entry.S | 2 +- > arch/cris/kernel/sys_cris.c | 30 +--------- > arch/frv/kernel/sys_frv.c | 66 +---------------------- > arch/h8300/kernel/sys_h8300.c | 83 +---------------------------- > arch/h8300/kernel/syscalls.S | 2 +- > arch/ia64/kernel/sys_ia64.c | 37 +------------ > arch/m32r/kernel/sys_m32r.c | 24 -------- > arch/m32r/kernel/syscall_table.S | 2 +- > arch/m68k/kernel/sys_m68k.c | 79 ++-------------------------- > arch/m68knommu/kernel/sys_m68k.c | 38 +------------ > arch/m68knommu/kernel/syscalltable.S | 2 +- > arch/microblaze/kernel/sys_microblaze.c | 38 +------------ > arch/microblaze/kernel/syscall_table.S | 2 +- > arch/mips/kernel/linux32.c | 19 +------ > arch/mips/kernel/syscall.c | 29 +--------- > arch/mn10300/kernel/entry.S | 2 +- > arch/mn10300/kernel/sys_mn10300.c | 31 +---------- > arch/parisc/kernel/sys_parisc.c | 30 ++--------- > arch/powerpc/kernel/syscalls.c | 15 +----- > arch/s390/kernel/compat_linux.c | 32 +---------- > arch/s390/kernel/sys_s390.c | 30 +---------- > arch/score/kernel/sys_score.c | 21 +------ > arch/sh/kernel/sys_sh.c | 28 +--------- > arch/sparc/kernel/sys_sparc_32.c | 31 ++--------- > arch/sparc/kernel/sys_sparc_64.c | 22 ++------ > arch/um/kernel/syscall.c | 28 +--------- > arch/um/sys-i386/shared/sysdep/syscalls.h | 4 -- > arch/x86/ia32/ia32entry.S | 2 +- > arch/x86/ia32/sys_ia32.c | 43 +--------------- > arch/x86/include/asm/sys_ia32.h | 3 - > arch/x86/include/asm/syscalls.h | 2 - > arch/x86/kernel/sys_i386_32.c | 27 +--------- > arch/x86/kernel/sys_x86_64.c | 17 +------ > arch/x86/kernel/syscall_table_32.S | 2 +- > arch/xtensa/include/asm/syscall.h | 2 - > arch/xtensa/include/asm/unistd.h | 2 +- > arch/xtensa/kernel/syscall.c | 25 --------- > include/linux/syscalls.h | 4 ++ > mm/util.c | 29 ++++++++++ > 46 files changed, 105 insertions(+), 903 deletions(-) > > diff --git a/arch/m68k/kernel/sys_m68k.c b/arch/m68k/kernel/sys_m68k.c > index 7deb402..fdab0f0 100644 > --- a/arch/m68k/kernel/sys_m68k.c > +++ b/arch/m68k/kernel/sys_m68k.c > @@ -29,37 +29,12 @@ > #include <asm/page.h> > #include <asm/unistd.h> > > -/* common code for old and new mmaps */ > -static inline long do_mmap2( > - unsigned long addr, unsigned long len, > - unsigned long prot, unsigned long flags, > - unsigned long fd, unsigned long pgoff) > -{ > - int error = -EBADF; > - struct file * file = NULL; > - > - flags &= ~(MAP_EXECUTABLE | MAP_DENYWRITE); > - if (!(flags & MAP_ANONYMOUS)) { > - file = fget(fd); > - if (!file) > - goto out; > - } > - > - down_write(¤t->mm->mmap_sem); > - error = do_mmap_pgoff(file, addr, len, prot, flags, pgoff); > - up_write(¤t->mm->mmap_sem); > - > - if (file) > - fput(file); > -out: > - return error; > -} > - > asmlinkage long sys_mmap2(unsigned long addr, unsigned long len, > unsigned long prot, unsigned long flags, > unsigned long fd, unsigned long pgoff) > { > - return do_mmap2(addr, len, prot, flags, fd, pgoff); > + /* this is wrong for sun3, BTW */ Can you please add the why part to the comment? Thanks! > + return sys_mmap_pgoff(addr, len, prot, flags, fd, pgoff); > } > > /* > @@ -90,57 +65,11 @@ asmlinkage int old_mmap(struct mmap_arg_struct __user *arg) > if (a.offset & ~PAGE_MASK) > goto out; > > - a.flags &= ~(MAP_EXECUTABLE | MAP_DENYWRITE); > - > - error = do_mmap2(a.addr, a.len, a.prot, a.flags, a.fd, a.offset >> PAGE_SHIFT); > -out: > - return error; > -} > - > -#if 0 > -struct mmap_arg_struct64 { > - __u32 addr; > - __u32 len; > - __u32 prot; > - __u32 flags; > - __u64 offset; /* 64 bits */ > - __u32 fd; > -}; > - > -asmlinkage long sys_mmap64(struct mmap_arg_struct64 *arg) > -{ > - int error = -EFAULT; > - struct file * file = NULL; > - struct mmap_arg_struct64 a; > - unsigned long pgoff; > - > - if (copy_from_user(&a, arg, sizeof(a))) > - return -EFAULT; > - > - if ((long)a.offset & ~PAGE_MASK) > - return -EINVAL; > - > - pgoff = a.offset >> PAGE_SHIFT; > - if ((a.offset >> PAGE_SHIFT) != pgoff) > - return -EINVAL; > - > - if (!(a.flags & MAP_ANONYMOUS)) { > - error = -EBADF; > - file = fget(a.fd); > - if (!file) > - goto out; > - } > - a.flags &= ~(MAP_EXECUTABLE | MAP_DENYWRITE); > - > - down_write(¤t->mm->mmap_sem); > - error = do_mmap_pgoff(file, a.addr, a.len, a.prot, a.flags, pgoff); > - up_write(¤t->mm->mmap_sem); > - if (file) > - fput(file); > + error = sys_mmap_pgoff(a.addr, a.len, a.prot, a.flags, a.fd, > + a.offset >> PAGE_SHIFT); > out: > return error; > } > -#endif > > struct sel_arg_struct { > unsigned long n; Gr{oetje,eeting}s, Geert -- Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@xxxxxxxxxxxxxx In personal conversations with technical people, I call myself a hacker. But when I'm talking to journalists I just say "programmer" or something like that. -- Linus Torvalds ��.n��������+%������w��{.n�����{�����ܨ}���Ơz�j:+v�����w����ޙ��&�)ߡ�a����z�ޗ���ݢj��w�f