[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH v2] tests: qtest: Add virtio-iommu test
From: |
Eric Auger |
Subject: |
Re: [PATCH v2] tests: qtest: Add virtio-iommu test |
Date: |
Thu, 14 Oct 2021 10:21:34 +0200 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.10.1 |
Hi Thomas,
On 10/14/21 7:58 AM, Thomas Huth wrote:
> On 13/10/2021 21.50, Eric Auger wrote:
>> Add the framework to test the virtio-iommu-pci device
>> and tests exercising the attach/detach, map/unmap API.
>>
>> Signed-off-by: Eric Auger <eric.auger@redhat.com>
>>
>> ---
> ...
>> +/**
>> + * send_map - Send a map command to the device
>> + * @domain: domain the new binding is attached to
>> + * @virt_start: iova start
>> + * @virt_end: iova end
>> + * @phys_start: base physical address
>> + * @flags: mapping flags
>> + */
>> +static int send_map(QTestState *qts, QVirtioIOMMU *v_iommu,
>> + uint32_t domain, uint64_t virt_start, uint64_t
>> virt_end,
>> + uint64_t phys_start, uint32_t flags)
>> +{
>> + QVirtioDevice *dev = v_iommu->vdev;
>> + QVirtQueue *vq = v_iommu->vq;
>> + uint64_t ro_addr, wr_addr;
>> + uint32_t free_head;
>> + struct virtio_iommu_req_map req;
>> + size_t ro_size = sizeof(req) - sizeof(struct
>> virtio_iommu_req_tail);
>> + size_t wr_size = sizeof(struct virtio_iommu_req_tail);
>> + char buffer[64];
>> + int ret;
>> +
>> + req.head.type = VIRTIO_IOMMU_T_MAP;
>> + req.domain = domain;
>> + req.virt_start = virt_start;
>> + req.virt_end = virt_end;
>> + req.phys_start = phys_start;
>> + req.flags = flags;
>> +
>> + ro_addr = guest_alloc(alloc, ro_size);
>> + wr_addr = guest_alloc(alloc, wr_size);
>> +
>> + qtest_memwrite(qts, ro_addr, &req, ro_size);
>> + free_head = qvirtqueue_add(qts, vq, ro_addr, ro_size, false, true);
>> + qvirtqueue_add(qts, vq, wr_addr, wr_size, true, false);
>> + qvirtqueue_kick(qts, dev, vq, free_head);
>> + qvirtio_wait_used_elem(qts, dev, vq, free_head, NULL,
>> + QVIRTIO_IOMMU_TIMEOUT_US);
>> + memread(wr_addr, buffer, wr_size);
>
> qtest_memread() please.
My apologies, I forgot those qtest_memread() comment and the char
buffer[64] replacement too :-(
>
>> + ret = ((struct virtio_iommu_req_tail *)buffer)->status;
>> + guest_free(alloc, ro_addr);
>> + guest_free(alloc, wr_addr);
>> + return ret;
>> +}
>> +
>> +/**
>> + * send_unmap - Send an unmap command to the device
>> + * @domain: domain the new binding is attached to
>> + * @virt_start: iova start
>> + * @virt_end: iova end
>> + */
>> +static int send_unmap(QTestState *qts, QVirtioIOMMU *v_iommu,
>> + uint32_t domain, uint64_t virt_start, uint64_t
>> virt_end)
>> +{
>> + QVirtioDevice *dev = v_iommu->vdev;
>> + QVirtQueue *vq = v_iommu->vq;
>> + uint64_t ro_addr, wr_addr;
>> + uint32_t free_head;
>> + struct virtio_iommu_req_unmap req;
>> + size_t ro_size = sizeof(req) - sizeof(struct
>> virtio_iommu_req_tail);
>> + size_t wr_size = sizeof(struct virtio_iommu_req_tail);
>> + char buffer[64];
>> + int ret;
>> +
>> + req.head.type = VIRTIO_IOMMU_T_UNMAP;
>> + req.domain = domain;
>> + req.virt_start = virt_start;
>> + req.virt_end = virt_end;
>> +
>> + ro_addr = guest_alloc(alloc, ro_size);
>> + wr_addr = guest_alloc(alloc, wr_size);
>> +
>> + qtest_memwrite(qts, ro_addr, &req, ro_size);
>> + free_head = qvirtqueue_add(qts, vq, ro_addr, ro_size, false, true);
>> + qvirtqueue_add(qts, vq, wr_addr, wr_size, true, false);
>> + qvirtqueue_kick(qts, dev, vq, free_head);
>> + qvirtio_wait_used_elem(qts, dev, vq, free_head, NULL,
>> + QVIRTIO_IOMMU_TIMEOUT_US);
>> + memread(wr_addr, buffer, wr_size);
>
> qtest_memread() please.
>
>> + ret = ((struct virtio_iommu_req_tail *)buffer)->status;
>> + guest_free(alloc, ro_addr);
>> + guest_free(alloc, wr_addr);
>> + return ret;
>> +}
>
> With the two memread()s changed into qtest_memread()s:
>
> Acked-by: Thomas Huth <thuth@redhat.com>
Thank you for your patience!
Eric