diff options
author | Mike Christie <michael.christie@oracle.com> | 2023-06-27 02:23:07 +0300 |
---|---|---|
committer | Michael S. Tsirkin <mst@redhat.com> | 2023-07-03 19:15:14 +0300 |
commit | 228a27cf78afc63a18f744a56740d26570ecaec0 (patch) | |
tree | fdf9c8bba4cd440f58f01608456de91c3e5d08c6 /include | |
parent | d74b55e6550225ad0a28f0faa590cc9f780ba392 (diff) | |
download | linux-228a27cf78afc63a18f744a56740d26570ecaec0.tar.xz |
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>
Diffstat (limited to 'include')
-rw-r--r-- | include/uapi/linux/vhost.h | 4 |
1 files changed, 1 insertions, 3 deletions
diff --git a/include/uapi/linux/vhost.h b/include/uapi/linux/vhost.h index 96dc146c2d15..f5c48b61ab62 100644 --- a/include/uapi/linux/vhost.h +++ b/include/uapi/linux/vhost.h @@ -90,9 +90,7 @@ #define VHOST_SET_VRING_ENDIAN _IOW(VHOST_VIRTIO, 0x13, struct vhost_vring_state) #define VHOST_GET_VRING_ENDIAN _IOW(VHOST_VIRTIO, 0x14, struct vhost_vring_state) /* Attach a vhost_worker created with VHOST_NEW_WORKER to one of the device's - * virtqueues. This must be done before VHOST_SET_VRING_KICK and the driver - * specific ioctl to activate the virtqueue (VHOST_SCSI_SET_ENDPOINT, - * VHOST_NET_SET_BACKEND, VHOST_VSOCK_SET_RUNNING) has been run. + * virtqueues. * * This will replace the virtqueue's existing worker. If the replaced worker * is no longer attached to any virtqueues, it can be freed with |