vhost_vdpa: support PACKED when setting-getting vring_base
[ Upstream commit beee7fdb5b56a46415a4992d28dd4c2d06eb52df ] Use the right structs for PACKED or split vqs when setting and getting the vring base. Fixes: 4c8cf31885f6 ("vhost: introduce vDPA-based backend") Signed-off-by: Shannon Nelson <shannon.nelson@amd.com> Message-Id: <20230424225031.18947-4-shannon.nelson@amd.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com> Acked-by: Jason Wang <jasowang@redhat.com> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
17882a3556
commit
9945284195
@ -392,7 +392,14 @@ static long vhost_vdpa_vring_ioctl(struct vhost_vdpa *v, unsigned int cmd,
|
||||
if (r)
|
||||
return r;
|
||||
|
||||
vq->last_avail_idx = vq_state.split.avail_index;
|
||||
if (vhost_has_feature(vq, VIRTIO_F_RING_PACKED)) {
|
||||
vq->last_avail_idx = vq_state.packed.last_avail_idx |
|
||||
(vq_state.packed.last_avail_counter << 15);
|
||||
vq->last_used_idx = vq_state.packed.last_used_idx |
|
||||
(vq_state.packed.last_used_counter << 15);
|
||||
} else {
|
||||
vq->last_avail_idx = vq_state.split.avail_index;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
@ -410,9 +417,15 @@ static long vhost_vdpa_vring_ioctl(struct vhost_vdpa *v, unsigned int cmd,
|
||||
break;
|
||||
|
||||
case VHOST_SET_VRING_BASE:
|
||||
vq_state.split.avail_index = vq->last_avail_idx;
|
||||
if (ops->set_vq_state(vdpa, idx, &vq_state))
|
||||
r = -EINVAL;
|
||||
if (vhost_has_feature(vq, VIRTIO_F_RING_PACKED)) {
|
||||
vq_state.packed.last_avail_idx = vq->last_avail_idx & 0x7fff;
|
||||
vq_state.packed.last_avail_counter = !!(vq->last_avail_idx & 0x8000);
|
||||
vq_state.packed.last_used_idx = vq->last_used_idx & 0x7fff;
|
||||
vq_state.packed.last_used_counter = !!(vq->last_used_idx & 0x8000);
|
||||
} else {
|
||||
vq_state.split.avail_index = vq->last_avail_idx;
|
||||
}
|
||||
r = ops->set_vq_state(vdpa, idx, &vq_state);
|
||||
break;
|
||||
|
||||
case VHOST_SET_VRING_CALL:
|
||||
|
Loading…
x
Reference in New Issue
Block a user