Re: [Qemu-devel] [PATCH v4 4/6] tests: rename target_big_endian() as qvirtio_is_big_endian()
On Fri, 14 Oct 2016 10:58:53 +0200 Laurent Vivierwrote: > Move the definition to libqos/virtio.h as it must be used > only with virtio functions. > > Add a QVirtioDevice parameter as it will be needed to > know if the virtio device is using virtio 1.0 specification > and thus is always little-endian (to do) > > Signed-off-by: Laurent Vivier > --- Reviewed-by: Greg Kurz > tests/libqos/virtio-pci.c | 2 +- > tests/libqos/virtio.h | 6 ++ > tests/libqtest.h | 10 -- > tests/virtio-blk-test.c | 36 ++-- > 4 files changed, 25 insertions(+), 29 deletions(-) > > diff --git a/tests/libqos/virtio-pci.c b/tests/libqos/virtio-pci.c > index bbfed58..7aa29b1 100644 > --- a/tests/libqos/virtio-pci.c > +++ b/tests/libqos/virtio-pci.c > @@ -86,7 +86,7 @@ static uint64_t qvirtio_pci_config_readq(QVirtioDevice *d, > uint64_t addr) > int i; > uint64_t u64 = 0; > > -if (target_big_endian()) { > +if (qvirtio_is_big_endian(d)) { > for (i = 0; i < 8; ++i) { > u64 |= (uint64_t)qpci_io_readb(dev->pdev, > (void *)(uintptr_t)addr + i) << (7 - i) * 8; > diff --git a/tests/libqos/virtio.h b/tests/libqos/virtio.h > index ac4669a..3397a08 100644 > --- a/tests/libqos/virtio.h > +++ b/tests/libqos/virtio.h > @@ -89,6 +89,12 @@ struct QVirtioBus { > void (*virtqueue_kick)(QVirtioDevice *d, QVirtQueue *vq); > }; > > +static inline bool qvirtio_is_big_endian(QVirtioDevice *d) > +{ > +/* FIXME: virtio 1.0 is always little-endian */ > +return qtest_big_endian(global_qtest); > +} > + > static inline uint32_t qvring_size(uint32_t num, uint32_t align) > { > return ((sizeof(struct vring_desc) * num + sizeof(uint16_t) * (3 + num) > diff --git a/tests/libqtest.h b/tests/libqtest.h > index 4be1f77..0224f06 100644 > --- a/tests/libqtest.h > +++ b/tests/libqtest.h > @@ -881,16 +881,6 @@ static inline int64_t clock_set(int64_t val) > return qtest_clock_set(global_qtest, val); > } > > -/** > - * target_big_endian: > - * > - * Returns: True if the architecture under test has a big endian > configuration. > - */ > -static inline bool target_big_endian(void) > -{ > -return qtest_big_endian(global_qtest); > -} > - > QDict *qmp_fd_receive(int fd); > void qmp_fd_sendv(int fd, const char *fmt, va_list ap); > void qmp_fd_send(int fd, const char *fmt, ...); > diff --git a/tests/virtio-blk-test.c b/tests/virtio-blk-test.c > index 9a6f2cf..79e21c5 100644 > --- a/tests/virtio-blk-test.c > +++ b/tests/virtio-blk-test.c > @@ -117,23 +117,23 @@ static QVirtioPCIDevice *virtio_blk_pci_init(QPCIBus > *bus, int slot) > return dev; > } > > -static inline void virtio_blk_fix_request(QVirtioBlkReq *req) > +static inline void virtio_blk_fix_request(QVirtioDevice *d, QVirtioBlkReq > *req) > { > #ifdef HOST_WORDS_BIGENDIAN > -bool host_endian = true; > +const bool host_is_big_endian = true; > #else > -bool host_endian = false; > +const bool host_is_big_endian = false; > #endif > > -if (target_big_endian() != host_endian) { > +if (qvirtio_is_big_endian(d) != host_is_big_endian) { > req->type = bswap32(req->type); > req->ioprio = bswap32(req->ioprio); > req->sector = bswap64(req->sector); > } > } > > -static uint64_t virtio_blk_request(QGuestAllocator *alloc, QVirtioBlkReq > *req, > -uint64_t > data_size) > +static uint64_t virtio_blk_request(QGuestAllocator *alloc, QVirtioDevice *d, > + QVirtioBlkReq *req, uint64_t data_size) > { > uint64_t addr; > uint8_t status = 0xFF; > @@ -141,7 +141,7 @@ static uint64_t virtio_blk_request(QGuestAllocator > *alloc, QVirtioBlkReq *req, > g_assert_cmpuint(data_size % 512, ==, 0); > addr = guest_alloc(alloc, sizeof(*req) + data_size); > > -virtio_blk_fix_request(req); > +virtio_blk_fix_request(d, req); > > memwrite(addr, req, 16); > memwrite(addr + 16, req->data, data_size); > @@ -182,7 +182,7 @@ static void test_basic(QVirtioDevice *dev, > QGuestAllocator *alloc, > req.data = g_malloc0(512); > strcpy(req.data, "TEST"); > > -req_addr = virtio_blk_request(alloc, , 512); > +req_addr = virtio_blk_request(alloc, dev, , 512); > > g_free(req.data); > > @@ -204,7 +204,7 @@ static void test_basic(QVirtioDevice *dev, > QGuestAllocator *alloc, > req.sector = 0; > req.data = g_malloc0(512); > > -req_addr = virtio_blk_request(alloc, , 512); > +req_addr = virtio_blk_request(alloc, dev, , 512); > > g_free(req.data); > > @@ -234,7 +234,7 @@ static void test_basic(QVirtioDevice *dev, > QGuestAllocator *alloc, > req.data = g_malloc0(512); > strcpy(req.data, "TEST"); > > -req_addr = virtio_blk_request(alloc, , 512); > +
[Qemu-devel] [PATCH v4 4/6] tests: rename target_big_endian() as qvirtio_is_big_endian()
Move the definition to libqos/virtio.h as it must be used only with virtio functions. Add a QVirtioDevice parameter as it will be needed to know if the virtio device is using virtio 1.0 specification and thus is always little-endian (to do) Signed-off-by: Laurent Vivier--- tests/libqos/virtio-pci.c | 2 +- tests/libqos/virtio.h | 6 ++ tests/libqtest.h | 10 -- tests/virtio-blk-test.c | 36 ++-- 4 files changed, 25 insertions(+), 29 deletions(-) diff --git a/tests/libqos/virtio-pci.c b/tests/libqos/virtio-pci.c index bbfed58..7aa29b1 100644 --- a/tests/libqos/virtio-pci.c +++ b/tests/libqos/virtio-pci.c @@ -86,7 +86,7 @@ static uint64_t qvirtio_pci_config_readq(QVirtioDevice *d, uint64_t addr) int i; uint64_t u64 = 0; -if (target_big_endian()) { +if (qvirtio_is_big_endian(d)) { for (i = 0; i < 8; ++i) { u64 |= (uint64_t)qpci_io_readb(dev->pdev, (void *)(uintptr_t)addr + i) << (7 - i) * 8; diff --git a/tests/libqos/virtio.h b/tests/libqos/virtio.h index ac4669a..3397a08 100644 --- a/tests/libqos/virtio.h +++ b/tests/libqos/virtio.h @@ -89,6 +89,12 @@ struct QVirtioBus { void (*virtqueue_kick)(QVirtioDevice *d, QVirtQueue *vq); }; +static inline bool qvirtio_is_big_endian(QVirtioDevice *d) +{ +/* FIXME: virtio 1.0 is always little-endian */ +return qtest_big_endian(global_qtest); +} + static inline uint32_t qvring_size(uint32_t num, uint32_t align) { return ((sizeof(struct vring_desc) * num + sizeof(uint16_t) * (3 + num) diff --git a/tests/libqtest.h b/tests/libqtest.h index 4be1f77..0224f06 100644 --- a/tests/libqtest.h +++ b/tests/libqtest.h @@ -881,16 +881,6 @@ static inline int64_t clock_set(int64_t val) return qtest_clock_set(global_qtest, val); } -/** - * target_big_endian: - * - * Returns: True if the architecture under test has a big endian configuration. - */ -static inline bool target_big_endian(void) -{ -return qtest_big_endian(global_qtest); -} - QDict *qmp_fd_receive(int fd); void qmp_fd_sendv(int fd, const char *fmt, va_list ap); void qmp_fd_send(int fd, const char *fmt, ...); diff --git a/tests/virtio-blk-test.c b/tests/virtio-blk-test.c index 9a6f2cf..79e21c5 100644 --- a/tests/virtio-blk-test.c +++ b/tests/virtio-blk-test.c @@ -117,23 +117,23 @@ static QVirtioPCIDevice *virtio_blk_pci_init(QPCIBus *bus, int slot) return dev; } -static inline void virtio_blk_fix_request(QVirtioBlkReq *req) +static inline void virtio_blk_fix_request(QVirtioDevice *d, QVirtioBlkReq *req) { #ifdef HOST_WORDS_BIGENDIAN -bool host_endian = true; +const bool host_is_big_endian = true; #else -bool host_endian = false; +const bool host_is_big_endian = false; #endif -if (target_big_endian() != host_endian) { +if (qvirtio_is_big_endian(d) != host_is_big_endian) { req->type = bswap32(req->type); req->ioprio = bswap32(req->ioprio); req->sector = bswap64(req->sector); } } -static uint64_t virtio_blk_request(QGuestAllocator *alloc, QVirtioBlkReq *req, -uint64_t data_size) +static uint64_t virtio_blk_request(QGuestAllocator *alloc, QVirtioDevice *d, + QVirtioBlkReq *req, uint64_t data_size) { uint64_t addr; uint8_t status = 0xFF; @@ -141,7 +141,7 @@ static uint64_t virtio_blk_request(QGuestAllocator *alloc, QVirtioBlkReq *req, g_assert_cmpuint(data_size % 512, ==, 0); addr = guest_alloc(alloc, sizeof(*req) + data_size); -virtio_blk_fix_request(req); +virtio_blk_fix_request(d, req); memwrite(addr, req, 16); memwrite(addr + 16, req->data, data_size); @@ -182,7 +182,7 @@ static void test_basic(QVirtioDevice *dev, QGuestAllocator *alloc, req.data = g_malloc0(512); strcpy(req.data, "TEST"); -req_addr = virtio_blk_request(alloc, , 512); +req_addr = virtio_blk_request(alloc, dev, , 512); g_free(req.data); @@ -204,7 +204,7 @@ static void test_basic(QVirtioDevice *dev, QGuestAllocator *alloc, req.sector = 0; req.data = g_malloc0(512); -req_addr = virtio_blk_request(alloc, , 512); +req_addr = virtio_blk_request(alloc, dev, , 512); g_free(req.data); @@ -234,7 +234,7 @@ static void test_basic(QVirtioDevice *dev, QGuestAllocator *alloc, req.data = g_malloc0(512); strcpy(req.data, "TEST"); -req_addr = virtio_blk_request(alloc, , 512); +req_addr = virtio_blk_request(alloc, dev, , 512); g_free(req.data); @@ -254,7 +254,7 @@ static void test_basic(QVirtioDevice *dev, QGuestAllocator *alloc, req.sector = 1; req.data = g_malloc0(512); -req_addr = virtio_blk_request(alloc, , 512); +req_addr = virtio_blk_request(alloc, dev, , 512); g_free(req.data); @@ -348,7 +348,7 @@ static void