提交 a7290ee0 编写于 作者: M Michael Buesch 提交者: Linus Torvalds

[PATCH] Uninline sys_mmap common code (reduce binary size)

Remove the inlining of the new vs old mmap system call common code.  This
reduces the size of the resulting vmlinux for defconfig as follows:

mb@pc1:~/develop/git/linux-2.6$ size vmlinux.mmap*
   text    data     bss     dec     hex filename
3303749  521524  186564 4011837  3d373d vmlinux.mmapinline
3303557  521524  186564 4011645  3d367d vmlinux.mmapnoinline

The new sys_mmap2() has also one function call overhead removed, now.
(probably it was already optimized to a jmp before, but anyway...)
Signed-off-by: NAndrew Morton <akpm@osdl.org>
Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
上级 617d2214
...@@ -40,14 +40,13 @@ asmlinkage int sys_pipe(unsigned long __user * fildes) ...@@ -40,14 +40,13 @@ asmlinkage int sys_pipe(unsigned long __user * fildes)
return error; return error;
} }
/* common code for old and new mmaps */ asmlinkage long sys_mmap2(unsigned long addr, unsigned long len,
static inline long do_mmap2( unsigned long prot, unsigned long flags,
unsigned long addr, unsigned long len, unsigned long fd, unsigned long pgoff)
unsigned long prot, unsigned long flags,
unsigned long fd, unsigned long pgoff)
{ {
int error = -EBADF; int error = -EBADF;
struct file * file = NULL; struct file *file = NULL;
struct mm_struct *mm = current->mm;
flags &= ~(MAP_EXECUTABLE | MAP_DENYWRITE); flags &= ~(MAP_EXECUTABLE | MAP_DENYWRITE);
if (!(flags & MAP_ANONYMOUS)) { if (!(flags & MAP_ANONYMOUS)) {
...@@ -56,9 +55,9 @@ static inline long do_mmap2( ...@@ -56,9 +55,9 @@ static inline long do_mmap2(
goto out; goto out;
} }
down_write(&current->mm->mmap_sem); down_write(&mm->mmap_sem);
error = do_mmap_pgoff(file, addr, len, prot, flags, pgoff); error = do_mmap_pgoff(file, addr, len, prot, flags, pgoff);
up_write(&current->mm->mmap_sem); up_write(&mm->mmap_sem);
if (file) if (file)
fput(file); fput(file);
...@@ -66,13 +65,6 @@ static inline long do_mmap2( ...@@ -66,13 +65,6 @@ static inline long do_mmap2(
return error; 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);
}
/* /*
* Perform the select(nd, in, out, ex, tv) and mmap() system * Perform the select(nd, in, out, ex, tv) and mmap() system
* calls. Linux/i386 didn't use to be able to handle more than * calls. Linux/i386 didn't use to be able to handle more than
...@@ -101,7 +93,8 @@ asmlinkage int old_mmap(struct mmap_arg_struct __user *arg) ...@@ -101,7 +93,8 @@ asmlinkage int old_mmap(struct mmap_arg_struct __user *arg)
if (a.offset & ~PAGE_MASK) if (a.offset & ~PAGE_MASK)
goto out; goto out;
err = do_mmap2(a.addr, a.len, a.prot, a.flags, a.fd, a.offset >> PAGE_SHIFT); err = sys_mmap2(a.addr, a.len, a.prot, a.flags,
a.fd, a.offset >> PAGE_SHIFT);
out: out:
return err; return err;
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册