qemu-block
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-block] [Qemu-devel] [PATCH RFC 2/2] tests/virtio-blk: add test


From: Thomas Huth
Subject: Re: [Qemu-block] [Qemu-devel] [PATCH RFC 2/2] tests/virtio-blk: add test for WRITE_ZEROES command
Date: Fri, 25 Jan 2019 07:01:06 +0100
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.9.1

On 2019-01-24 18:23, Stefano Garzarella wrote:
> If the WRITE_ZEROES feature is enabled, we check this
> command in the test_basic().
> 
> Signed-off-by: Stefano Garzarella <address@hidden>
> ---
>  tests/virtio-blk-test.c | 63 +++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 63 insertions(+)
> 
> diff --git a/tests/virtio-blk-test.c b/tests/virtio-blk-test.c
> index 04c608764b..8cabbcb85a 100644
> --- a/tests/virtio-blk-test.c
> +++ b/tests/virtio-blk-test.c
> @@ -231,6 +231,69 @@ static void test_basic(QVirtioDevice *dev, 
> QGuestAllocator *alloc,
>  
>      guest_free(alloc, req_addr);
>  
> +    if (features & (1u << VIRTIO_BLK_F_WRITE_ZEROES)) {
> +        struct virtio_blk_discard_write_zeroes *dwz_hdr;
> +        void *expected;
> +
> +        /*
> +         * WRITE_ZEROES request on the same sector of previous test where
> +         * we wrote "TEST".
> +         */
> +        req.type = VIRTIO_BLK_T_WRITE_ZEROES;
> +        req.data = g_malloc0(512);

Wouldn't it be more interesting to do a memset(req.data, 0xaa, 512) or
something similar here, to see whether zeroes or 0xaa is written?

> +        dwz_hdr = (struct virtio_blk_discard_write_zeroes *)req.data;
> +        dwz_hdr->sector = 0;
> +        dwz_hdr->num_sectors = 1;
> +        dwz_hdr->flags = 0;
> +
> +        req_addr = virtio_blk_request(alloc, dev, &req, 512);
> +
> +        g_free(req.data);
> +
> +        free_head = qvirtqueue_add(vq, req_addr, 16, false, true);
> +        qvirtqueue_add(vq, req_addr + 16, 512, false, true);
> +        qvirtqueue_add(vq, req_addr + 528, 1, true, false);
> +
> +        qvirtqueue_kick(dev, vq, free_head);
> +
> +        qvirtio_wait_used_elem(dev, vq, free_head, NULL,
> +                               QVIRTIO_BLK_TIMEOUT_US);
> +        status = readb(req_addr + 528);
> +        g_assert_cmpint(status, ==, 0);
> +
> +        guest_free(alloc, req_addr);
> +
> +        /* Read request to check if the sector contains all zeroes */
> +        req.type = VIRTIO_BLK_T_IN;
> +        req.ioprio = 1;
> +        req.sector = 0;
> +        req.data = g_malloc0(512);
> +
> +        req_addr = virtio_blk_request(alloc, dev, &req, 512);
> +
> +        g_free(req.data);
> +
> +        free_head = qvirtqueue_add(vq, req_addr, 16, false, true);
> +        qvirtqueue_add(vq, req_addr + 16, 512, true, true);
> +        qvirtqueue_add(vq, req_addr + 528, 1, true, false);
> +
> +        qvirtqueue_kick(dev, vq, free_head);
> +
> +        qvirtio_wait_used_elem(dev, vq, free_head, NULL,
> +                               QVIRTIO_BLK_TIMEOUT_US);
> +        status = readb(req_addr + 528);
> +        g_assert_cmpint(status, ==, 0);
> +
> +        data = g_malloc(512);
> +        expected = g_malloc0(512);
> +        memread(req_addr + 16, data, 512);
> +        g_assert_cmpmem(data, 512, expected, 512);
> +        g_free(expected);
> +        g_free(data);
> +
> +        guest_free(alloc, req_addr);
> +    }
> +
>      if (features & (1u << VIRTIO_F_ANY_LAYOUT)) {
>          /* Write and read with 2 descriptor layout */
>          /* Write request */
> 




reply via email to

[Prev in Thread] Current Thread [Next in Thread]