mirror of https://github.com/xemu-project/xemu.git
tests/virtio-blk: add virtio_blk_fix_dwz_hdr() function
This function is useful to fix the endianness of struct virtio_blk_discard_write_zeroes headers. Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com> Signed-off-by: Stefano Garzarella <sgarzare@redhat.com> Message-id: 20190221103314.58500-9-sgarzare@redhat.com Message-Id: <20190221103314.58500-9-sgarzare@redhat.com> Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
This commit is contained in:
parent
f6cd8a6366
commit
ca1a98042b
|
@ -46,6 +46,12 @@ typedef struct QVirtioBlkReq {
|
||||||
uint8_t status;
|
uint8_t status;
|
||||||
} QVirtioBlkReq;
|
} QVirtioBlkReq;
|
||||||
|
|
||||||
|
#ifdef HOST_WORDS_BIGENDIAN
|
||||||
|
const bool host_is_big_endian = true;
|
||||||
|
#else
|
||||||
|
const bool host_is_big_endian; /* false */
|
||||||
|
#endif
|
||||||
|
|
||||||
static char *drive_create(void)
|
static char *drive_create(void)
|
||||||
{
|
{
|
||||||
int fd, ret;
|
int fd, ret;
|
||||||
|
@ -125,12 +131,6 @@ static QVirtioPCIDevice *virtio_blk_pci_init(QPCIBus *bus, int slot)
|
||||||
|
|
||||||
static inline void virtio_blk_fix_request(QVirtioDevice *d, QVirtioBlkReq *req)
|
static inline void virtio_blk_fix_request(QVirtioDevice *d, QVirtioBlkReq *req)
|
||||||
{
|
{
|
||||||
#ifdef HOST_WORDS_BIGENDIAN
|
|
||||||
const bool host_is_big_endian = true;
|
|
||||||
#else
|
|
||||||
const bool host_is_big_endian = false;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (qvirtio_is_big_endian(d) != host_is_big_endian) {
|
if (qvirtio_is_big_endian(d) != host_is_big_endian) {
|
||||||
req->type = bswap32(req->type);
|
req->type = bswap32(req->type);
|
||||||
req->ioprio = bswap32(req->ioprio);
|
req->ioprio = bswap32(req->ioprio);
|
||||||
|
@ -138,6 +138,17 @@ static inline void virtio_blk_fix_request(QVirtioDevice *d, QVirtioBlkReq *req)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static inline void virtio_blk_fix_dwz_hdr(QVirtioDevice *d,
|
||||||
|
struct virtio_blk_discard_write_zeroes *dwz_hdr)
|
||||||
|
{
|
||||||
|
if (qvirtio_is_big_endian(d) != host_is_big_endian) {
|
||||||
|
dwz_hdr->sector = bswap64(dwz_hdr->sector);
|
||||||
|
dwz_hdr->num_sectors = bswap32(dwz_hdr->num_sectors);
|
||||||
|
dwz_hdr->flags = bswap32(dwz_hdr->flags);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static uint64_t virtio_blk_request(QGuestAllocator *alloc, QVirtioDevice *d,
|
static uint64_t virtio_blk_request(QGuestAllocator *alloc, QVirtioDevice *d,
|
||||||
QVirtioBlkReq *req, uint64_t data_size)
|
QVirtioBlkReq *req, uint64_t data_size)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue