Hi Paolo, >> static inline void vring_set_avail_event(VduseVirtq *vq, uint16_t val) >> { >> - *((uint16_t *)&vq->vring.used->ring[vq->vring.num]) = htole16(val); >> + uint16_t *avail; >> + >> + avail = (uint16_t *)&vq->vring.used->ring[vq->vring.num]; >> + *avail = htole16(val); > > That this doesn't warn is basically a compiler bug. > > Please use memcpy instead, i.e. > > uint16_t val_le = htole16(val); > memcpy(&vq->vring.used->ring[vq->vring.num]), &val_le, sizeof(uint16_t));
excellent. Thanks for this. I included a version that fixes this for libvhost-user as well. Regards Marcel