mirror of
https://github.com/xemu-project/xemu.git
synced 2024-11-23 11:39:53 +00:00
vdpa: Extract get features part from vhost_vdpa_get_max_queue_pairs
To know the device features is needed for CVQ SVQ, so SVQ knows if it can handle all commands or not. Extract from vhost_vdpa_get_max_queue_pairs so we can reuse it. Signed-off-by: Eugenio Pérez <eperezma@redhat.com> Acked-by: Jason Wang <jasowang@redhat.com> Reviewed-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Jason Wang <jasowang@redhat.com>
This commit is contained in:
parent
2df4dd31e1
commit
8170ab3f43
@ -474,20 +474,24 @@ static NetClientState *net_vhost_vdpa_init(NetClientState *peer,
|
||||
return nc;
|
||||
}
|
||||
|
||||
static int vhost_vdpa_get_max_queue_pairs(int fd, int *has_cvq, Error **errp)
|
||||
static int vhost_vdpa_get_features(int fd, uint64_t *features, Error **errp)
|
||||
{
|
||||
int ret = ioctl(fd, VHOST_GET_FEATURES, features);
|
||||
if (unlikely(ret < 0)) {
|
||||
error_setg_errno(errp, errno,
|
||||
"Fail to query features from vhost-vDPA device");
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int vhost_vdpa_get_max_queue_pairs(int fd, uint64_t features,
|
||||
int *has_cvq, Error **errp)
|
||||
{
|
||||
unsigned long config_size = offsetof(struct vhost_vdpa_config, buf);
|
||||
g_autofree struct vhost_vdpa_config *config = NULL;
|
||||
__virtio16 *max_queue_pairs;
|
||||
uint64_t features;
|
||||
int ret;
|
||||
|
||||
ret = ioctl(fd, VHOST_GET_FEATURES, &features);
|
||||
if (ret) {
|
||||
error_setg(errp, "Fail to query features from vhost-vDPA device");
|
||||
return ret;
|
||||
}
|
||||
|
||||
if (features & (1 << VIRTIO_NET_F_CTRL_VQ)) {
|
||||
*has_cvq = 1;
|
||||
} else {
|
||||
@ -517,10 +521,11 @@ int net_init_vhost_vdpa(const Netdev *netdev, const char *name,
|
||||
NetClientState *peer, Error **errp)
|
||||
{
|
||||
const NetdevVhostVDPAOptions *opts;
|
||||
uint64_t features;
|
||||
int vdpa_device_fd;
|
||||
g_autofree NetClientState **ncs = NULL;
|
||||
NetClientState *nc;
|
||||
int queue_pairs, i, has_cvq = 0;
|
||||
int queue_pairs, r, i, has_cvq = 0;
|
||||
|
||||
assert(netdev->type == NET_CLIENT_DRIVER_VHOST_VDPA);
|
||||
opts = &netdev->u.vhost_vdpa;
|
||||
@ -534,7 +539,12 @@ int net_init_vhost_vdpa(const Netdev *netdev, const char *name,
|
||||
return -errno;
|
||||
}
|
||||
|
||||
queue_pairs = vhost_vdpa_get_max_queue_pairs(vdpa_device_fd,
|
||||
r = vhost_vdpa_get_features(vdpa_device_fd, &features, errp);
|
||||
if (unlikely(r < 0)) {
|
||||
return r;
|
||||
}
|
||||
|
||||
queue_pairs = vhost_vdpa_get_max_queue_pairs(vdpa_device_fd, features,
|
||||
&has_cvq, errp);
|
||||
if (queue_pairs < 0) {
|
||||
qemu_close(vdpa_device_fd);
|
||||
|
Loading…
Reference in New Issue
Block a user