Skip to content

Commit

Permalink
vfio: Introduce a helper function to initialize VFIODevice
Browse files Browse the repository at this point in the history
Introduce a helper function to replace the common code to initialize
VFIODevice in pci, platform, ap and ccw VFIO device.

No functional change intended.

Suggested-by: Cédric Le Goater <clg@redhat.com>
Signed-off-by: Zhenzhong Duan <zhenzhong.duan@intel.com>
Tested-by: Nicolin Chen <nicolinc@nvidia.com>
Signed-off-by: Cédric Le Goater <clg@redhat.com>
  • Loading branch information
duanzhenzhong authored and legoater committed Dec 19, 2023
1 parent c12b55a commit 6106a32
Show file tree
Hide file tree
Showing 6 changed files with 21 additions and 20 deletions.
8 changes: 2 additions & 6 deletions hw/vfio/ap.c
Original file line number Diff line number Diff line change
Expand Up @@ -226,18 +226,14 @@ static void vfio_ap_instance_init(Object *obj)
VFIOAPDevice *vapdev = VFIO_AP_DEVICE(obj);
VFIODevice *vbasedev = &vapdev->vdev;

vbasedev->type = VFIO_DEVICE_TYPE_AP;
vbasedev->ops = &vfio_ap_ops;
vbasedev->dev = DEVICE(vapdev);
vbasedev->fd = -1;

/*
* vfio-ap devices operate in a way compatible with discarding of
* memory in RAM blocks, as no pages are pinned in the host.
* This needs to be set before vfio_get_device() for vfio common to
* handle ram_block_discard_disable().
*/
vbasedev->ram_block_discard_allowed = true;
vfio_device_init(vbasedev, VFIO_DEVICE_TYPE_AP, &vfio_ap_ops,
DEVICE(vapdev), true);
}

#ifdef CONFIG_IOMMUFD
Expand Down
8 changes: 2 additions & 6 deletions hw/vfio/ccw.c
Original file line number Diff line number Diff line change
Expand Up @@ -683,11 +683,6 @@ static void vfio_ccw_instance_init(Object *obj)
VFIOCCWDevice *vcdev = VFIO_CCW(obj);
VFIODevice *vbasedev = &vcdev->vdev;

vbasedev->type = VFIO_DEVICE_TYPE_CCW;
vbasedev->ops = &vfio_ccw_ops;
vbasedev->dev = DEVICE(vcdev);
vbasedev->fd = -1;

/*
* All vfio-ccw devices are believed to operate in a way compatible with
* discarding of memory in RAM blocks, ie. pages pinned in the host are
Expand All @@ -696,7 +691,8 @@ static void vfio_ccw_instance_init(Object *obj)
* needs to be set before vfio_get_device() for vfio common to handle
* ram_block_discard_disable().
*/
vbasedev->ram_block_discard_allowed = true;
vfio_device_init(vbasedev, VFIO_DEVICE_TYPE_CCW, &vfio_ccw_ops,
DEVICE(vcdev), true);
}

#ifdef CONFIG_IOMMUFD
Expand Down
11 changes: 11 additions & 0 deletions hw/vfio/helpers.c
Original file line number Diff line number Diff line change
Expand Up @@ -652,3 +652,14 @@ void vfio_device_set_fd(VFIODevice *vbasedev, const char *str, Error **errp)
}
vbasedev->fd = fd;
}

void vfio_device_init(VFIODevice *vbasedev, int type, VFIODeviceOps *ops,
DeviceState *dev, bool ram_discard)
{
vbasedev->type = type;
vbasedev->ops = ops;
vbasedev->dev = dev;
vbasedev->fd = -1;

vbasedev->ram_block_discard_allowed = ram_discard;
}
6 changes: 2 additions & 4 deletions hw/vfio/pci.c
Original file line number Diff line number Diff line change
Expand Up @@ -3327,10 +3327,8 @@ static void vfio_instance_init(Object *obj)
vdev->host.slot = ~0U;
vdev->host.function = ~0U;

vbasedev->type = VFIO_DEVICE_TYPE_PCI;
vbasedev->ops = &vfio_pci_ops;
vbasedev->dev = DEVICE(vdev);
vbasedev->fd = -1;
vfio_device_init(vbasedev, VFIO_DEVICE_TYPE_PCI, &vfio_pci_ops,
DEVICE(vdev), false);

vdev->nv_gpudirect_clique = 0xFF;

Expand Down
6 changes: 2 additions & 4 deletions hw/vfio/platform.c
Original file line number Diff line number Diff line change
Expand Up @@ -657,10 +657,8 @@ static void vfio_platform_instance_init(Object *obj)
VFIOPlatformDevice *vdev = VFIO_PLATFORM_DEVICE(obj);
VFIODevice *vbasedev = &vdev->vbasedev;

vbasedev->type = VFIO_DEVICE_TYPE_PLATFORM;
vbasedev->ops = &vfio_platform_ops;
vbasedev->dev = DEVICE(vdev);
vbasedev->fd = -1;
vfio_device_init(vbasedev, VFIO_DEVICE_TYPE_PLATFORM, &vfio_platform_ops,
DEVICE(vdev), false);
}

#ifdef CONFIG_IOMMUFD
Expand Down
2 changes: 2 additions & 0 deletions include/hw/vfio/vfio-common.h
Original file line number Diff line number Diff line change
Expand Up @@ -257,4 +257,6 @@ int vfio_get_dirty_bitmap(const VFIOContainerBase *bcontainer, uint64_t iova,
/* Returns 0 on success, or a negative errno. */
int vfio_device_get_name(VFIODevice *vbasedev, Error **errp);
void vfio_device_set_fd(VFIODevice *vbasedev, const char *str, Error **errp);
void vfio_device_init(VFIODevice *vbasedev, int type, VFIODeviceOps *ops,
DeviceState *dev, bool ram_discard);
#endif /* HW_VFIO_VFIO_COMMON_H */

0 comments on commit 6106a32

Please sign in to comment.