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 <mar...@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