qemu-devel
[Top][All Lists]
Advanced

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

Re: [RFC v2 10/10] libvduse: Fix assignment in vring_set_avail_event


From: Yongji Xie
Subject: Re: [RFC v2 10/10] libvduse: Fix assignment in vring_set_avail_event
Date: Wed, 21 Dec 2022 19:44:47 +0800

On Wed, Dec 21, 2022 at 3:27 AM Marcel Holtmann <marcel@holtmann.org> wrote:
>
>   CC       libvduse.o
> libvduse.c: In function ‘vring_set_avail_event’:
> libvduse.c:603:7: error: dereferencing type-punned pointer will break 
> strict-aliasing rules [-Werror=strict-aliasin]
>   603 |     *((uint16_t *)&vq->vring.used->ring[vq->vring.num]) = 
> htole16(val);
>       |      ~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>
> Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
> ---
>  subprojects/libvduse/libvduse.c | 5 ++++-
>  1 file changed, 4 insertions(+), 1 deletion(-)
>
> diff --git a/subprojects/libvduse/libvduse.c b/subprojects/libvduse/libvduse.c
> index 338ad5e352e7..51a4ba1b6878 100644
> --- a/subprojects/libvduse/libvduse.c
> +++ b/subprojects/libvduse/libvduse.c
> @@ -582,7 +582,10 @@ void vduse_queue_notify(VduseVirtq *vq)
>
>  static inline void vring_set_avail_event(VduseVirtq *vq, uint16_t val)
>  {
> -    *((uint16_t *)&vq->vring.used->ring[vq->vring.num]) = htole16(val);
> +    vring_used_elem_t *ring = &vq->vring.used->ring[vq->vring.num];
> +
> +    /* FIXME: Is this actually correct since this is __virtio32 id; */
> +    ring->id = htole16(val);
>  }

Can we do it as libvhost-user does?

static inline void
vring_set_avail_event(VuVirtq *vq, uint16_t val)
{
    uint16_t *avail;

    avail = (uint16_t *)&vq->vring.used->ring[vq->vring.num];
    *avail = htole16(val);
}

Thanks,
Yongji



reply via email to

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