vhost: Allow worker switching while work is queueing
authorMike Christie <michael.christie@oracle.com>
Mon, 26 Jun 2023 23:23:07 +0000 (18:23 -0500)
committerMichael S. Tsirkin <mst@redhat.com>
Mon, 3 Jul 2023 16:15:14 +0000 (12:15 -0400)
commit228a27cf78afc63a18f744a56740d26570ecaec0
treefdf9c8bba4cd440f58f01608456de91c3e5d08c6
parentd74b55e6550225ad0a28f0faa590cc9f780ba392
vhost: Allow worker switching while work is queueing

This patch drops the requirement that we can only switch workers if work
has not been queued by using RCU for the vq based queueing paths and a
mutex for the device wide flush.

We can also use this to support SIGKILL properly in the future where we
should exit almost immediately after getting that signal. With this
patch, when get_signal returns true, we can set the vq->worker to NULL
and do a synchronize_rcu to prevent new work from being queued to the
vhost_task that has been killed.

Signed-off-by: Mike Christie <michael.christie@oracle.com>
Message-Id: <20230626232307.97930-18-michael.christie@oracle.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
drivers/vhost/vhost.c
drivers/vhost/vhost.h
include/uapi/linux/vhost.h