From: "Michael S. Tsirkin" <mst@redhat.com>
To: qemu-devel@nongnu.org
Cc: Cornelia Huck <cornelia.huck@de.ibm.com>,
Peter Maydell <peter.maydell@linaro.org>,
qemu-block@nongnu.org, Stefan Hajnoczi <stefanha@redhat.com>
Subject: [Qemu-devel] [PULL v2 02/16] Revert "dataplane: allow virtio-1 devices"
Date: Wed, 8 Jul 2015 12:41:30 +0300 [thread overview]
Message-ID: <1436348444-907-3-git-send-email-mst@redhat.com> (raw)
In-Reply-To: <1436348444-907-1-git-send-email-mst@redhat.com>
From: Cornelia Huck <cornelia.huck@de.ibm.com>
This reverts commit f5a5628cf0b65b223fa0c9031714578dfac4cf04.
This was an old patch that had been already superseded by b0e5d90eb
("dataplane: endianness-aware accesses").
Signed-off-by: Cornelia Huck <cornelia.huck@de.ibm.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
Acked-by: Stefan Hajnoczi <stefanha@redhat.com>
---
hw/virtio/dataplane/vring.c | 47 ++++++++++++++++++++-------------------------
1 file changed, 21 insertions(+), 26 deletions(-)
diff --git a/hw/virtio/dataplane/vring.c b/hw/virtio/dataplane/vring.c
index bed9b11..07fd69c 100644
--- a/hw/virtio/dataplane/vring.c
+++ b/hw/virtio/dataplane/vring.c
@@ -158,18 +158,15 @@ bool vring_should_notify(VirtIODevice *vdev, Vring *vring)
}
-static int get_desc(VirtIODevice *vdev, Vring *vring, VirtQueueElement *elem,
+static int get_desc(Vring *vring, VirtQueueElement *elem,
struct vring_desc *desc)
{
unsigned *num;
struct iovec *iov;
hwaddr *addr;
MemoryRegion *mr;
- int is_write = virtio_tswap16(vdev, desc->flags) & VRING_DESC_F_WRITE;
- uint32_t len = virtio_tswap32(vdev, desc->len);
- uint64_t desc_addr = virtio_tswap64(vdev, desc->addr);
- if (is_write) {
+ if (desc->flags & VRING_DESC_F_WRITE) {
num = &elem->in_num;
iov = &elem->in_sg[*num];
addr = &elem->in_addr[*num];
@@ -193,17 +190,18 @@ static int get_desc(VirtIODevice *vdev, Vring *vring, VirtQueueElement *elem,
}
/* TODO handle non-contiguous memory across region boundaries */
- iov->iov_base = vring_map(&mr, desc_addr, len, is_write);
+ iov->iov_base = vring_map(&mr, desc->addr, desc->len,
+ desc->flags & VRING_DESC_F_WRITE);
if (!iov->iov_base) {
error_report("Failed to map descriptor addr %#" PRIx64 " len %u",
- (uint64_t)desc_addr, len);
+ (uint64_t)desc->addr, desc->len);
return -EFAULT;
}
/* The MemoryRegion is looked up again and unref'ed later, leave the
* ref in place. */
- iov->iov_len = len;
- *addr = desc_addr;
+ iov->iov_len = desc->len;
+ *addr = desc->addr;
*num += 1;
return 0;
}
@@ -225,23 +223,21 @@ static int get_indirect(VirtIODevice *vdev, Vring *vring,
struct vring_desc desc;
unsigned int i = 0, count, found = 0;
int ret;
- uint32_t len = virtio_tswap32(vdev, indirect->len);
- uint64_t addr = virtio_tswap64(vdev, indirect->addr);
/* Sanity check */
- if (unlikely(len % sizeof(desc))) {
+ if (unlikely(indirect->len % sizeof(desc))) {
error_report("Invalid length in indirect descriptor: "
"len %#x not multiple of %#zx",
- len, sizeof(desc));
+ indirect->len, sizeof(desc));
vring->broken = true;
return -EFAULT;
}
- count = len / sizeof(desc);
+ count = indirect->len / sizeof(desc);
/* Buffers are chained via a 16 bit next field, so
* we can have at most 2^16 of these. */
if (unlikely(count > USHRT_MAX + 1)) {
- error_report("Indirect buffer length too big: %d", len);
+ error_report("Indirect buffer length too big: %d", indirect->len);
vring->broken = true;
return -EFAULT;
}
@@ -252,12 +248,12 @@ static int get_indirect(VirtIODevice *vdev, Vring *vring,
/* Translate indirect descriptor */
desc_ptr = vring_map(&mr,
- addr + found * sizeof(desc),
+ indirect->addr + found * sizeof(desc),
sizeof(desc), false);
if (!desc_ptr) {
error_report("Failed to map indirect descriptor "
"addr %#" PRIx64 " len %zu",
- (uint64_t)addr + found * sizeof(desc),
+ (uint64_t)indirect->addr + found * sizeof(desc),
sizeof(desc));
vring->broken = true;
return -EFAULT;
@@ -275,20 +271,19 @@ static int get_indirect(VirtIODevice *vdev, Vring *vring,
return -EFAULT;
}
- if (unlikely(virtio_tswap16(vdev, desc.flags)
- & VRING_DESC_F_INDIRECT)) {
+ if (unlikely(desc.flags & VRING_DESC_F_INDIRECT)) {
error_report("Nested indirect descriptor");
vring->broken = true;
return -EFAULT;
}
- ret = get_desc(vdev, vring, elem, &desc);
+ ret = get_desc(vring, elem, &desc);
if (ret < 0) {
vring->broken |= (ret == -EFAULT);
return ret;
}
- i = virtio_tswap16(vdev, desc.next);
- } while (virtio_tswap16(vdev, desc.flags) & VRING_DESC_F_NEXT);
+ i = desc.next;
+ } while (desc.flags & VRING_DESC_F_NEXT);
return 0;
}
@@ -389,7 +384,7 @@ int vring_pop(VirtIODevice *vdev, Vring *vring,
/* Ensure descriptor is loaded before accessing fields */
barrier();
- if (virtio_tswap16(vdev, desc.flags) & VRING_DESC_F_INDIRECT) {
+ if (desc.flags & VRING_DESC_F_INDIRECT) {
ret = get_indirect(vdev, vring, elem, &desc);
if (ret < 0) {
goto out;
@@ -397,13 +392,13 @@ int vring_pop(VirtIODevice *vdev, Vring *vring,
continue;
}
- ret = get_desc(vdev, vring, elem, &desc);
+ ret = get_desc(vring, elem, &desc);
if (ret < 0) {
goto out;
}
- i = virtio_tswap16(vdev, desc.next);
- } while (virtio_tswap16(vdev, desc.flags) & VRING_DESC_F_NEXT);
+ i = desc.next;
+ } while (desc.flags & VRING_DESC_F_NEXT);
/* On success, increment avail index. */
vring->last_avail_idx++;
--
MST
next prev parent reply other threads:[~2015-07-08 9:41 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-07-08 9:41 [Qemu-devel] [PULL v2 00/16] pc,virtio,pci: fixes and updates Michael S. Tsirkin
2015-07-08 9:41 ` [Qemu-devel] [PULL v2 01/16] dataplane: fix cross-endian issues Michael S. Tsirkin
2015-07-08 9:41 ` Michael S. Tsirkin [this message]
2015-07-08 9:41 ` [Qemu-devel] [PULL v2 03/16] acpi: split out ICH ACPI support Michael S. Tsirkin
2015-07-08 9:41 ` [Qemu-devel] [PULL v2 04/16] ich9: add TCO interface emulation Michael S. Tsirkin
2015-07-13 9:49 ` Amit Shah
2015-07-08 9:41 ` [Qemu-devel] [PULL v2 05/16] tests: add testcase for TCO watchdog emulation Michael S. Tsirkin
2015-07-08 9:41 ` [Qemu-devel] [PULL v2 06/16] ich9: implement strap SPKR pin logic Michael S. Tsirkin
2015-07-08 9:41 ` [Qemu-devel] [PULL v2 07/16] hw/i386/pc: factor out pc_cmos_init_floppy() Michael S. Tsirkin
2015-07-08 9:41 ` [Qemu-devel] [PULL v2 08/16] hw/i386/pc: reflect any FDC @ ioport 0x3f0 in the CMOS Michael S. Tsirkin
2015-07-08 9:41 ` [Qemu-devel] [PULL v2 09/16] hw/i386/pc: don't carry FDC from pc_basic_device_init() to pc_cmos_init() Michael S. Tsirkin
2015-07-08 9:42 ` [Qemu-devel] [PULL v2 10/16] virtio_net: reuse constants from linux Michael S. Tsirkin
2015-07-08 9:42 ` [Qemu-devel] [PULL v2 11/16] pci_regs.h: import " Michael S. Tsirkin
2015-07-08 9:42 ` [Qemu-devel] [PULL v2 12/16] pcie: Set the "link active" in the link status register Michael S. Tsirkin
2015-07-08 9:42 ` [Qemu-devel] [PULL v2 13/16] virtio: define virtio_pci_cfg_cap in header Michael S. Tsirkin
2015-07-08 9:42 ` [Qemu-devel] [PULL v2 14/16] virtio-pci: implement cfg capability Michael S. Tsirkin
2015-07-08 9:42 ` [Qemu-devel] [PULL v2 15/16] virtio fix cfg endian-ness for BE targets Michael S. Tsirkin
2015-07-08 9:42 ` [Qemu-devel] [PULL v2 16/16] tco-test: fix up config accesses and re-enable Michael S. Tsirkin
2015-07-08 13:47 ` [Qemu-devel] [PULL v2 00/16] pc,virtio,pci: fixes and updates Peter Maydell
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1436348444-907-3-git-send-email-mst@redhat.com \
--to=mst@redhat.com \
--cc=cornelia.huck@de.ibm.com \
--cc=peter.maydell@linaro.org \
--cc=qemu-block@nongnu.org \
--cc=qemu-devel@nongnu.org \
--cc=stefanha@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).