diff --git a/devicemodel/core/vmmapi.c b/devicemodel/core/vmmapi.c index 16944fac7..3985ae01b 100644 --- a/devicemodel/core/vmmapi.c +++ b/devicemodel/core/vmmapi.c @@ -468,6 +468,7 @@ vm_map_gpa(struct vmctx *ctx, vm_paddr_t gaddr, size_t len) } } + pr_dbg("%s context memory is not valid!\n", __func__); return NULL; } diff --git a/devicemodel/hw/pci/virtio/virtio.c b/devicemodel/hw/pci/virtio/virtio.c index 018b9c9e4..e176a0f87 100644 --- a/devicemodel/hw/pci/virtio/virtio.c +++ b/devicemodel/hw/pci/virtio/virtio.c @@ -342,18 +342,25 @@ virtio_vq_enable(struct virtio_base *base) phys = (((uint64_t)vq->gpa_desc[1]) << 32) | vq->gpa_desc[0]; size = qsz * sizeof(struct vring_desc); vb = paddr_guest2host(base->dev->vmctx, phys, size); + if (!vb) + goto error; vq->desc = (struct vring_desc *)vb; /* available ring */ phys = (((uint64_t)vq->gpa_avail[1]) << 32) | vq->gpa_avail[0]; size = (2 + qsz + 1) * sizeof(uint16_t); vb = paddr_guest2host(base->dev->vmctx, phys, size); + if (!vb) + goto error; + vq->avail = (struct vring_avail *)vb; /* used ring */ phys = (((uint64_t)vq->gpa_used[1]) << 32) | vq->gpa_used[0]; size = sizeof(uint16_t) * 3 + sizeof(struct vring_used_elem) * qsz; vb = paddr_guest2host(base->dev->vmctx, phys, size); + if (!vb) + goto error; vq->used = (struct vring_used *)vb; /* Start at 0 when we use it. */ @@ -366,6 +373,9 @@ virtio_vq_enable(struct virtio_base *base) /* Mark queue as allocated after initialization is complete. */ mb(); vq->flags = VQ_ALLOC; + error: + vq->flags = 0; + pr_err("%s: vq enable failed\n", __func__); } /* diff --git a/devicemodel/hw/pci/virtio/virtio_console.c b/devicemodel/hw/pci/virtio/virtio_console.c index c48a8307c..e44b3e955 100644 --- a/devicemodel/hw/pci/virtio/virtio_console.c +++ b/devicemodel/hw/pci/virtio/virtio_console.c @@ -412,7 +412,9 @@ virtio_console_notify_rx(void *vdev, struct virtio_vq_info *vq) if (!port->rx_ready) { port->rx_ready = 1; - vq->used->flags |= VRING_USED_F_NO_NOTIFY; + if (vq_has_descs(vq)) { + vq->used->flags |= VRING_USED_F_NO_NOTIFY; + } } }