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/

Reply via email to