vhost: introduce vhost_has_work()
authorJason Wang <jasowang@redhat.com>
Fri, 4 Mar 2016 11:24:51 +0000 (06:24 -0500)
committerMichael S. Tsirkin <mst@redhat.com>
Fri, 11 Mar 2016 00:18:45 +0000 (02:18 +0200)
This path introduces a helper which can give a hint for whether or not
there's a work queued in the work list. This could be used for busy
polling code to exit the busy loop.

Signed-off-by: Jason Wang <jasowang@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
drivers/vhost/vhost.c
drivers/vhost/vhost.h

index 328c54ab01544929f2d0ba476f2bbc1f1c688ea8..596de212fe7e15b401af5ad6d257eb6bc5878799 100644 (file)
@@ -263,6 +263,13 @@ void vhost_work_queue(struct vhost_dev *dev, struct vhost_work *work)
 }
 EXPORT_SYMBOL_GPL(vhost_work_queue);
 
+/* A lockless hint for busy polling code to exit the loop */
+bool vhost_has_work(struct vhost_dev *dev)
+{
+       return !list_empty(&dev->work_list);
+}
+EXPORT_SYMBOL_GPL(vhost_has_work);
+
 void vhost_poll_queue(struct vhost_poll *poll)
 {
        vhost_work_queue(poll->dev, &poll->work);
index 8f0dd0d915d4e3619eb748832d381ddd4f2fb811..eef33b11a7ed54ac2868abcc9a2cce6ece55b2ef 100644 (file)
@@ -37,6 +37,7 @@ struct vhost_poll {
 
 void vhost_work_init(struct vhost_work *work, vhost_work_fn_t fn);
 void vhost_work_queue(struct vhost_dev *dev, struct vhost_work *work);
+bool vhost_has_work(struct vhost_dev *dev);
 
 void vhost_poll_init(struct vhost_poll *poll, vhost_work_fn_t fn,
                     unsigned long mask, struct vhost_dev *dev);