From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:52323) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bjRvc-0001sG-QY for qemu-devel@nongnu.org; Mon, 12 Sep 2016 10:09:48 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1bjRvX-0003W8-O9 for qemu-devel@nongnu.org; Mon, 12 Sep 2016 10:09:43 -0400 Received: from mx1.redhat.com ([209.132.183.28]:38196) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bjRvX-0003Vy-J3 for qemu-devel@nongnu.org; Mon, 12 Sep 2016 10:09:39 -0400 From: Stefan Hajnoczi Date: Mon, 12 Sep 2016 15:08:54 +0100 Message-Id: <1473689334-29138-18-git-send-email-stefanha@redhat.com> In-Reply-To: <1473689334-29138-1-git-send-email-stefanha@redhat.com> References: <1473689334-29138-1-git-send-email-stefanha@redhat.com> Subject: [Qemu-devel] [PULL 17/17] tests: fix qvirtqueue_kick List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: Peter Maydell , Laurent Vivier , Stefan Hajnoczi From: Laurent Vivier vq->avail.idx and vq->avail->ring[] are a 16bit values, so read and write them with readw()/writew() instead of readl()/writel(). To read/write a 16bit value with a 32bit accessor works fine on little-endian CPU but not on big endian CPU. [An equivalent patch for the writew() calls was also sent by Zhang Shuai . --Stefan] Signed-off-by: Laurent Vivier Message-id: 1472330054-22607-1-git-send-email-lvivier@redhat.com Signed-off-by: Stefan Hajnoczi --- tests/libqos/virtio.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/libqos/virtio.c b/tests/libqos/virtio.c index d8c2970..37ff860 100644 --- a/tests/libqos/virtio.c +++ b/tests/libqos/virtio.c @@ -257,16 +257,16 @@ void qvirtqueue_kick(const QVirtioBus *bus, QVirtioDevice *d, QVirtQueue *vq, uint32_t free_head) { /* vq->avail->idx */ - uint16_t idx = readl(vq->avail + 2); + uint16_t idx = readw(vq->avail + 2); /* vq->used->flags */ uint16_t flags; /* vq->used->avail_event */ uint16_t avail_event; /* vq->avail->ring[idx % vq->size] */ - writel(vq->avail + 4 + (2 * (idx % vq->size)), free_head); + writew(vq->avail + 4 + (2 * (idx % vq->size)), free_head); /* vq->avail->idx */ - writel(vq->avail + 2, idx + 1); + writew(vq->avail + 2, idx + 1); /* Must read after idx is updated */ flags = readw(vq->avail); -- 2.7.4