1
0
mirror of https://passt.top/passt synced 2025-02-01 17:15:16 +00:00

vhost-user: Pass vu_dev to more virtio functions

vu_dev will be needed to log page update.

Add the parameter to:

  vring_used_write()
  vu_queue_fill_by_index()
  vu_queue_fill()
  vring_used_idx_set()
  vu_queue_flush()

The new parameter is unused for now.

Signed-off-by: Laurent Vivier <lvivier@redhat.com>
Signed-off-by: Stefano Brivio <sbrivio@redhat.com>
This commit is contained in:
Laurent Vivier 2024-12-19 12:13:55 +01:00 committed by Stefano Brivio
parent b04195c60f
commit 538312af19
3 changed files with 32 additions and 18 deletions

View File

@ -580,28 +580,34 @@ bool vu_queue_rewind(struct vu_virtq *vq, unsigned int num)
/** /**
* vring_used_write() - Write an entry in the used ring * vring_used_write() - Write an entry in the used ring
* @dev: Vhost-user device
* @vq: Virtqueue * @vq: Virtqueue
* @uelem: Entry to write * @uelem: Entry to write
* @i: Index of the entry in the used ring * @i: Index of the entry in the used ring
*/ */
static inline void vring_used_write(struct vu_virtq *vq, static inline void vring_used_write(const struct vu_dev *vdev,
struct vu_virtq *vq,
const struct vring_used_elem *uelem, int i) const struct vring_used_elem *uelem, int i)
{ {
struct vring_used *used = vq->vring.used; struct vring_used *used = vq->vring.used;
used->ring[i] = *uelem; used->ring[i] = *uelem;
(void)vdev;
} }
/** /**
* vu_queue_fill_by_index() - Update information of a descriptor ring entry * vu_queue_fill_by_index() - Update information of a descriptor ring entry
* in the used ring * in the used ring
* @dev: Vhost-user device
* @vq: Virtqueue * @vq: Virtqueue
* @index: Descriptor ring index * @index: Descriptor ring index
* @len: Size of the element * @len: Size of the element
* @idx: Used ring entry index * @idx: Used ring entry index
*/ */
void vu_queue_fill_by_index(struct vu_virtq *vq, unsigned int index, void vu_queue_fill_by_index(const struct vu_dev *vdev, struct vu_virtq *vq,
unsigned int len, unsigned int idx) unsigned int index, unsigned int len,
unsigned int idx)
{ {
struct vring_used_elem uelem; struct vring_used_elem uelem;
@ -612,7 +618,7 @@ void vu_queue_fill_by_index(struct vu_virtq *vq, unsigned int index,
uelem.id = htole32(index); uelem.id = htole32(index);
uelem.len = htole32(len); uelem.len = htole32(len);
vring_used_write(vq, &uelem, idx); vring_used_write(vdev, vq, &uelem, idx);
} }
/** /**
@ -623,30 +629,36 @@ void vu_queue_fill_by_index(struct vu_virtq *vq, unsigned int index,
* @len: Size of the element * @len: Size of the element
* @idx: Used ring entry index * @idx: Used ring entry index
*/ */
void vu_queue_fill(struct vu_virtq *vq, const struct vu_virtq_element *elem, void vu_queue_fill(const struct vu_dev *vdev, struct vu_virtq *vq,
unsigned int len, unsigned int idx) const struct vu_virtq_element *elem, unsigned int len,
unsigned int idx)
{ {
vu_queue_fill_by_index(vq, elem->index, len, idx); vu_queue_fill_by_index(vdev, vq, elem->index, len, idx);
} }
/** /**
* vring_used_idx_set() - Set the descriptor ring current index * vring_used_idx_set() - Set the descriptor ring current index
* @dev: Vhost-user device
* @vq: Virtqueue * @vq: Virtqueue
* @val: Value to set in the index * @val: Value to set in the index
*/ */
static inline void vring_used_idx_set(struct vu_virtq *vq, uint16_t val) static inline void vring_used_idx_set(const struct vu_dev *vdev,
struct vu_virtq *vq, uint16_t val)
{ {
vq->vring.used->idx = htole16(val); vq->vring.used->idx = htole16(val);
(void)vdev;
vq->used_idx = val; vq->used_idx = val;
} }
/** /**
* vu_queue_flush() - Flush the virtqueue * vu_queue_flush() - Flush the virtqueue
* @dev: Vhost-user device
* @vq: Virtqueue * @vq: Virtqueue
* @count: Number of entry to flush * @count: Number of entry to flush
*/ */
void vu_queue_flush(struct vu_virtq *vq, unsigned int count) void vu_queue_flush(const struct vu_dev *vdev, struct vu_virtq *vq,
unsigned int count)
{ {
uint16_t old, new; uint16_t old, new;
@ -658,7 +670,7 @@ void vu_queue_flush(struct vu_virtq *vq, unsigned int count)
old = vq->used_idx; old = vq->used_idx;
new = old + count; new = old + count;
vring_used_idx_set(vq, new); vring_used_idx_set(vdev, vq, new);
vq->inuse -= count; vq->inuse -= count;
if ((uint16_t)(new - vq->signalled_used) < (uint16_t)(new - old)) if ((uint16_t)(new - vq->signalled_used) < (uint16_t)(new - old))
vq->signalled_used_valid = false; vq->signalled_used_valid = false;

View File

@ -177,10 +177,12 @@ int vu_queue_pop(const struct vu_dev *dev, struct vu_virtq *vq,
void vu_queue_detach_element(struct vu_virtq *vq); void vu_queue_detach_element(struct vu_virtq *vq);
void vu_queue_unpop(struct vu_virtq *vq); void vu_queue_unpop(struct vu_virtq *vq);
bool vu_queue_rewind(struct vu_virtq *vq, unsigned int num); bool vu_queue_rewind(struct vu_virtq *vq, unsigned int num);
void vu_queue_fill_by_index(struct vu_virtq *vq, unsigned int index, void vu_queue_fill_by_index(const struct vu_dev *vdev, struct vu_virtq *vq,
unsigned int len, unsigned int idx); unsigned int index, unsigned int len,
void vu_queue_fill(struct vu_virtq *vq, unsigned int idx);
void vu_queue_fill(const struct vu_dev *vdev, struct vu_virtq *vq,
const struct vu_virtq_element *elem, unsigned int len, const struct vu_virtq_element *elem, unsigned int len,
unsigned int idx); unsigned int idx);
void vu_queue_flush(struct vu_virtq *vq, unsigned int count); void vu_queue_flush(const struct vu_dev *vdev, struct vu_virtq *vq,
unsigned int count);
#endif /* VIRTIO_H */ #endif /* VIRTIO_H */

View File

@ -142,9 +142,9 @@ void vu_flush(const struct vu_dev *vdev, struct vu_virtq *vq,
int i; int i;
for (i = 0; i < elem_cnt; i++) for (i = 0; i < elem_cnt; i++)
vu_queue_fill(vq, &elem[i], elem[i].in_sg[0].iov_len, i); vu_queue_fill(vdev, vq, &elem[i], elem[i].in_sg[0].iov_len, i);
vu_queue_flush(vq, elem_cnt); vu_queue_flush(vdev, vq, elem_cnt);
vu_queue_notify(vdev, vq); vu_queue_notify(vdev, vq);
} }
@ -210,8 +210,8 @@ static void vu_handle_tx(struct vu_dev *vdev, int index,
int i; int i;
for (i = 0; i < count; i++) for (i = 0; i < count; i++)
vu_queue_fill(vq, &elem[i], 0, i); vu_queue_fill(vdev, vq, &elem[i], 0, i);
vu_queue_flush(vq, count); vu_queue_flush(vdev, vq, count);
vu_queue_notify(vdev, vq); vu_queue_notify(vdev, vq);
} }
} }