On Mon, Aug 19, 2024 at 5:29 PM Cindy Lu <lulu@xxxxxxxxxx> wrote: > > Added back the previously removed function vhost_worker_queue() and > renamed it to vhost_worker_queue_khtread(). The new vhost_worker_queue() > will select the different mode based on the value of the parameter. > > Signed-off-by: Cindy Lu <lulu@xxxxxxxxxx> It looks like a partial revert of some previous commit, please mention the commit id in the change log as least. So did for the following 3 or 4 patches. Thanks > --- > drivers/vhost/vhost.c | 30 ++++++++++++++++++++++++++++-- > drivers/vhost/vhost.h | 1 + > 2 files changed, 29 insertions(+), 2 deletions(-) > > diff --git a/drivers/vhost/vhost.c b/drivers/vhost/vhost.c > index da701f6b3f2c..6261c9df468e 100644 > --- a/drivers/vhost/vhost.c > +++ b/drivers/vhost/vhost.c > @@ -236,8 +236,8 @@ void vhost_poll_stop(struct vhost_poll *poll) > } > EXPORT_SYMBOL_GPL(vhost_poll_stop); > > -static void vhost_worker_queue(struct vhost_worker *worker, > - struct vhost_work *work) > +static void vhost_worker_queue_task(struct vhost_worker *worker, > + struct vhost_work *work) > { > if (!test_and_set_bit(VHOST_WORK_QUEUED, &work->flags)) { > /* We can only add the work to the list after we're > @@ -249,6 +249,32 @@ static void vhost_worker_queue(struct vhost_worker *worker, > } > } > > +static void vhost_work_queue_kthread(struct vhost_worker *worker, > + struct vhost_work *work) > +{ > + if (!worker) > + return; > + > + if (!test_and_set_bit(VHOST_WORK_QUEUED, &work->flags)) { > + /* We can only add the work to the list after we're > + * sure it was not in the list. > + * test_and_set_bit() implies a memory barrier. > + */ > + llist_add(&work->node, &worker->work_list); > + > + wake_up_process(worker->task); > + } > +} > + > +static void vhost_worker_queue(struct vhost_worker *worker, > + struct vhost_work *work) > +{ > + if (use_kthread) { > + vhost_work_queue_kthread(worker, work); > + } else { > + vhost_worker_queue_task(worker, work); > + } > +} > bool vhost_vq_work_queue(struct vhost_virtqueue *vq, struct vhost_work *work) > { > struct vhost_worker *worker; > diff --git a/drivers/vhost/vhost.h b/drivers/vhost/vhost.h > index bb75a292d50c..c7f126fd09e8 100644 > --- a/drivers/vhost/vhost.h > +++ b/drivers/vhost/vhost.h > @@ -27,6 +27,7 @@ struct vhost_work { > }; > > struct vhost_worker { > + struct task_struct *task; > struct vhost_task *vtsk; > struct vhost_dev *dev; > /* Used to serialize device wide flushing with worker swapping. */ > -- > 2.45.0 >