Commit be1e50a2 authored by Greg Kurz's avatar Greg Kurz Committed by Michael S. Tsirkin
Browse files

dataplane: fix cross-endian issues



Accesses to vring_avail_event and vring_used_event must honor the queue
endianness.

This patch allows cross-endian setups to use dataplane (tested with ppc64
on ppc64le, and vice-versa).

Suggested-by: default avatarCornelia Huck <cornelia.huck@de.ibm.com>
Signed-off-by: default avatarGreg Kurz <gkurz@linux.vnet.ibm.com>
Reviewed-by: default avatarMichael S. Tsirkin <mst@redhat.com>
Signed-off-by: default avatarMichael S. Tsirkin <mst@redhat.com>
Reviewed-by: default avatarCornelia Huck <cornelia.huck@de.ibm.com>


parent f6e3035f
Loading
Loading
Loading
Loading
+4 −2
Original line number Diff line number Diff line
@@ -153,7 +153,8 @@ bool vring_should_notify(VirtIODevice *vdev, Vring *vring)
        return true;
    }

    return vring_need_event(vring_used_event(&vring->vr), new, old);
    return vring_need_event(virtio_tswap16(vdev, vring_used_event(&vring->vr)),
                            new, old);
}


@@ -407,7 +408,8 @@ int vring_pop(VirtIODevice *vdev, Vring *vring,
    /* On success, increment avail index. */
    vring->last_avail_idx++;
    if (virtio_has_feature(vdev, VIRTIO_RING_F_EVENT_IDX)) {
        vring_avail_event(&vring->vr) = vring->last_avail_idx;
        vring_avail_event(&vring->vr) =
            virtio_tswap16(vdev, vring->last_avail_idx);
    }

    return head;