• Baoquan He's avatar
    mm/vmalloc.c: add flags to mark vm_map_ram area · 869176a0
    Baoquan He authored
    Through vmalloc API, a virtual kernel area is reserved for physical
    address mapping.  And vmap_area is used to track them, while vm_struct is
    allocated to associate with the vmap_area to store more information and
    passed out.
    
    However, area reserved via vm_map_ram() is an exception.  It doesn't have
    vm_struct to associate with vmap_area.  And we can't recognize the
    vmap_area with '->vm == NULL' as a vm_map_ram() area because the normal
    freeing path will set va->vm = NULL before unmapping, please see function
    remove_vm_area().
    
    Meanwhile, there are two kinds of handling for vm_map_ram area.  One is
    the whole vmap_area being reserved and mapped at one time through
    vm_map_area() interface; the other is the whole vmap_area with
    VMAP_BLOCK_SIZE size being reserved, while mapped into split regions with
    smaller size via vb_alloc().
    
    To mark the area reserved through vm_map_ram(), add flags field into
    struct vmap_area.  Bit 0 indicates this is vm_map_ram area created through
    vm_map_ram() interface, while bit 1 marks out the type of vm_map_ram area
    which makes use of vmap_block to manage split regions via vb_alloc/free().
    
    This is a preparation for later use.
    
    Link: https://lkml.kernel.org/r/20230206084020.174506-3-bhe@redhat.comSigned-off-by: default avatarBaoquan He <bhe@redhat.com>
    Reviewed-by: default avatarLorenzo Stoakes <lstoakes@gmail.com>
    Reviewed-by: default avatarUladzislau Rezki (Sony) <urezki@gmail.com>
    Cc: Dan Carpenter <error27@gmail.com>
    Cc: Stephen Brennan <stephen.s.brennan@oracle.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    869176a0
vmalloc.c 109 KB