• Danilo Krummrich's avatar
    mm: kvmalloc: align kvrealloc() with krealloc() · 590b9d57
    Danilo Krummrich authored
    Besides the obvious (and desired) difference between krealloc() and
    kvrealloc(), there is some inconsistency in their function signatures and
    behavior:
    
     - krealloc() frees the memory when the requested size is zero, whereas
       kvrealloc() simply returns a pointer to the existing allocation.
    
     - krealloc() behaves like kmalloc() if a NULL pointer is passed, whereas
       kvrealloc() does not accept a NULL pointer at all and, if passed,
       would fault instead.
    
     - krealloc() is self-contained, whereas kvrealloc() relies on the caller
       to provide the size of the previous allocation.
    
    Inconsistent behavior throughout allocation APIs is error prone, hence
    make kvrealloc() behave like krealloc(), which seems superior in all
    mentioned aspects.
    
    Besides that, implementing kvrealloc() by making use of krealloc() and
    vrealloc() provides oppertunities to grow (and shrink) allocations more
    efficiently.  For instance, vrealloc() can be optimized to allocate and
    map additional pages to grow the allocation or unmap and free unused pages
    to shrink the allocation.
    
    [dakr@kernel.org: document concurrency restrictions]
      Link: https://lkml.kernel.org/r/20240725125442.4957-1-dakr@kernel.org
    [dakr@kernel.org: disable KASAN when switching to vmalloc]
      Link: https://lkml.kernel.org/r/20240730185049.6244-2-dakr@kernel.org
    [dakr@kernel.org: properly document __GFP_ZERO behavior]
      Link: https://lkml.kernel.org/r/20240730185049.6244-5-dakr@kernel.org
    Link: https://lkml.kernel.org/r/20240722163111.4766-3-dakr@kernel.orgSigned-off-by: default avatarDanilo Krummrich <dakr@kernel.org>
    Acked-by: default avatarMichal Hocko <mhocko@suse.com>
    Acked-by: default avatarVlastimil Babka <vbabka@suse.cz>
    Cc: Chandan Babu R <chandan.babu@oracle.com>
    Cc: Christian König <christian.koenig@amd.com>
    Cc: Christoph Hellwig <hch@infradead.org>
    Cc: Christoph Lameter <cl@linux.com>
    Cc: David Rientjes <rientjes@google.com>
    Cc: Hyeonggon Yoo <42.hyeyoo@gmail.com>
    Cc: Joonsoo Kim <iamjoonsoo.kim@lge.com>
    Cc: Kees Cook <kees@kernel.org>
    Cc: Marc Zyngier <maz@kernel.org>
    Cc: Michael Ellerman <mpe@ellerman.id.au>
    Cc: Miguel Ojeda <ojeda@kernel.org>
    Cc: Oliver Upton <oliver.upton@linux.dev>
    Cc: Pekka Enberg <penberg@kernel.org>
    Cc: Roman Gushchin <roman.gushchin@linux.dev>
    Cc: Uladzislau Rezki <urezki@gmail.com>
    Cc: Wedson Almeida Filho <wedsonaf@gmail.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    590b9d57
papr-vpd.c 14.2 KB