• Nadav Amit's avatar
    vmw_balloon: rework the inflate and deflate loops · 6e4453b3
    Nadav Amit authored
    In preparation for supporting compaction and OOM notification, this
    patch reworks the inflate/deflate loops. The main idea is to separate
    the allocation, communication with the hypervisor, and the handling of
    errors from each other. Doing will allow us to perform concurrent
    inflation and deflation, excluding the actual communication with the
    hypervisor.
    
    To do so, we need to get rid of the remaining global state that is kept
    in the balloon struct, specifically the refuse_list. When the VM
    communicates with the hypervisor, it does not free or put back pages
    to the balloon list and instead only moves the pages whose status
    indicated failure into a refuse_list on the stack. Once the operation
    completes, the inflation or deflation functions handle the list
    appropriately.
    
    As we do that, we can consolidate the communication with the hypervisor
    for both the lock and unlock operations into a single function. We also
    reuse the deflation function for popping the balloon.
    
    As a preparation for preventing races, we hold a spinlock when the
    communication actually takes place, and use atomic operations for
    updating the balloon size. The balloon page list is still racy and will
    be handled in the next patch.
    Reviewed-by: default avatarXavier Deguillard <xdeguillard@vmware.com>
    Signed-off-by: default avatarNadav Amit <namit@vmware.com>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    6e4453b3
vmw_balloon.c 43.1 KB