Re: [PATCH] mm/mmap.c: Remove redundent 'get_area' function pointer in get_unmapped_area()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu,  3 Sep 2015 12:14:51 +0800 gang.chen.5i5j@xxxxxxxxx wrote:

> From: Chen Gang <gang.chen.5i5j@xxxxxxxxx>
> 
> 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, send a message with 'unsubscribe linux-mm' in
the body to majordomo@xxxxxxxxx.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@xxxxxxxxx";> email@xxxxxxxxx </a>



[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Bugtraq]     [Linux]     [Linux OMAP]     [Linux MIPS]     [ECOS]     [Asterisk Internet PBX]     [Linux API]