diff options
author | Mike Christie <michael.christie@oracle.com> | 2024-03-16 01:47:06 +0100 |
---|---|---|
committer | Michael S. Tsirkin <mst@redhat.com> | 2024-05-22 14:31:15 +0200 |
commit | db5247d9bf5c6ade9fd70b4e4897441e0269b233 (patch) | |
tree | cfec480a97ddaaf073d69cf6ed272a2edf18ecb4 /include | |
parent | vhost: Release worker mutex during flushes (diff) | |
download | linux-db5247d9bf5c6ade9fd70b4e4897441e0269b233.tar.xz linux-db5247d9bf5c6ade9fd70b4e4897441e0269b233.zip |
vhost_task: Handle SIGKILL by flushing work and exiting
Instead of lingering until the device is closed, this has us handle
SIGKILL by:
1. marking the worker as killed so we no longer try to use it with
new virtqueues and new flush operations.
2. setting the virtqueue to worker mapping so no new works are queued.
3. running all the exiting works.
Suggested-by: Edward Adam Davis <eadavis@qq.com>
Reported-and-tested-by: syzbot+98edc2df894917b3431f@syzkaller.appspotmail.com
Message-Id: <tencent_546DA49414E876EEBECF2C78D26D242EE50A@qq.com>
Signed-off-by: Mike Christie <michael.christie@oracle.com>
Message-Id: <20240316004707.45557-9-michael.christie@oracle.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
Diffstat (limited to 'include')
-rw-r--r-- | include/linux/sched/vhost_task.h | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/include/linux/sched/vhost_task.h b/include/linux/sched/vhost_task.h index bc60243d43b3..25446c5d3508 100644 --- a/include/linux/sched/vhost_task.h +++ b/include/linux/sched/vhost_task.h @@ -4,7 +4,8 @@ struct vhost_task; -struct vhost_task *vhost_task_create(bool (*fn)(void *), void *arg, +struct vhost_task *vhost_task_create(bool (*fn)(void *), + void (*handle_kill)(void *), void *arg, const char *name); void vhost_task_start(struct vhost_task *vtsk); void vhost_task_stop(struct vhost_task *vtsk); |