Skip to content
  • Rasmus Villemoes's avatar
    include/linux: apply __malloc attribute · 48a27055
    Rasmus Villemoes authored
    
    
    Attach the malloc attribute to a few allocation functions.  This helps
    gcc generate better code by telling it that the return value doesn't
    alias any existing pointers (which is even more valuable given the
    pessimizations implied by -fno-strict-aliasing).
    
    A simple example of what this allows gcc to do can be seen by looking at
    the last part of drm_atomic_helper_plane_reset:
    
    	plane->state = kzalloc(sizeof(*plane->state), GFP_KERNEL);
    
    	if (plane->state) {
    		plane->state->plane = plane;
    		plane->state->rotation = BIT(DRM_ROTATE_0);
    	}
    
    which compiles to
    
        e8 99 bf d6 ff          callq  ffffffff8116d540 <kmem_cache_alloc_trace>
        48 85 c0                test   %rax,%rax
        48 89 83 40 02 00 00    mov    %rax,0x240(%rbx)
        74 11                   je     ffffffff814015c4 <drm_atomic_helper_plane_reset+0x64>
        48 89 18                mov    %rbx,(%rax)
        48 8b 83 40 02 00 00    mov    0x240(%rbx),%rax [*]
        c7 40 40 01 00 00 00    movl   $0x1,0x40(%rax)
    
    With this patch applied, the instruction at [*] is elided, since the
    store to plane->state->plane is known to not alter the value of
    plane->state.
    
    [akpm@linux-foundation.org: coding-style fixes]
    Signed-off-by: default avatarRasmus Villemoes <linux@rasmusvillemoes.dk>
    Cc: Christoph Lameter <cl@linux.com>
    Cc: Pekka Enberg <penberg@kernel.org>
    Cc: David Rientjes <rientjes@google.com>
    Cc: Joonsoo Kim <iamjoonsoo.kim@lge.com>
    Cc: Andi Kleen <ak@linux.intel.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    48a27055