Create a virtio-queue in reversed direction if requested by the virtio device. This is done by calling the function vring_new_host_virtqueue(). Signed-off-by: Sjur Brændeland <sjur.brandeland@xxxxxxxxxxxxxx> --- drivers/remoteproc/remoteproc_virtio.c | 15 ++++++++++++--- 1 files changed, 12 insertions(+), 3 deletions(-) diff --git a/drivers/remoteproc/remoteproc_virtio.c b/drivers/remoteproc/remoteproc_virtio.c index a825f67..5866b03 100644 --- a/drivers/remoteproc/remoteproc_virtio.c +++ b/drivers/remoteproc/remoteproc_virtio.c @@ -69,6 +69,7 @@ EXPORT_SYMBOL(rproc_vq_interrupt); static struct virtqueue *rp_find_vq(struct virtio_device *vdev, unsigned id, + bool revers, void (*callback)(struct virtqueue *vq), const char *name) { @@ -106,8 +107,14 @@ static struct virtqueue *rp_find_vq(struct virtio_device *vdev, * Create the new vq, and tell virtio we're not interested in * the 'weak' smp barriers, since we're talking with a real device. */ - vq = vring_new_virtqueue(id, len, rvring->align, vdev, false, addr, - rproc_virtio_notify, callback, name); + if (revers) + vq = vring_new_host_virtqueue(id, len, rvring->align, vdev, + false, addr, rproc_virtio_notify, + callback, name); + else + vq = vring_new_virtqueue(id, len, rvring->align, vdev, false, + addr, rproc_virtio_notify, callback, + name); if (!vq) { dev_err(dev, "vring_new_virtqueue %s failed\n", name); rproc_free_vring(rvring); @@ -145,9 +152,11 @@ static int rproc_virtio_find_vqs(struct virtio_device *vdev, unsigned nvqs, { struct rproc *rproc = vdev_to_rproc(vdev); int i, ret; + bool revers; for (i = 0; i < nvqs; ++i) { - vqs[i] = rp_find_vq(vdev, i, callbacks[i], names[i]); + revers = reversed ? reversed[i] : false; + vqs[i] = rp_find_vq(vdev, i, revers, callbacks[i], names[i]); if (IS_ERR(vqs[i])) { ret = PTR_ERR(vqs[i]); goto error; -- 1.7.5.4 _______________________________________________ Virtualization mailing list Virtualization@xxxxxxxxxxxxxxxxxxxxxxxxxx https://lists.linuxfoundation.org/mailman/listinfo/virtualization