On Wed, Apr 06, 2022 at 06:33:56PM +0100, Alex Bennée wrote: > Eric noticed while attempting to enable the vhost-user-blk-test for > Aarch64 that that things didn't work unless he put in a dummy > guest_malloc() at the start of the test. Without it > qvirtio_wait_used_elem() would assert when it reads a junk value for > idx resulting in: > > qvirtqueue_get_buf: idx:2401 last_idx:0 > qvirtqueue_get_buf: 0x7ffcb6d3fe74, (nil) > qvirtio_wait_used_elem: 3000000/0 > ERROR:../../tests/qtest/libqos/virtio.c:226:qvirtio_wait_used_elem: > assertion failed (got_desc_idx == desc_idx): (50331648 == 0) > Bail out! > ERROR:../../tests/qtest/libqos/virtio.c:226:qvirtio_wait_used_elem: assertion > failed (got_desc_idx == desc_idx): (50331648 == 0) > > What was actually happening is the guest_malloc() effectively pushed > the allocation of the vring into the next page which just happened to > have clear memory. After much tedious tracing of the code I could see > that qvring_init() does attempt initialise a bunch of the vring > structures but skips the vring->used.idx value. It is probably not > wise to assume guest memory is zeroed anyway. Once the ring is > properly initialised the hack is no longer needed to get things > working. > > Thanks-to: John Snow <[email protected]> for helping debug > Cc: Eric Auger <[email protected]> > Cc: Stefan Hajnoczi <[email protected]> > Cc: Michael S. Tsirkin <[email protected]> > Cc: Raphael Norwitz <[email protected]> > Signed-off-by: Alex Bennée <[email protected]> > --- > tests/qtest/libqos/virtio.c | 2 ++ > 1 file changed, 2 insertions(+)
Nice work! Reviewed-by: Stefan Hajnoczi <[email protected]>
signature.asc
Description: PGP signature
