vdpa: add get_backend_features vdpa operation
This operation allow vdpa parent to expose its own backend feature bits. Next patches introduce a feature not compatible with all parent drivers: the ability to enable vq after driver_ok. Each parent must declare if it allows it or not. Signed-off-by: Eugenio Pérez <eperezma@redhat.com> Acked-by: Shannon Nelson <shannon.nelson@amd.com> Message-Id: <20230609092127.170673-4-eperezma@redhat.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
This commit is contained in:
parent
9f09fd6171
commit
b63e5c70c3
@ -403,6 +403,17 @@ static long vhost_vdpa_get_features(struct vhost_vdpa *v, u64 __user *featurep)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static u64 vhost_vdpa_get_backend_features(const struct vhost_vdpa *v)
|
||||
{
|
||||
struct vdpa_device *vdpa = v->vdpa;
|
||||
const struct vdpa_config_ops *ops = vdpa->config;
|
||||
|
||||
if (!ops->get_backend_features)
|
||||
return 0;
|
||||
else
|
||||
return ops->get_backend_features(vdpa);
|
||||
}
|
||||
|
||||
static long vhost_vdpa_set_features(struct vhost_vdpa *v, u64 __user *featurep)
|
||||
{
|
||||
struct vdpa_device *vdpa = v->vdpa;
|
||||
@ -742,6 +753,7 @@ static long vhost_vdpa_unlocked_ioctl(struct file *filep,
|
||||
features |= BIT_ULL(VHOST_BACKEND_F_SUSPEND);
|
||||
if (vhost_vdpa_can_resume(v))
|
||||
features |= BIT_ULL(VHOST_BACKEND_F_RESUME);
|
||||
features |= vhost_vdpa_get_backend_features(v);
|
||||
if (copy_to_user(featurep, &features, sizeof(features)))
|
||||
r = -EFAULT;
|
||||
break;
|
||||
|
@ -208,6 +208,9 @@ struct vdpa_map_file {
|
||||
* @vdev: vdpa device
|
||||
* Returns the virtio features support by the
|
||||
* device
|
||||
* @get_backend_features: Get parent-specific backend features (optional)
|
||||
* Returns the vdpa features supported by the
|
||||
* device.
|
||||
* @set_driver_features: Set virtio features supported by the driver
|
||||
* @vdev: vdpa device
|
||||
* @features: feature support by the driver
|
||||
@ -358,6 +361,7 @@ struct vdpa_config_ops {
|
||||
u32 (*get_vq_align)(struct vdpa_device *vdev);
|
||||
u32 (*get_vq_group)(struct vdpa_device *vdev, u16 idx);
|
||||
u64 (*get_device_features)(struct vdpa_device *vdev);
|
||||
u64 (*get_backend_features)(const struct vdpa_device *vdev);
|
||||
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,
|
||||
|
Loading…
Reference in New Issue
Block a user