Commit a64917bc authored by Eli Cohen's avatar Eli Cohen Committed by Michael S. Tsirkin

vdpa: Provide interface to read driver features

Provide an interface to read the negotiated features. This is needed
when building the netlink message in vdpa_dev_net_config_fill().

Also fix the implementation of vdpa_dev_net_config_fill() to use the
negotiated features instead of the device features.

To make APIs clearer, make the following name changes to struct
vdpa_config_ops so they better describe their operations:

get_features -> get_device_features
set_features -> set_driver_features

Finally, add get_driver_features to return the negotiated features and
add implementation to all the upstream drivers.
Acked-by: default avatarJason Wang <jasowang@redhat.com>
Signed-off-by: default avatarEli Cohen <elic@nvidia.com>
Link: https://lore.kernel.org/r/20220105114646.577224-2-elic@nvidia.comSigned-off-by: default avatarMichael S. Tsirkin <mst@redhat.com>
parent 870aaff9
...@@ -58,7 +58,7 @@ static struct virtio_pci_legacy_device *vdpa_to_ldev(struct vdpa_device *vdpa) ...@@ -58,7 +58,7 @@ static struct virtio_pci_legacy_device *vdpa_to_ldev(struct vdpa_device *vdpa)
return &eni_vdpa->ldev; return &eni_vdpa->ldev;
} }
static u64 eni_vdpa_get_features(struct vdpa_device *vdpa) static u64 eni_vdpa_get_device_features(struct vdpa_device *vdpa)
{ {
struct virtio_pci_legacy_device *ldev = vdpa_to_ldev(vdpa); struct virtio_pci_legacy_device *ldev = vdpa_to_ldev(vdpa);
u64 features = vp_legacy_get_features(ldev); u64 features = vp_legacy_get_features(ldev);
...@@ -69,7 +69,7 @@ static u64 eni_vdpa_get_features(struct vdpa_device *vdpa) ...@@ -69,7 +69,7 @@ static u64 eni_vdpa_get_features(struct vdpa_device *vdpa)
return features; return features;
} }
static int eni_vdpa_set_features(struct vdpa_device *vdpa, u64 features) static int eni_vdpa_set_driver_features(struct vdpa_device *vdpa, u64 features)
{ {
struct virtio_pci_legacy_device *ldev = vdpa_to_ldev(vdpa); struct virtio_pci_legacy_device *ldev = vdpa_to_ldev(vdpa);
...@@ -84,6 +84,13 @@ static int eni_vdpa_set_features(struct vdpa_device *vdpa, u64 features) ...@@ -84,6 +84,13 @@ static int eni_vdpa_set_features(struct vdpa_device *vdpa, u64 features)
return 0; return 0;
} }
static u64 eni_vdpa_get_driver_features(struct vdpa_device *vdpa)
{
struct virtio_pci_legacy_device *ldev = vdpa_to_ldev(vdpa);
return vp_legacy_get_driver_features(ldev);
}
static u8 eni_vdpa_get_status(struct vdpa_device *vdpa) static u8 eni_vdpa_get_status(struct vdpa_device *vdpa)
{ {
struct virtio_pci_legacy_device *ldev = vdpa_to_ldev(vdpa); struct virtio_pci_legacy_device *ldev = vdpa_to_ldev(vdpa);
...@@ -401,8 +408,9 @@ static void eni_vdpa_set_config_cb(struct vdpa_device *vdpa, ...@@ -401,8 +408,9 @@ static void eni_vdpa_set_config_cb(struct vdpa_device *vdpa,
} }
static const struct vdpa_config_ops eni_vdpa_ops = { static const struct vdpa_config_ops eni_vdpa_ops = {
.get_features = eni_vdpa_get_features, .get_device_features = eni_vdpa_get_device_features,
.set_features = eni_vdpa_set_features, .set_driver_features = eni_vdpa_set_driver_features,
.get_driver_features = eni_vdpa_get_driver_features,
.get_status = eni_vdpa_get_status, .get_status = eni_vdpa_get_status,
.set_status = eni_vdpa_set_status, .set_status = eni_vdpa_set_status,
.reset = eni_vdpa_reset, .reset = eni_vdpa_reset,
......
...@@ -169,7 +169,7 @@ static struct ifcvf_hw *vdpa_to_vf(struct vdpa_device *vdpa_dev) ...@@ -169,7 +169,7 @@ static struct ifcvf_hw *vdpa_to_vf(struct vdpa_device *vdpa_dev)
return &adapter->vf; return &adapter->vf;
} }
static u64 ifcvf_vdpa_get_features(struct vdpa_device *vdpa_dev) static u64 ifcvf_vdpa_get_device_features(struct vdpa_device *vdpa_dev)
{ {
struct ifcvf_adapter *adapter = vdpa_to_adapter(vdpa_dev); struct ifcvf_adapter *adapter = vdpa_to_adapter(vdpa_dev);
struct ifcvf_hw *vf = vdpa_to_vf(vdpa_dev); struct ifcvf_hw *vf = vdpa_to_vf(vdpa_dev);
...@@ -187,7 +187,7 @@ static u64 ifcvf_vdpa_get_features(struct vdpa_device *vdpa_dev) ...@@ -187,7 +187,7 @@ static u64 ifcvf_vdpa_get_features(struct vdpa_device *vdpa_dev)
return features; return features;
} }
static int ifcvf_vdpa_set_features(struct vdpa_device *vdpa_dev, u64 features) static int ifcvf_vdpa_set_driver_features(struct vdpa_device *vdpa_dev, u64 features)
{ {
struct ifcvf_hw *vf = vdpa_to_vf(vdpa_dev); struct ifcvf_hw *vf = vdpa_to_vf(vdpa_dev);
int ret; int ret;
...@@ -201,6 +201,13 @@ static int ifcvf_vdpa_set_features(struct vdpa_device *vdpa_dev, u64 features) ...@@ -201,6 +201,13 @@ static int ifcvf_vdpa_set_features(struct vdpa_device *vdpa_dev, u64 features)
return 0; return 0;
} }
static u64 ifcvf_vdpa_get_driver_features(struct vdpa_device *vdpa_dev)
{
struct ifcvf_hw *vf = vdpa_to_vf(vdpa_dev);
return vf->req_features;
}
static u8 ifcvf_vdpa_get_status(struct vdpa_device *vdpa_dev) static u8 ifcvf_vdpa_get_status(struct vdpa_device *vdpa_dev)
{ {
struct ifcvf_hw *vf = vdpa_to_vf(vdpa_dev); struct ifcvf_hw *vf = vdpa_to_vf(vdpa_dev);
...@@ -426,8 +433,9 @@ static struct vdpa_notification_area ifcvf_get_vq_notification(struct vdpa_devic ...@@ -426,8 +433,9 @@ static struct vdpa_notification_area ifcvf_get_vq_notification(struct vdpa_devic
* implemented set_map()/dma_map()/dma_unmap() * implemented set_map()/dma_map()/dma_unmap()
*/ */
static const struct vdpa_config_ops ifc_vdpa_ops = { static const struct vdpa_config_ops ifc_vdpa_ops = {
.get_features = ifcvf_vdpa_get_features, .get_device_features = ifcvf_vdpa_get_device_features,
.set_features = ifcvf_vdpa_set_features, .set_driver_features = ifcvf_vdpa_set_driver_features,
.get_driver_features = ifcvf_vdpa_get_driver_features,
.get_status = ifcvf_vdpa_get_status, .get_status = ifcvf_vdpa_get_status,
.set_status = ifcvf_vdpa_set_status, .set_status = ifcvf_vdpa_set_status,
.reset = ifcvf_vdpa_reset, .reset = ifcvf_vdpa_reset,
......
...@@ -1878,7 +1878,7 @@ static u64 mlx_to_vritio_features(u16 dev_features) ...@@ -1878,7 +1878,7 @@ static u64 mlx_to_vritio_features(u16 dev_features)
return result; return result;
} }
static u64 mlx5_vdpa_get_features(struct vdpa_device *vdev) static u64 mlx5_vdpa_get_device_features(struct vdpa_device *vdev)
{ {
struct mlx5_vdpa_dev *mvdev = to_mvdev(vdev); struct mlx5_vdpa_dev *mvdev = to_mvdev(vdev);
struct mlx5_vdpa_net *ndev = to_mlx5_vdpa_ndev(mvdev); struct mlx5_vdpa_net *ndev = to_mlx5_vdpa_ndev(mvdev);
...@@ -1971,7 +1971,7 @@ static void update_cvq_info(struct mlx5_vdpa_dev *mvdev) ...@@ -1971,7 +1971,7 @@ static void update_cvq_info(struct mlx5_vdpa_dev *mvdev)
} }
} }
static int mlx5_vdpa_set_features(struct vdpa_device *vdev, u64 features) static int mlx5_vdpa_set_driver_features(struct vdpa_device *vdev, u64 features)
{ {
struct mlx5_vdpa_dev *mvdev = to_mvdev(vdev); struct mlx5_vdpa_dev *mvdev = to_mvdev(vdev);
struct mlx5_vdpa_net *ndev = to_mlx5_vdpa_ndev(mvdev); struct mlx5_vdpa_net *ndev = to_mlx5_vdpa_ndev(mvdev);
...@@ -2338,6 +2338,13 @@ static int mlx5_get_vq_irq(struct vdpa_device *vdv, u16 idx) ...@@ -2338,6 +2338,13 @@ static int mlx5_get_vq_irq(struct vdpa_device *vdv, u16 idx)
return -EOPNOTSUPP; return -EOPNOTSUPP;
} }
static u64 mlx5_vdpa_get_driver_features(struct vdpa_device *vdev)
{
struct mlx5_vdpa_dev *mvdev = to_mvdev(vdev);
return mvdev->actual_features;
}
static const struct vdpa_config_ops mlx5_vdpa_ops = { static const struct vdpa_config_ops mlx5_vdpa_ops = {
.set_vq_address = mlx5_vdpa_set_vq_address, .set_vq_address = mlx5_vdpa_set_vq_address,
.set_vq_num = mlx5_vdpa_set_vq_num, .set_vq_num = mlx5_vdpa_set_vq_num,
...@@ -2350,8 +2357,9 @@ static const struct vdpa_config_ops mlx5_vdpa_ops = { ...@@ -2350,8 +2357,9 @@ static const struct vdpa_config_ops mlx5_vdpa_ops = {
.get_vq_notification = mlx5_get_vq_notification, .get_vq_notification = mlx5_get_vq_notification,
.get_vq_irq = mlx5_get_vq_irq, .get_vq_irq = mlx5_get_vq_irq,
.get_vq_align = mlx5_vdpa_get_vq_align, .get_vq_align = mlx5_vdpa_get_vq_align,
.get_features = mlx5_vdpa_get_features, .get_device_features = mlx5_vdpa_get_device_features,
.set_features = mlx5_vdpa_set_features, .set_driver_features = mlx5_vdpa_set_driver_features,
.get_driver_features = mlx5_vdpa_get_driver_features,
.set_config_cb = mlx5_vdpa_set_config_cb, .set_config_cb = mlx5_vdpa_set_config_cb,
.get_vq_num_max = mlx5_vdpa_get_vq_num_max, .get_vq_num_max = mlx5_vdpa_get_vq_num_max,
.get_device_id = mlx5_vdpa_get_device_id, .get_device_id = mlx5_vdpa_get_device_id,
......
...@@ -808,7 +808,7 @@ static int vdpa_dev_net_config_fill(struct vdpa_device *vdev, struct sk_buff *ms ...@@ -808,7 +808,7 @@ static int vdpa_dev_net_config_fill(struct vdpa_device *vdev, struct sk_buff *ms
if (nla_put_u16(msg, VDPA_ATTR_DEV_NET_CFG_MTU, val_u16)) if (nla_put_u16(msg, VDPA_ATTR_DEV_NET_CFG_MTU, val_u16))
return -EMSGSIZE; return -EMSGSIZE;
features = vdev->config->get_features(vdev); features = vdev->config->get_driver_features(vdev);
return vdpa_dev_net_mq_config_fill(vdev, msg, features, &config); return vdpa_dev_net_mq_config_fill(vdev, msg, features, &config);
} }
......
...@@ -399,14 +399,14 @@ static u32 vdpasim_get_vq_align(struct vdpa_device *vdpa) ...@@ -399,14 +399,14 @@ static u32 vdpasim_get_vq_align(struct vdpa_device *vdpa)
return VDPASIM_QUEUE_ALIGN; return VDPASIM_QUEUE_ALIGN;
} }
static u64 vdpasim_get_features(struct vdpa_device *vdpa) static u64 vdpasim_get_device_features(struct vdpa_device *vdpa)
{ {
struct vdpasim *vdpasim = vdpa_to_sim(vdpa); struct vdpasim *vdpasim = vdpa_to_sim(vdpa);
return vdpasim->dev_attr.supported_features; return vdpasim->dev_attr.supported_features;
} }
static int vdpasim_set_features(struct vdpa_device *vdpa, u64 features) static int vdpasim_set_driver_features(struct vdpa_device *vdpa, u64 features)
{ {
struct vdpasim *vdpasim = vdpa_to_sim(vdpa); struct vdpasim *vdpasim = vdpa_to_sim(vdpa);
...@@ -419,6 +419,13 @@ static int vdpasim_set_features(struct vdpa_device *vdpa, u64 features) ...@@ -419,6 +419,13 @@ static int vdpasim_set_features(struct vdpa_device *vdpa, u64 features)
return 0; return 0;
} }
static u64 vdpasim_get_driver_features(struct vdpa_device *vdpa)
{
struct vdpasim *vdpasim = vdpa_to_sim(vdpa);
return vdpasim->features;
}
static void vdpasim_set_config_cb(struct vdpa_device *vdpa, static void vdpasim_set_config_cb(struct vdpa_device *vdpa,
struct vdpa_callback *cb) struct vdpa_callback *cb)
{ {
...@@ -613,8 +620,9 @@ static const struct vdpa_config_ops vdpasim_config_ops = { ...@@ -613,8 +620,9 @@ static const struct vdpa_config_ops vdpasim_config_ops = {
.set_vq_state = vdpasim_set_vq_state, .set_vq_state = vdpasim_set_vq_state,
.get_vq_state = vdpasim_get_vq_state, .get_vq_state = vdpasim_get_vq_state,
.get_vq_align = vdpasim_get_vq_align, .get_vq_align = vdpasim_get_vq_align,
.get_features = vdpasim_get_features, .get_device_features = vdpasim_get_device_features,
.set_features = vdpasim_set_features, .set_driver_features = vdpasim_set_driver_features,
.get_driver_features = vdpasim_get_driver_features,
.set_config_cb = vdpasim_set_config_cb, .set_config_cb = vdpasim_set_config_cb,
.get_vq_num_max = vdpasim_get_vq_num_max, .get_vq_num_max = vdpasim_get_vq_num_max,
.get_device_id = vdpasim_get_device_id, .get_device_id = vdpasim_get_device_id,
...@@ -642,8 +650,9 @@ static const struct vdpa_config_ops vdpasim_batch_config_ops = { ...@@ -642,8 +650,9 @@ static const struct vdpa_config_ops vdpasim_batch_config_ops = {
.set_vq_state = vdpasim_set_vq_state, .set_vq_state = vdpasim_set_vq_state,
.get_vq_state = vdpasim_get_vq_state, .get_vq_state = vdpasim_get_vq_state,
.get_vq_align = vdpasim_get_vq_align, .get_vq_align = vdpasim_get_vq_align,
.get_features = vdpasim_get_features, .get_device_features = vdpasim_get_device_features,
.set_features = vdpasim_set_features, .set_driver_features = vdpasim_set_driver_features,
.get_driver_features = vdpasim_get_driver_features,
.set_config_cb = vdpasim_set_config_cb, .set_config_cb = vdpasim_set_config_cb,
.get_vq_num_max = vdpasim_get_vq_num_max, .get_vq_num_max = vdpasim_get_vq_num_max,
.get_device_id = vdpasim_get_device_id, .get_device_id = vdpasim_get_device_id,
......
...@@ -573,14 +573,14 @@ static u32 vduse_vdpa_get_vq_align(struct vdpa_device *vdpa) ...@@ -573,14 +573,14 @@ static u32 vduse_vdpa_get_vq_align(struct vdpa_device *vdpa)
return dev->vq_align; return dev->vq_align;
} }
static u64 vduse_vdpa_get_features(struct vdpa_device *vdpa) static u64 vduse_vdpa_get_device_features(struct vdpa_device *vdpa)
{ {
struct vduse_dev *dev = vdpa_to_vduse(vdpa); struct vduse_dev *dev = vdpa_to_vduse(vdpa);
return dev->device_features; return dev->device_features;
} }
static int vduse_vdpa_set_features(struct vdpa_device *vdpa, u64 features) static int vduse_vdpa_set_driver_features(struct vdpa_device *vdpa, u64 features)
{ {
struct vduse_dev *dev = vdpa_to_vduse(vdpa); struct vduse_dev *dev = vdpa_to_vduse(vdpa);
...@@ -588,6 +588,13 @@ static int vduse_vdpa_set_features(struct vdpa_device *vdpa, u64 features) ...@@ -588,6 +588,13 @@ static int vduse_vdpa_set_features(struct vdpa_device *vdpa, u64 features)
return 0; return 0;
} }
static u64 vduse_vdpa_get_driver_features(struct vdpa_device *vdpa)
{
struct vduse_dev *dev = vdpa_to_vduse(vdpa);
return dev->driver_features;
}
static void vduse_vdpa_set_config_cb(struct vdpa_device *vdpa, static void vduse_vdpa_set_config_cb(struct vdpa_device *vdpa,
struct vdpa_callback *cb) struct vdpa_callback *cb)
{ {
...@@ -721,8 +728,9 @@ static const struct vdpa_config_ops vduse_vdpa_config_ops = { ...@@ -721,8 +728,9 @@ static const struct vdpa_config_ops vduse_vdpa_config_ops = {
.set_vq_state = vduse_vdpa_set_vq_state, .set_vq_state = vduse_vdpa_set_vq_state,
.get_vq_state = vduse_vdpa_get_vq_state, .get_vq_state = vduse_vdpa_get_vq_state,
.get_vq_align = vduse_vdpa_get_vq_align, .get_vq_align = vduse_vdpa_get_vq_align,
.get_features = vduse_vdpa_get_features, .get_device_features = vduse_vdpa_get_device_features,
.set_features = vduse_vdpa_set_features, .set_driver_features = vduse_vdpa_set_driver_features,
.get_driver_features = vduse_vdpa_get_driver_features,
.set_config_cb = vduse_vdpa_set_config_cb, .set_config_cb = vduse_vdpa_set_config_cb,
.get_vq_num_max = vduse_vdpa_get_vq_num_max, .get_vq_num_max = vduse_vdpa_get_vq_num_max,
.get_device_id = vduse_vdpa_get_device_id, .get_device_id = vduse_vdpa_get_device_id,
......
...@@ -53,14 +53,14 @@ static struct virtio_pci_modern_device *vdpa_to_mdev(struct vdpa_device *vdpa) ...@@ -53,14 +53,14 @@ static struct virtio_pci_modern_device *vdpa_to_mdev(struct vdpa_device *vdpa)
return &vp_vdpa->mdev; return &vp_vdpa->mdev;
} }
static u64 vp_vdpa_get_features(struct vdpa_device *vdpa) static u64 vp_vdpa_get_device_features(struct vdpa_device *vdpa)
{ {
struct virtio_pci_modern_device *mdev = vdpa_to_mdev(vdpa); struct virtio_pci_modern_device *mdev = vdpa_to_mdev(vdpa);
return vp_modern_get_features(mdev); return vp_modern_get_features(mdev);
} }
static int vp_vdpa_set_features(struct vdpa_device *vdpa, u64 features) static int vp_vdpa_set_driver_features(struct vdpa_device *vdpa, u64 features)
{ {
struct virtio_pci_modern_device *mdev = vdpa_to_mdev(vdpa); struct virtio_pci_modern_device *mdev = vdpa_to_mdev(vdpa);
...@@ -69,6 +69,13 @@ static int vp_vdpa_set_features(struct vdpa_device *vdpa, u64 features) ...@@ -69,6 +69,13 @@ static int vp_vdpa_set_features(struct vdpa_device *vdpa, u64 features)
return 0; return 0;
} }
static u64 vp_vdpa_get_driver_features(struct vdpa_device *vdpa)
{
struct virtio_pci_modern_device *mdev = vdpa_to_mdev(vdpa);
return vp_modern_get_driver_features(mdev);
}
static u8 vp_vdpa_get_status(struct vdpa_device *vdpa) static u8 vp_vdpa_get_status(struct vdpa_device *vdpa)
{ {
struct virtio_pci_modern_device *mdev = vdpa_to_mdev(vdpa); struct virtio_pci_modern_device *mdev = vdpa_to_mdev(vdpa);
...@@ -415,8 +422,9 @@ vp_vdpa_get_vq_notification(struct vdpa_device *vdpa, u16 qid) ...@@ -415,8 +422,9 @@ vp_vdpa_get_vq_notification(struct vdpa_device *vdpa, u16 qid)
} }
static const struct vdpa_config_ops vp_vdpa_ops = { static const struct vdpa_config_ops vp_vdpa_ops = {
.get_features = vp_vdpa_get_features, .get_device_features = vp_vdpa_get_device_features,
.set_features = vp_vdpa_set_features, .set_driver_features = vp_vdpa_set_driver_features,
.get_driver_features = vp_vdpa_get_driver_features,
.get_status = vp_vdpa_get_status, .get_status = vp_vdpa_get_status,
.set_status = vp_vdpa_set_status, .set_status = vp_vdpa_set_status,
.reset = vp_vdpa_reset, .reset = vp_vdpa_reset,
......
...@@ -262,7 +262,7 @@ static long vhost_vdpa_get_features(struct vhost_vdpa *v, u64 __user *featurep) ...@@ -262,7 +262,7 @@ static long vhost_vdpa_get_features(struct vhost_vdpa *v, u64 __user *featurep)
const struct vdpa_config_ops *ops = vdpa->config; const struct vdpa_config_ops *ops = vdpa->config;
u64 features; u64 features;
features = ops->get_features(vdpa); features = ops->get_device_features(vdpa);
if (copy_to_user(featurep, &features, sizeof(features))) if (copy_to_user(featurep, &features, sizeof(features)))
return -EFAULT; return -EFAULT;
......
...@@ -308,7 +308,7 @@ static u64 virtio_vdpa_get_features(struct virtio_device *vdev) ...@@ -308,7 +308,7 @@ static u64 virtio_vdpa_get_features(struct virtio_device *vdev)
struct vdpa_device *vdpa = vd_get_vdpa(vdev); struct vdpa_device *vdpa = vd_get_vdpa(vdev);
const struct vdpa_config_ops *ops = vdpa->config; const struct vdpa_config_ops *ops = vdpa->config;
return ops->get_features(vdpa); return ops->get_device_features(vdpa);
} }
static int virtio_vdpa_finalize_features(struct virtio_device *vdev) static int virtio_vdpa_finalize_features(struct virtio_device *vdev)
......
...@@ -171,14 +171,17 @@ struct vdpa_map_file { ...@@ -171,14 +171,17 @@ struct vdpa_map_file {
* for the device * for the device
* @vdev: vdpa device * @vdev: vdpa device
* Returns virtqueue algin requirement * Returns virtqueue algin requirement
* @get_features: Get virtio features supported by the device * @get_device_features: Get virtio features supported by the device
* @vdev: vdpa device * @vdev: vdpa device
* Returns the virtio features support by the * Returns the virtio features support by the
* device * device
* @set_features: Set virtio features supported by the driver * @set_driver_features: Set virtio features supported by the driver
* @vdev: vdpa device * @vdev: vdpa device
* @features: feature support by the driver * @features: feature support by the driver
* Returns integer: success (0) or error (< 0) * Returns integer: success (0) or error (< 0)
* @get_driver_features: Get the virtio driver features in action
* @vdev: vdpa device
* Returns the virtio features accepted
* @set_config_cb: Set the config interrupt callback * @set_config_cb: Set the config interrupt callback
* @vdev: vdpa device * @vdev: vdpa device
* @cb: virtio-vdev interrupt callback structure * @cb: virtio-vdev interrupt callback structure
...@@ -278,8 +281,9 @@ struct vdpa_config_ops { ...@@ -278,8 +281,9 @@ struct vdpa_config_ops {
/* Device ops */ /* Device ops */
u32 (*get_vq_align)(struct vdpa_device *vdev); u32 (*get_vq_align)(struct vdpa_device *vdev);
u64 (*get_features)(struct vdpa_device *vdev); u64 (*get_device_features)(struct vdpa_device *vdev);
int (*set_features)(struct vdpa_device *vdev, u64 features); int (*set_driver_features)(struct vdpa_device *vdev, u64 features);
u64 (*get_driver_features)(struct vdpa_device *vdev);
void (*set_config_cb)(struct vdpa_device *vdev, void (*set_config_cb)(struct vdpa_device *vdev,
struct vdpa_callback *cb); struct vdpa_callback *cb);
u16 (*get_vq_num_max)(struct vdpa_device *vdev); u16 (*get_vq_num_max)(struct vdpa_device *vdev);
...@@ -397,7 +401,7 @@ static inline int vdpa_set_features(struct vdpa_device *vdev, u64 features) ...@@ -397,7 +401,7 @@ static inline int vdpa_set_features(struct vdpa_device *vdev, u64 features)
const struct vdpa_config_ops *ops = vdev->config; const struct vdpa_config_ops *ops = vdev->config;
vdev->features_valid = true; vdev->features_valid = true;
return ops->set_features(vdev, features); return ops->set_driver_features(vdev, features);
} }
void vdpa_get_config(struct vdpa_device *vdev, unsigned int offset, void vdpa_get_config(struct vdpa_device *vdev, unsigned int offset,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment