On Sat, Jan 25, 2020 at 06:19:51PM +0100, Eric Auger wrote: [...]
> +static void virtio_iommu_report_fault(VirtIOIOMMU *viommu, uint8_t reason, > + int flags, uint32_t endpoint, > + uint64_t address) > +{ > + VirtIODevice *vdev = &viommu->parent_obj; > + VirtQueue *vq = viommu->event_vq; > + struct virtio_iommu_fault fault; > + VirtQueueElement *elem; > + size_t sz; > + > + memset(&fault, 0, sizeof(fault)); > + fault.reason = reason; > + fault.flags = cpu_to_le32(flags); > + fault.endpoint = cpu_to_le32(endpoint); > + fault.address = cpu_to_le64(address); > + > + for (;;) { > + elem = virtqueue_pop(vq, sizeof(VirtQueueElement)); > + > + if (!elem) { > + error_report_once( > + "no buffer available in event queue to report event"); > + return; > + } > + > + if (iov_size(elem->in_sg, elem->in_num) < sizeof(fault)) { > + virtio_error(vdev, "error buffer of wrong size"); > + virtqueue_detach_element(vq, elem, 0); > + g_free(elem); > + return; > + } > + break; This for loop is not needed any more? Other than that: Reviewed-by: Peter Xu <pet...@redhat.com> -- Peter Xu