On Wed, Dec 21, 2022 at 3:27 AM Marcel Holtmann <mar...@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 <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); } Thanks, Yongji