On Thu, 3 Sep 2015 12:14:51 +0800 gang.chen.5...@gmail.com wrote: > From: Chen Gang <gang.chen.5...@gmail.com> > > Call the function pointer directly, then let code a bit simpler. > > ... > > --- a/mm/mmap.c > +++ b/mm/mmap.c > @@ -2012,10 +2012,8 @@ unsigned long > get_unmapped_area(struct file *file, unsigned long addr, unsigned long len, > unsigned long pgoff, unsigned long flags) > { > - unsigned long (*get_area)(struct file *, unsigned long, > - unsigned long, unsigned long, unsigned long); > - > unsigned long error = arch_mmap_check(addr, len, flags); > + > if (error) > return error; > > @@ -2023,10 +2021,12 @@ get_unmapped_area(struct file *file, unsigned long > addr, unsigned long len, > if (len > TASK_SIZE) > return -ENOMEM; > > - get_area = current->mm->get_unmapped_area; > if (file && file->f_op->get_unmapped_area) > - get_area = file->f_op->get_unmapped_area; > - addr = get_area(file, addr, len, pgoff, flags); > + addr = file->f_op->get_unmapped_area(file, addr, len, > + pgoff, flags); > + else > + addr = current->mm->get_unmapped_area(file, addr, len, > + pgoff, flags); > if (IS_ERR_VALUE(addr)) > return addr;
size(1) says this generates more object code. And that probably means slightly worse code. I didn't investigate, but probably the compiler is now preparing those five args at two different sites. Which is pretty dumb of it - the compiler could have stacked the args first, then chosen the appropriate function to call. -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/