mirror of
https://github.com/torvalds/linux.git
synced 2026-11-07 06:17:02 +01:00
vdpa: Add eventfd for the vdpa callback
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>
This commit is contained in:
parent
66640f4a6f
commit
5e68470f4e
|
|
@ -599,9 +599,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);
|
||||||
|
|
|
||||||
|
|
@ -196,6 +196,7 @@ virtio_vdpa_setup_vq(struct virtio_device *vdev, unsigned int index,
|
||||||
/* Setup virtqueue callback */
|
/* Setup virtqueue callback */
|
||||||
cb.callback = callback ? virtio_vdpa_virtqueue_cb : NULL;
|
cb.callback = callback ? virtio_vdpa_virtqueue_cb : NULL;
|
||||||
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));
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -13,10 +13,16 @@
|
||||||
* struct vdpa_calllback - vDPA callback definition.
|
* struct vdpa_calllback - 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