X-Git-Url: https://repo.jachan.dev/qemu.git/blobdiff_plain/c4107e8208d0222f9b328691b519aaee4101db87..db1015e92e04835c9eb50c29625fe566d1202dbd:/hw/display/virtio-gpu.c diff --git a/hw/display/virtio-gpu.c b/hw/display/virtio-gpu.c index 25d9e327fc..90be4e3ed7 100644 --- a/hw/display/virtio-gpu.c +++ b/hw/display/virtio-gpu.c @@ -17,12 +17,15 @@ #include "ui/console.h" #include "trace.h" #include "sysemu/dma.h" +#include "sysemu/sysemu.h" #include "hw/virtio/virtio.h" +#include "migration/qemu-file-types.h" #include "hw/virtio/virtio-gpu.h" #include "hw/virtio/virtio-gpu-bswap.h" #include "hw/virtio/virtio-gpu-pixman.h" #include "hw/virtio/virtio-bus.h" #include "hw/display/edid.h" +#include "hw/qdev-properties.h" #include "qemu/log.h" #include "qemu/module.h" #include "qapi/error.h" @@ -643,9 +646,9 @@ int virtio_gpu_create_mapping_iov(VirtIOGPU *g, uint64_t a = le64_to_cpu(ents[i].addr); uint32_t l = le32_to_cpu(ents[i].length); hwaddr len = l; - (*iov)[i].iov_len = l; (*iov)[i].iov_base = dma_memory_map(VIRTIO_DEVICE(g)->dma_as, a, &len, DMA_DIRECTION_TO_DEVICE); + (*iov)[i].iov_len = len; if (addr) { (*addr)[i] = a; } @@ -653,6 +656,9 @@ int virtio_gpu_create_mapping_iov(VirtIOGPU *g, qemu_log_mask(LOG_GUEST_ERROR, "%s: failed to map MMIO memory for" " resource %d element %d\n", __func__, ab->resource_id, i); + if ((*iov)[i].iov_base) { + i++; /* cleanup the 'i'th map */ + } virtio_gpu_cleanup_mapping_iov(g, *iov, i); g_free(ents); *iov = NULL; @@ -1251,7 +1257,7 @@ static void virtio_gpu_class_init(ObjectClass *klass, void *data) vdc->set_config = virtio_gpu_set_config; dc->vmsd = &vmstate_virtio_gpu; - dc->props = virtio_gpu_properties; + device_class_set_props(dc, virtio_gpu_properties); } static const TypeInfo virtio_gpu_info = {