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: Marcel Holtmann
Subject: Re: [RFC v2 10/10] libvduse: Fix assignment in vring_set_avail_event
Date: Wed, 21 Dec 2022 14:08:15 +0100

Hi Yongji,

>>  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);
> }

that will also work. Sending a v3 in a few moments.

Regards

Marcel




reply via email to

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