tests/libqos: extract qvirtqueue_set_avail_idx()
Setting the vring's avail.idx can be useful for low-level VIRTIO tests, especially for testing error scenarios with invalid vrings. Extract it into a new function so that the next commit can add a test that uses this new test API. Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com> Acked-by: Fabiano Rosas <farosas@suse.de> Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org> Reviewed-by: Michael S. Tsirkin <mst@redhat.com> Message-ID: <20250922220149.498967-5-stefanha@redhat.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
This commit is contained in:
parent
3b11003fa6
commit
e06d96d5a9
2 changed files with 14 additions and 4 deletions
|
|
@ -265,8 +265,9 @@ void qvring_init(QTestState *qts, const QGuestAllocator *alloc, QVirtQueue *vq,
|
|||
|
||||
/* vq->avail->flags */
|
||||
qvirtio_writew(vq->vdev, qts, vq->avail, 0);
|
||||
/* vq->avail->idx */
|
||||
qvirtio_writew(vq->vdev, qts, vq->avail + 2, 0);
|
||||
|
||||
qvirtqueue_set_avail_idx(qts, vq->vdev, vq, 0);
|
||||
|
||||
/* vq->avail->used_event */
|
||||
qvirtio_writew(vq->vdev, qts, vq->avail + 4 + (2 * vq->size), 0);
|
||||
|
||||
|
|
@ -388,6 +389,13 @@ uint32_t qvirtqueue_add_indirect(QTestState *qts, QVirtQueue *vq,
|
|||
return vq->free_head++; /* Return and increase, in this order */
|
||||
}
|
||||
|
||||
void qvirtqueue_set_avail_idx(QTestState *qts, QVirtioDevice *d,
|
||||
QVirtQueue *vq, uint16_t idx)
|
||||
{
|
||||
/* vq->avail->idx */
|
||||
qvirtio_writew(d, qts, vq->avail + 2, idx);
|
||||
}
|
||||
|
||||
void qvirtqueue_kick(QTestState *qts, QVirtioDevice *d, QVirtQueue *vq,
|
||||
uint32_t free_head)
|
||||
{
|
||||
|
|
@ -400,8 +408,8 @@ void qvirtqueue_kick(QTestState *qts, QVirtioDevice *d, QVirtQueue *vq,
|
|||
|
||||
/* vq->avail->ring[idx % vq->size] */
|
||||
qvirtio_writew(d, qts, vq->avail + 4 + (2 * (idx % vq->size)), free_head);
|
||||
/* vq->avail->idx */
|
||||
qvirtio_writew(d, qts, vq->avail + 2, idx + 1);
|
||||
|
||||
qvirtqueue_set_avail_idx(qts, d, vq, idx + 1);
|
||||
|
||||
/* Must read after idx is updated */
|
||||
flags = qvirtio_readw(d, qts, vq->used);
|
||||
|
|
|
|||
|
|
@ -143,6 +143,8 @@ uint32_t qvirtqueue_add(QTestState *qts, QVirtQueue *vq, uint64_t data,
|
|||
uint32_t len, bool write, bool next);
|
||||
uint32_t qvirtqueue_add_indirect(QTestState *qts, QVirtQueue *vq,
|
||||
QVRingIndirectDesc *indirect);
|
||||
void qvirtqueue_set_avail_idx(QTestState *qts, QVirtioDevice *d,
|
||||
QVirtQueue *vq, uint16_t idx);
|
||||
void qvirtqueue_kick(QTestState *qts, QVirtioDevice *d, QVirtQueue *vq,
|
||||
uint32_t free_head);
|
||||
bool qvirtqueue_get_buf(QTestState *qts, QVirtQueue *vq, uint32_t *desc_idx,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue