> +++ b/arch/riscv/kernel/sys_riscv.c > @@ -0,0 +1,43 @@ > +/* > + * Copyright (C) 2012 Regents of the University of California > + * Copyright (C) 2014 Darius Rad <dar...@bluespec.com> > + * Copyright (C) 2017 SiFive > + * > + * This program is free software; you can redistribute it and/or > + * modify it under the terms of the GNU General Public License > + * as published by the Free Software Foundation, version 2. > + * > + * This program is distributed in the hope that it will be useful, > + * but WITHOUT ANY WARRANTY; without even the implied warranty of > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > + * GNU General Public License for more details. > + */ > + > +#include <linux/syscalls.h> > +#include <asm/cmpxchg.h>
Should not be needed. > +#ifdef CONFIG_64BIT > +SYSCALL_DEFINE6(mmap, unsigned long, addr, unsigned long, len, > + unsigned long, prot, unsigned long, flags, > + unsigned long, fd, off_t, offset) > +{ > + if (unlikely(offset & (~PAGE_MASK))) > + return -EINVAL; > + return sys_mmap_pgoff(addr, len, prot, flags, fd, offset >> PAGE_SHIFT); > +} > +#else > +SYSCALL_DEFINE6(mmap2, unsigned long, addr, unsigned long, len, > + unsigned long, prot, unsigned long, flags, > + unsigned long, fd, off_t, offset) > +{ > + /* > + * Note that the shift for mmap2 is constant (12), > + * regardless of PAGE_SIZE > + */ > + if (unlikely(offset & (~PAGE_MASK >> 12))) > + return -EINVAL; > + return sys_mmap_pgoff(addr, len, prot, flags, fd, > + offset >> (PAGE_SHIFT - 12)); > +} > +#endif /* !CONFIG_64BIT */ Most modern ports seem to expose sys_mmap_pgoff as the syscall directly. Any reason you're doing this differently? But even the code for the older ones should probably be consolidated..