This keeps the existence of ->region_fds private to hw/vfio/device.c. Signed-off-by: John Levon <john.le...@nutanix.com> --- include/hw/vfio/vfio-device.h | 12 ++++++++++++ hw/vfio/device.c | 7 +++++++ hw/vfio/region.c | 5 +---- 3 files changed, 20 insertions(+), 4 deletions(-)
diff --git a/include/hw/vfio/vfio-device.h b/include/hw/vfio/vfio-device.h index d45e5a68a2..1926adb0a3 100644 --- a/include/hw/vfio/vfio-device.h +++ b/include/hw/vfio/vfio-device.h @@ -256,6 +256,18 @@ int vfio_device_get_region_info(VFIODevice *vbasedev, int index, struct vfio_region_info **info); int vfio_device_get_region_info_type(VFIODevice *vbasedev, uint32_t type, uint32_t subtype, struct vfio_region_info **info); + +/** + * Return the fd for mapping this region. This is either the device's fd (for + * e.g. kernel vfio), or a per-region fd (for vfio-user). + * + * @vbasedev: #VFIODevice to use + * @index: region index + * + * Returns the fd. + */ +int vfio_device_get_region_fd(VFIODevice *vbasedev, int index); + bool vfio_device_has_region_cap(VFIODevice *vbasedev, int region, uint16_t cap_type); int vfio_device_get_irq_info(VFIODevice *vbasedev, int index, diff --git a/hw/vfio/device.c b/hw/vfio/device.c index d32600eda1..d91c695b69 100644 --- a/hw/vfio/device.c +++ b/hw/vfio/device.c @@ -243,6 +243,13 @@ retry: return 0; } +int vfio_device_get_region_fd(VFIODevice *vbasedev, int index) +{ + return vbasedev->region_fds ? + vbasedev->region_fds[index] : + vbasedev->fd; +} + int vfio_device_get_region_info_type(VFIODevice *vbasedev, uint32_t type, uint32_t subtype, struct vfio_region_info **info) { diff --git a/hw/vfio/region.c b/hw/vfio/region.c index f5b8e3cbf1..d04c57db63 100644 --- a/hw/vfio/region.c +++ b/hw/vfio/region.c @@ -273,10 +273,7 @@ int vfio_region_mmap(VFIORegion *region) goto no_mmap; } - /* Use the per-region fd if set, or the shared fd. */ - fd = region->vbasedev->region_fds ? - region->vbasedev->region_fds[region->nr] : - region->vbasedev->fd, + fd = vfio_device_get_region_fd(region->vbasedev, region->nr); map_align = (void *)ROUND_UP((uintptr_t)map_base, (uintptr_t)align); munmap(map_base, map_align - map_base); -- 2.43.0