Hi Peter, On 2/3/20 2:55 PM, Peter Xu wrote: > 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: hum yes indeed. > > Reviewed-by: Peter Xu <pet...@redhat.com>
Thanks! Eric >