• Petr Mladek's avatar
    virtio_balloon: Use a workqueue instead of "vballoon" kthread · fad7b7b2
    Petr Mladek authored
    This patch moves the deferred work from the "vballoon" kthread into a
    system freezable workqueue.
    
    We do not need to maintain and run a dedicated kthread. Also the event
    driven workqueues API makes the logic much easier. Especially, we do
    not longer need an own wait queue, wait function, and freeze point.
    
    The conversion is pretty straightforward. One cycle of the main loop
    is put into a work. The work is queued instead of waking the kthread.
    
    fill_balloon() and leak_balloon() have a limit for the amount of modified
    pages. The work re-queues itself when necessary. For this, we make
    fill_balloon() to return the number of really modified pages.
    Note that leak_balloon() already did this.
    
    virtballoon_restore() queues the work only when really needed.
    
    The only complication is that we need to prevent queuing the work
    when the balloon is being removed. It was easier before because the
    kthread simply removed itself from the wait queue. We need an
    extra boolean and spin lock now.
    
    My initial idea was to use a dedicated workqueue. Michael S. Tsirkin
    suggested using a system one. Tejun Heo confirmed that the system
    workqueue has a pretty high concurrency level (256) by default.
    Therefore we need not be afraid of too long blocking.
    Signed-off-by: default avatarPetr Mladek <pmladek@suse.cz>
    Signed-off-by: default avatarMichael S. Tsirkin <mst@redhat.com>
    fad7b7b2
virtio_balloon.c 17.2 KB