• Petr Mladek's avatar
    virtio_balloon: Allow to resize and update the balloon stats in parallel · fd0e21c3
    Petr Mladek authored
    The virtio balloon statistics are not updated when the balloon
    is being resized. But it seems that both tasks could be done
    in parallel.
    
    stats_handle_request() updates the statistics in the balloon
    structure and then communicates with the host.
    
    update_balloon_stats() calls all_vm_events() that just reads
    some per-CPU variables. The values might change during and
    after the call but it is expected and happens even without
    this patch.
    
    update_balloon_stats() also calls si_meminfo(). It is a bit
    more complex function. It too just reads some variables and
    looks lock-less safe. In each case, it seems to be called
    lock-less on several similar locations, e.g. from post_status()
    in dm_thread_func(), or from vmballoon_send_get_target().
    
    The communication with the host is done via a separate virtqueue,
    see vb->stats_vq vs. vb->inflate_vq and vb->deflate_vq. Therefore
    it could be used in parallel with fill_balloon() and leak_balloon().
    
    This patch splits the existing work into two pieces. One is for
    updating the balloon stats. The other is for resizing of the balloon.
    It seems that they can be proceed in parallel without any
    extra locking.
    Signed-off-by: default avatarPetr Mladek <pmladek@suse.com>
    Signed-off-by: default avatarMichael S. Tsirkin <mst@redhat.com>
    fd0e21c3
virtio_balloon.c 17.5 KB