qemu-devel
[Top][All Lists]
Advanced

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

Re: [Qemu-devel] [PATCH 05/38] ivshmem-test: Improve test case /ivshmem/


From: Marc-André Lureau
Subject: Re: [Qemu-devel] [PATCH 05/38] ivshmem-test: Improve test case /ivshmem/single
Date: Tue, 1 Mar 2016 12:06:33 +0100

On Mon, Feb 29, 2016 at 7:40 PM, Markus Armbruster <address@hidden> wrote:
> Test state of registers after reset.
>
> Test reading Interrupt Status clears it.
>
> Test (invalid) read of Doorbell.
>
> Add more comments.
>
> Signed-off-by: Markus Armbruster <address@hidden>

Reviewed-by: Marc-André Lureau <address@hidden>


> ---
>  tests/ivshmem-test.c | 23 ++++++++++++++++-------
>  1 file changed, 16 insertions(+), 7 deletions(-)
>
> diff --git a/tests/ivshmem-test.c b/tests/ivshmem-test.c
> index e118377..ba4d9f1 100644
> --- a/tests/ivshmem-test.c
> +++ b/tests/ivshmem-test.c
> @@ -143,32 +143,41 @@ static void test_ivshmem_single(void)
>      setup_vm(&state);
>      s = &state;
>
> -    /* valid io */
> -    out_reg(s, INTRMASK, 0);
> -    in_reg(s, INTRSTATUS);
> -    in_reg(s, IVPOSITION);
> +    /* initial state of readable registers */
> +    g_assert_cmpuint(in_reg(s, INTRMASK), ==, 0);
> +    g_assert_cmpuint(in_reg(s, INTRSTATUS), ==, 0);
> +    g_assert_cmpuint(in_reg(s, IVPOSITION), ==, 0);
>
> +    /* trigger interrupt via registers */
>      out_reg(s, INTRMASK, 0xffffffff);
>      g_assert_cmpuint(in_reg(s, INTRMASK), ==, 0xffffffff);
>      out_reg(s, INTRSTATUS, 1);
> -    /* XXX: intercept IRQ, not seen in resp */
> +    /* check interrupt status */
>      g_assert_cmpuint(in_reg(s, INTRSTATUS), ==, 1);
> +    /* reading clears */
> +    g_assert_cmpuint(in_reg(s, INTRSTATUS), ==, 0);
> +    /* TODO intercept actual interrupt (needs qtest work) */
>
> -    /* invalid io */
> +    /* invalid register access */
>      out_reg(s, IVPOSITION, 1);
> +    in_reg(s, DOORBELL);
> +
> +    /* ring the (non-functional) doorbell */
>      out_reg(s, DOORBELL, 8 << 16);
>
> +    /* write shared memory */
>      for (i = 0; i < G_N_ELEMENTS(data); i++) {
>          data[i] = i;
>      }
>      qtest_memwrite(s->qtest, (uintptr_t)s->mem_base, data, sizeof(data));
>
> +    /* verify write */
>      for (i = 0; i < G_N_ELEMENTS(data); i++) {
>          g_assert_cmpuint(((uint32_t *)tmpshmem)[i], ==, i);
>      }
>
> +    /* read it back and verify read */
>      memset(data, 0, sizeof(data));
> -
>      qtest_memread(s->qtest, (uintptr_t)s->mem_base, data, sizeof(data));
>      for (i = 0; i < G_N_ELEMENTS(data); i++) {
>          g_assert_cmpuint(data[i], ==, i);
> --
> 2.4.3
>
>



-- 
Marc-André Lureau



reply via email to

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