vdpa: Add eventfd for the vdpa callback
[ Upstream commit 5e68470f4e80a4120e9ecec408f6ab4ad386bd4a ] Add eventfd for the vdpa callback so that user can signal it directly instead of triggering the callback. It will be used for vhost-vdpa case. Signed-off-by: Xie Yongji <xieyongji@bytedance.com> Message-Id: <20230323053043.35-9-xieyongji@bytedance.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com> Acked-by: Jason Wang <jasowang@redhat.com> Stable-dep-of: 02e9e9366fef ("vhost_vdpa: assign irq bypass producer token correctly") Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
64add9aaf7
commit
10348fb6fe
@ -422,9 +422,11 @@ static long vhost_vdpa_vring_ioctl(struct vhost_vdpa *v, unsigned int cmd,
|
|||||||
if (vq->call_ctx.ctx) {
|
if (vq->call_ctx.ctx) {
|
||||||
cb.callback = vhost_vdpa_virtqueue_cb;
|
cb.callback = vhost_vdpa_virtqueue_cb;
|
||||||
cb.private = vq;
|
cb.private = vq;
|
||||||
|
cb.trigger = vq->call_ctx.ctx;
|
||||||
} else {
|
} else {
|
||||||
cb.callback = NULL;
|
cb.callback = NULL;
|
||||||
cb.private = NULL;
|
cb.private = NULL;
|
||||||
|
cb.trigger = NULL;
|
||||||
}
|
}
|
||||||
ops->set_vq_cb(vdpa, idx, &cb);
|
ops->set_vq_cb(vdpa, idx, &cb);
|
||||||
vhost_vdpa_setup_vq_irq(v, idx);
|
vhost_vdpa_setup_vq_irq(v, idx);
|
||||||
|
@ -180,6 +180,7 @@ virtio_vdpa_setup_vq(struct virtio_device *vdev, unsigned int index,
|
|||||||
/* Setup virtqueue callback */
|
/* Setup virtqueue callback */
|
||||||
cb.callback = virtio_vdpa_virtqueue_cb;
|
cb.callback = virtio_vdpa_virtqueue_cb;
|
||||||
cb.private = info;
|
cb.private = info;
|
||||||
|
cb.trigger = NULL;
|
||||||
ops->set_vq_cb(vdpa, index, &cb);
|
ops->set_vq_cb(vdpa, index, &cb);
|
||||||
ops->set_vq_num(vdpa, index, virtqueue_get_vring_size(vq));
|
ops->set_vq_num(vdpa, index, virtqueue_get_vring_size(vq));
|
||||||
|
|
||||||
|
@ -11,10 +11,16 @@
|
|||||||
* vDPA callback definition.
|
* vDPA callback definition.
|
||||||
* @callback: interrupt callback function
|
* @callback: interrupt callback function
|
||||||
* @private: the data passed to the callback function
|
* @private: the data passed to the callback function
|
||||||
|
* @trigger: the eventfd for the callback (Optional).
|
||||||
|
* When it is set, the vDPA driver must guarantee that
|
||||||
|
* signaling it is functional equivalent to triggering
|
||||||
|
* the callback. Then vDPA parent can signal it directly
|
||||||
|
* instead of triggering the callback.
|
||||||
*/
|
*/
|
||||||
struct vdpa_callback {
|
struct vdpa_callback {
|
||||||
irqreturn_t (*callback)(void *data);
|
irqreturn_t (*callback)(void *data);
|
||||||
void *private;
|
void *private;
|
||||||
|
struct eventfd_ctx *trigger;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
Reference in New Issue
Block a user