static VFIOLegacyContainer *vfio_eeh_as_container(AddressSpace *as)
{
VFIOAddressSpace *space = vfio_address_space_get(as);
- VFIOContainerBase *bcontainer = NULL;
+ VFIOContainer *bcontainer = NULL;
if (QLIST_EMPTY(&space->containers)) {
/* No containers to act on */
* will fire during memory update transactions. These depend on BQL being held,
* so do any resulting map/demap ops async while keeping BQL.
*/
-static void vfio_user_listener_begin(VFIOContainerBase *bcontainer)
+static void vfio_user_listener_begin(VFIOContainer *bcontainer)
{
VFIOUserContainer *container = VFIO_IOMMU_USER(bcontainer);
container->proxy->async_ops = true;
}
-static void vfio_user_listener_commit(VFIOContainerBase *bcontainer)
+static void vfio_user_listener_commit(VFIOContainer *bcontainer)
{
VFIOUserContainer *container = VFIO_IOMMU_USER(bcontainer);
vfio_user_wait_reqs(container->proxy);
}
-static int vfio_user_dma_unmap(const VFIOContainerBase *bcontainer,
+static int vfio_user_dma_unmap(const VFIOContainer *bcontainer,
hwaddr iova, ram_addr_t size,
IOMMUTLBEntry *iotlb, bool unmap_all)
{
return ret;
}
-static int vfio_user_dma_map(const VFIOContainerBase *bcontainer, hwaddr iova,
+static int vfio_user_dma_map(const VFIOContainer *bcontainer, hwaddr iova,
ram_addr_t size, void *vaddr, bool readonly,
MemoryRegion *mrp)
{
}
static int
-vfio_user_set_dirty_page_tracking(const VFIOContainerBase *bcontainer,
+vfio_user_set_dirty_page_tracking(const VFIOContainer *bcontainer,
bool start, Error **errp)
{
error_setg_errno(errp, ENOTSUP, "Not supported");
return -ENOTSUP;
}
-static int vfio_user_query_dirty_bitmap(const VFIOContainerBase *bcontainer,
+static int vfio_user_query_dirty_bitmap(const VFIOContainer *bcontainer,
VFIOBitmap *vbmap, hwaddr iova,
hwaddr size, Error **errp)
{
return -ENOTSUP;
}
-static bool vfio_user_setup(VFIOContainerBase *bcontainer, Error **errp)
+static bool vfio_user_setup(VFIOContainer *bcontainer, Error **errp)
{
VFIOUserContainer *container = VFIO_IOMMU_USER(bcontainer);
vfio_user_container_connect(AddressSpace *as, VFIODevice *vbasedev,
Error **errp)
{
- VFIOContainerBase *bcontainer;
+ VFIOContainer *bcontainer;
VFIOUserContainer *container;
VFIOAddressSpace *space;
VFIOIOMMUClass *vioc;
static void vfio_user_container_disconnect(VFIOUserContainer *container)
{
- VFIOContainerBase *bcontainer = VFIO_IOMMU(container);
+ VFIOContainer *bcontainer = VFIO_IOMMU(container);
VFIOIOMMUClass *vioc = VFIO_IOMMU_GET_CLASS(bcontainer);
VFIOAddressSpace *space = bcontainer->space;
/* MMU container sub-class for vfio-user. */
struct VFIOUserContainer {
- VFIOContainerBase parent_obj;
+ VFIOContainer parent_obj;
VFIOUserProxy *proxy;
};
}
void vfio_address_space_insert(VFIOAddressSpace *space,
- VFIOContainerBase *bcontainer)
+ VFIOContainer *bcontainer)
{
QLIST_INSERT_HEAD(&space->containers, bcontainer, next);
bcontainer->space = space;
}
-int vfio_container_dma_map(VFIOContainerBase *bcontainer,
+int vfio_container_dma_map(VFIOContainer *bcontainer,
hwaddr iova, ram_addr_t size,
void *vaddr, bool readonly, MemoryRegion *mr)
{
return vioc->dma_map(bcontainer, iova, size, vaddr, readonly, mr);
}
-int vfio_container_dma_unmap(VFIOContainerBase *bcontainer,
+int vfio_container_dma_unmap(VFIOContainer *bcontainer,
hwaddr iova, ram_addr_t size,
IOMMUTLBEntry *iotlb, bool unmap_all)
{
return vioc->dma_unmap(bcontainer, iova, size, iotlb, unmap_all);
}
-bool vfio_container_add_section_window(VFIOContainerBase *bcontainer,
+bool vfio_container_add_section_window(VFIOContainer *bcontainer,
MemoryRegionSection *section,
Error **errp)
{
return vioc->add_window(bcontainer, section, errp);
}
-void vfio_container_del_section_window(VFIOContainerBase *bcontainer,
+void vfio_container_del_section_window(VFIOContainer *bcontainer,
MemoryRegionSection *section)
{
VFIOIOMMUClass *vioc = VFIO_IOMMU_GET_CLASS(bcontainer);
return vioc->del_window(bcontainer, section);
}
-int vfio_container_set_dirty_page_tracking(VFIOContainerBase *bcontainer,
+int vfio_container_set_dirty_page_tracking(VFIOContainer *bcontainer,
bool start, Error **errp)
{
VFIOIOMMUClass *vioc = VFIO_IOMMU_GET_CLASS(bcontainer);
}
static bool vfio_container_devices_dirty_tracking_is_started(
- const VFIOContainerBase *bcontainer)
+ const VFIOContainer *bcontainer)
{
VFIODevice *vbasedev;
}
bool vfio_container_dirty_tracking_is_started(
- const VFIOContainerBase *bcontainer)
+ const VFIOContainer *bcontainer)
{
return vfio_container_devices_dirty_tracking_is_started(bcontainer) ||
bcontainer->dirty_pages_started;
}
bool vfio_container_devices_dirty_tracking_is_supported(
- const VFIOContainerBase *bcontainer)
+ const VFIOContainer *bcontainer)
{
VFIODevice *vbasedev;
return vbasedev->io_ops->device_feature(vbasedev, feature);
}
-static int vfio_container_iommu_query_dirty_bitmap(const VFIOContainerBase *bcontainer,
- VFIOBitmap *vbmap, hwaddr iova, hwaddr size, Error **errp)
+static int vfio_container_iommu_query_dirty_bitmap(
+ const VFIOContainer *bcontainer, VFIOBitmap *vbmap, hwaddr iova,
+ hwaddr size, Error **errp)
{
VFIOIOMMUClass *vioc = VFIO_IOMMU_GET_CLASS(bcontainer);
errp);
}
-static int vfio_container_devices_query_dirty_bitmap(const VFIOContainerBase *bcontainer,
- VFIOBitmap *vbmap, hwaddr iova, hwaddr size, Error **errp)
+static int vfio_container_devices_query_dirty_bitmap(
+ const VFIOContainer *bcontainer, VFIOBitmap *vbmap, hwaddr iova,
+ hwaddr size, Error **errp)
{
VFIODevice *vbasedev;
int ret;
return 0;
}
-int vfio_container_query_dirty_bitmap(const VFIOContainerBase *bcontainer, uint64_t iova,
- uint64_t size, ram_addr_t ram_addr, Error **errp)
+int vfio_container_query_dirty_bitmap(const VFIOContainer *bcontainer,
+ uint64_t iova, uint64_t size,
+ ram_addr_t ram_addr, Error **errp)
{
bool all_device_dirty_tracking =
vfio_container_devices_dirty_tracking_is_supported(bcontainer);
return dest;
}
-GList *vfio_container_get_iova_ranges(const VFIOContainerBase *bcontainer)
+GList *vfio_container_get_iova_ranges(const VFIOContainer *bcontainer)
{
assert(bcontainer);
return g_list_copy_deep(bcontainer->iova_ranges, copy_iova_range, NULL);
static void vfio_container_instance_finalize(Object *obj)
{
- VFIOContainerBase *bcontainer = VFIO_IOMMU(obj);
+ VFIOContainer *bcontainer = VFIO_IOMMU(obj);
VFIOGuestIOMMU *giommu, *tmp;
QLIST_SAFE_REMOVE(bcontainer, next);
static void vfio_container_instance_init(Object *obj)
{
- VFIOContainerBase *bcontainer = VFIO_IOMMU(obj);
+ VFIOContainer *bcontainer = VFIO_IOMMU(obj);
bcontainer->error = NULL;
bcontainer->dirty_pages_supported = false;
.parent = TYPE_OBJECT,
.instance_init = vfio_container_instance_init,
.instance_finalize = vfio_container_instance_finalize,
- .instance_size = sizeof(VFIOContainerBase),
+ .instance_size = sizeof(VFIOContainer),
.class_size = sizeof(VFIOIOMMUClass),
.abstract = true,
},
hwaddr iova, ram_addr_t size,
IOMMUTLBEntry *iotlb)
{
- const VFIOContainerBase *bcontainer = VFIO_IOMMU(container);
+ const VFIOContainer *bcontainer = VFIO_IOMMU(container);
struct vfio_iommu_type1_dma_unmap *unmap;
struct vfio_bitmap *bitmap;
VFIOBitmap vbmap;
return ret;
}
-static int vfio_legacy_dma_unmap_one(const VFIOContainerBase *bcontainer,
+static int vfio_legacy_dma_unmap_one(const VFIOContainer *bcontainer,
hwaddr iova, ram_addr_t size,
IOMMUTLBEntry *iotlb)
{
/*
* DMA - Mapping and unmapping for the "type1" IOMMU interface used on x86
*/
-static int vfio_legacy_dma_unmap(const VFIOContainerBase *bcontainer,
+static int vfio_legacy_dma_unmap(const VFIOContainer *bcontainer,
hwaddr iova, ram_addr_t size,
IOMMUTLBEntry *iotlb, bool unmap_all)
{
return ret;
}
-static int vfio_legacy_dma_map(const VFIOContainerBase *bcontainer, hwaddr iova,
+static int vfio_legacy_dma_map(const VFIOContainer *bcontainer, hwaddr iova,
ram_addr_t size, void *vaddr, bool readonly,
MemoryRegion *mr)
{
}
static int
-vfio_legacy_set_dirty_page_tracking(const VFIOContainerBase *bcontainer,
+vfio_legacy_set_dirty_page_tracking(const VFIOContainer *bcontainer,
bool start, Error **errp)
{
const VFIOLegacyContainer *container = VFIO_IOMMU_LEGACY(bcontainer);
return ret;
}
-static int vfio_legacy_query_dirty_bitmap(const VFIOContainerBase *bcontainer,
+static int vfio_legacy_query_dirty_bitmap(const VFIOContainer *bcontainer,
VFIOBitmap *vbmap, hwaddr iova, hwaddr size, Error **errp)
{
const VFIOLegacyContainer *container = VFIO_IOMMU_LEGACY(bcontainer);
}
static bool vfio_get_info_iova_range(struct vfio_iommu_type1_info *info,
- VFIOContainerBase *bcontainer)
+ VFIOContainer *bcontainer)
{
struct vfio_info_cap_header *hdr;
struct vfio_iommu_type1_info_cap_iova_range *cap;
{
struct vfio_info_cap_header *hdr;
struct vfio_iommu_type1_info_cap_migration *cap_mig;
- VFIOContainerBase *bcontainer = VFIO_IOMMU(container);
+ VFIOContainer *bcontainer = VFIO_IOMMU(container);
hdr = vfio_get_iommu_info_cap(info, VFIO_IOMMU_TYPE1_INFO_CAP_MIGRATION);
if (!hdr) {
}
}
-static bool vfio_legacy_setup(VFIOContainerBase *bcontainer, Error **errp)
+static bool vfio_legacy_setup(VFIOContainer *bcontainer, Error **errp)
{
VFIOLegacyContainer *container = VFIO_IOMMU_LEGACY(bcontainer);
g_autofree struct vfio_iommu_type1_info *info = NULL;
Error **errp)
{
VFIOLegacyContainer *container;
- VFIOContainerBase *bcontainer;
+ VFIOContainer *bcontainer;
int ret, fd = -1;
VFIOAddressSpace *space;
VFIOIOMMUClass *vioc = NULL;
static void vfio_container_disconnect(VFIOGroup *group)
{
VFIOLegacyContainer *container = group->container;
- VFIOContainerBase *bcontainer = VFIO_IOMMU(container);
+ VFIOContainer *bcontainer = VFIO_IOMMU(container);
VFIOIOMMUClass *vioc = VFIO_IOMMU_GET_CLASS(bcontainer);
QLIST_REMOVE(group, container_next);
bool vfio_iommufd_cpr_register_container(VFIOIOMMUFDContainer *container,
Error **errp)
{
- VFIOContainerBase *bcontainer = &container->bcontainer;
+ VFIOContainer *bcontainer = &container->bcontainer;
migration_add_notifier_mode(&bcontainer->cpr_reboot_notifier,
vfio_cpr_reboot_notifier,
void vfio_iommufd_cpr_unregister_container(VFIOIOMMUFDContainer *container)
{
- VFIOContainerBase *bcontainer = &container->bcontainer;
+ VFIOContainer *bcontainer = &container->bcontainer;
migration_remove_notifier(&bcontainer->cpr_reboot_notifier);
}
* Set the new @vaddr for any mappings registered during cpr load.
* The incoming state is cleared thereafter.
*/
-static int vfio_legacy_cpr_dma_map(const VFIOContainerBase *bcontainer,
+static int vfio_legacy_cpr_dma_map(const VFIOContainer *bcontainer,
hwaddr iova, ram_addr_t size, void *vaddr,
bool readonly, MemoryRegion *mr)
{
static int vfio_container_post_load(void *opaque, int version_id)
{
VFIOLegacyContainer *container = opaque;
- VFIOContainerBase *bcontainer = VFIO_IOMMU(container);
+ VFIOContainer *bcontainer = VFIO_IOMMU(container);
VFIOIOMMUClass *vioc = VFIO_IOMMU_GET_CLASS(bcontainer);
dma_map_fn saved_dma_map = vioc->dma_map;
Error *local_err = NULL;
{
VFIOLegacyContainer *container =
container_of(notifier, VFIOLegacyContainer, cpr.transfer_notifier);
- VFIOContainerBase *bcontainer = VFIO_IOMMU(container);
+ VFIOContainer *bcontainer = VFIO_IOMMU(container);
if (e->type != MIG_EVENT_PRECOPY_FAILED) {
return 0;
bool vfio_legacy_cpr_register_container(VFIOLegacyContainer *container,
Error **errp)
{
- VFIOContainerBase *bcontainer = VFIO_IOMMU(container);
+ VFIOContainer *bcontainer = VFIO_IOMMU(container);
Error **cpr_blocker = &container->cpr.blocker;
migration_add_notifier_mode(&bcontainer->cpr_reboot_notifier,
void vfio_legacy_cpr_unregister_container(VFIOLegacyContainer *container)
{
- VFIOContainerBase *bcontainer = VFIO_IOMMU(container);
+ VFIOContainer *bcontainer = VFIO_IOMMU(container);
migration_remove_notifier(&bcontainer->cpr_reboot_notifier);
migrate_del_blocker(&container->cpr.blocker);
* The giommu already exists. Find it and replay it, which calls
* vfio_legacy_cpr_dma_map further down the stack.
*/
-void vfio_cpr_giommu_remap(VFIOContainerBase *bcontainer,
+void vfio_cpr_giommu_remap(VFIOContainer *bcontainer,
MemoryRegionSection *section)
{
VFIOGuestIOMMU *giommu = NULL;
* The ram discard listener already exists. Call its populate function
* directly, which calls vfio_legacy_cpr_dma_map.
*/
-bool vfio_cpr_ram_discard_register_listener(VFIOContainerBase *bcontainer,
+bool vfio_cpr_ram_discard_register_listener(VFIOContainer *bcontainer,
MemoryRegionSection *section)
{
VFIORamDiscardListener *vrdl =
VFIO_IOMMU_GET_CLASS(vbasedev->bcontainer)->detach_device(vbasedev);
}
-void vfio_device_prepare(VFIODevice *vbasedev, VFIOContainerBase *bcontainer,
+void vfio_device_prepare(VFIODevice *vbasedev, VFIOContainer *bcontainer,
struct vfio_device_info *info)
{
int i;
#define TYPE_HOST_IOMMU_DEVICE_IOMMUFD_VFIO \
TYPE_HOST_IOMMU_DEVICE_IOMMUFD "-vfio"
-static int iommufd_cdev_map(const VFIOContainerBase *bcontainer, hwaddr iova,
+static int iommufd_cdev_map(const VFIOContainer *bcontainer, hwaddr iova,
ram_addr_t size, void *vaddr, bool readonly,
MemoryRegion *mr)
{
iova, size, vaddr, readonly);
}
-static int iommufd_cdev_map_file(const VFIOContainerBase *bcontainer,
+static int iommufd_cdev_map_file(const VFIOContainer *bcontainer,
hwaddr iova, ram_addr_t size,
int fd, unsigned long start, bool readonly)
{
iova, size, fd, start, readonly);
}
-static int iommufd_cdev_unmap(const VFIOContainerBase *bcontainer,
+static int iommufd_cdev_unmap(const VFIOContainer *bcontainer,
hwaddr iova, ram_addr_t size,
IOMMUTLBEntry *iotlb, bool unmap_all)
{
return hwpt && hwpt->hwpt_flags & IOMMU_HWPT_ALLOC_DIRTY_TRACKING;
}
-static int iommufd_set_dirty_page_tracking(const VFIOContainerBase *bcontainer,
+static int iommufd_set_dirty_page_tracking(const VFIOContainer *bcontainer,
bool start, Error **errp)
{
const VFIOIOMMUFDContainer *container =
return -EINVAL;
}
-static int iommufd_query_dirty_bitmap(const VFIOContainerBase *bcontainer,
+static int iommufd_query_dirty_bitmap(const VFIOContainer *bcontainer,
VFIOBitmap *vbmap, hwaddr iova,
hwaddr size, Error **errp)
{
static void iommufd_cdev_container_destroy(VFIOIOMMUFDContainer *container)
{
- VFIOContainerBase *bcontainer = &container->bcontainer;
+ VFIOContainer *bcontainer = &container->bcontainer;
if (!QLIST_EMPTY(&bcontainer->device_list)) {
return;
static bool iommufd_cdev_get_info_iova_range(VFIOIOMMUFDContainer *container,
uint32_t ioas_id, Error **errp)
{
- VFIOContainerBase *bcontainer = &container->bcontainer;
+ VFIOContainer *bcontainer = &container->bcontainer;
g_autofree struct iommu_ioas_iova_ranges *info = NULL;
struct iommu_iova_range *iova_ranges;
int sz, fd = container->be->fd;
static bool iommufd_cdev_attach(const char *name, VFIODevice *vbasedev,
AddressSpace *as, Error **errp)
{
- VFIOContainerBase *bcontainer;
+ VFIOContainer *bcontainer;
VFIOIOMMUFDContainer *container;
VFIOAddressSpace *space;
struct vfio_device_info dev_info = { .argsz = sizeof(dev_info) };
static void iommufd_cdev_detach(VFIODevice *vbasedev)
{
- VFIOContainerBase *bcontainer = vbasedev->bcontainer;
+ VFIOContainer *bcontainer = vbasedev->bcontainer;
VFIOAddressSpace *space = bcontainer->space;
VFIOIOMMUFDContainer *container = container_of(bcontainer,
VFIOIOMMUFDContainer,
*/
-static bool vfio_log_sync_needed(const VFIOContainerBase *bcontainer)
+static bool vfio_log_sync_needed(const VFIOContainer *bcontainer)
{
VFIODevice *vbasedev;
static void vfio_iommu_map_notify(IOMMUNotifier *n, IOMMUTLBEntry *iotlb)
{
VFIOGuestIOMMU *giommu = container_of(n, VFIOGuestIOMMU, n);
- VFIOContainerBase *bcontainer = giommu->bcontainer;
+ VFIOContainer *bcontainer = giommu->bcontainer;
hwaddr iova = iotlb->iova + giommu->iommu_offset;
MemoryRegion *mr;
hwaddr xlat;
{
VFIORamDiscardListener *vrdl = container_of(rdl, VFIORamDiscardListener,
listener);
- VFIOContainerBase *bcontainer = vrdl->bcontainer;
+ VFIOContainer *bcontainer = vrdl->bcontainer;
const hwaddr size = int128_get64(section->size);
const hwaddr iova = section->offset_within_address_space;
int ret;
{
VFIORamDiscardListener *vrdl = container_of(rdl, VFIORamDiscardListener,
listener);
- VFIOContainerBase *bcontainer = vrdl->bcontainer;
+ VFIOContainer *bcontainer = vrdl->bcontainer;
const hwaddr end = section->offset_within_region +
int128_get64(section->size);
hwaddr start, next, iova;
return 0;
}
-static bool vfio_ram_discard_register_listener(VFIOContainerBase *bcontainer,
+static bool vfio_ram_discard_register_listener(VFIOContainer *bcontainer,
MemoryRegionSection *section,
Error **errp)
{
return true;
}
-static void vfio_ram_discard_unregister_listener(VFIOContainerBase *bcontainer,
+static void vfio_ram_discard_unregister_listener(VFIOContainer *bcontainer,
MemoryRegionSection *section)
{
RamDiscardManager *rdm = memory_region_get_ram_discard_manager(section->mr);
return true;
}
-static bool vfio_get_section_iova_range(VFIOContainerBase *bcontainer,
+static bool vfio_get_section_iova_range(VFIOContainer *bcontainer,
MemoryRegionSection *section,
hwaddr *out_iova, hwaddr *out_end,
Int128 *out_llend)
static void vfio_listener_begin(MemoryListener *listener)
{
- VFIOContainerBase *bcontainer = container_of(listener, VFIOContainerBase,
- listener);
- void (*listener_begin)(VFIOContainerBase *bcontainer);
+ VFIOContainer *bcontainer = container_of(listener, VFIOContainer,
+ listener);
+ void (*listener_begin)(VFIOContainer *bcontainer);
listener_begin = VFIO_IOMMU_GET_CLASS(bcontainer)->listener_begin;
static void vfio_listener_commit(MemoryListener *listener)
{
- VFIOContainerBase *bcontainer = container_of(listener, VFIOContainerBase,
- listener);
- void (*listener_commit)(VFIOContainerBase *bcontainer);
+ VFIOContainer *bcontainer = container_of(listener, VFIOContainer,
+ listener);
+ void (*listener_commit)(VFIOContainer *bcontainer);
listener_commit = VFIO_IOMMU_GET_CLASS(bcontainer)->listener_commit;
}
VFIORamDiscardListener *vfio_find_ram_discard_listener(
- VFIOContainerBase *bcontainer, MemoryRegionSection *section)
+ VFIOContainer *bcontainer, MemoryRegionSection *section)
{
VFIORamDiscardListener *vrdl = NULL;
static void vfio_listener_region_add(MemoryListener *listener,
MemoryRegionSection *section)
{
- VFIOContainerBase *bcontainer = container_of(listener, VFIOContainerBase,
- listener);
+ VFIOContainer *bcontainer = container_of(listener, VFIOContainer,
+ listener);
vfio_container_region_add(bcontainer, section, false);
}
-void vfio_container_region_add(VFIOContainerBase *bcontainer,
+void vfio_container_region_add(VFIOContainer *bcontainer,
MemoryRegionSection *section,
bool cpr_remap)
{
static void vfio_listener_region_del(MemoryListener *listener,
MemoryRegionSection *section)
{
- VFIOContainerBase *bcontainer = container_of(listener, VFIOContainerBase,
- listener);
+ VFIOContainer *bcontainer = container_of(listener, VFIOContainer,
+ listener);
hwaddr iova, end;
Int128 llend, llsize;
int ret;
} VFIODirtyRanges;
typedef struct VFIODirtyRangesListener {
- VFIOContainerBase *bcontainer;
+ VFIOContainer *bcontainer;
VFIODirtyRanges ranges;
MemoryListener listener;
} VFIODirtyRangesListener;
static bool vfio_section_is_vfio_pci(MemoryRegionSection *section,
- VFIOContainerBase *bcontainer)
+ VFIOContainer *bcontainer)
{
VFIOPCIDevice *pcidev;
VFIODevice *vbasedev;
.region_add = vfio_dirty_tracking_update,
};
-static void vfio_dirty_tracking_init(VFIOContainerBase *bcontainer,
+static void vfio_dirty_tracking_init(VFIOContainer *bcontainer,
VFIODirtyRanges *ranges)
{
VFIODirtyRangesListener dirty;
memory_listener_unregister(&dirty.listener);
}
-static void vfio_devices_dma_logging_stop(VFIOContainerBase *bcontainer)
+static void vfio_devices_dma_logging_stop(VFIOContainer *bcontainer)
{
uint64_t buf[DIV_ROUND_UP(sizeof(struct vfio_device_feature),
sizeof(uint64_t))] = {};
}
static struct vfio_device_feature *
-vfio_device_feature_dma_logging_start_create(VFIOContainerBase *bcontainer,
+vfio_device_feature_dma_logging_start_create(VFIOContainer *bcontainer,
VFIODirtyRanges *tracking)
{
struct vfio_device_feature *feature;
g_free(feature);
}
-static bool vfio_devices_dma_logging_start(VFIOContainerBase *bcontainer,
+static bool vfio_devices_dma_logging_start(VFIOContainer *bcontainer,
Error **errp)
{
struct vfio_device_feature *feature;
Error **errp)
{
ERRP_GUARD();
- VFIOContainerBase *bcontainer = container_of(listener, VFIOContainerBase,
- listener);
+ VFIOContainer *bcontainer = container_of(listener, VFIOContainer,
+ listener);
bool ret;
if (vfio_container_devices_dirty_tracking_is_supported(bcontainer)) {
static void vfio_listener_log_global_stop(MemoryListener *listener)
{
- VFIOContainerBase *bcontainer = container_of(listener, VFIOContainerBase,
- listener);
+ VFIOContainer *bcontainer = container_of(listener, VFIOContainer,
+ listener);
Error *local_err = NULL;
int ret = 0;
vfio_giommu_dirty_notifier *gdn = container_of(n,
vfio_giommu_dirty_notifier, n);
VFIOGuestIOMMU *giommu = gdn->giommu;
- VFIOContainerBase *bcontainer = giommu->bcontainer;
+ VFIOContainer *bcontainer = giommu->bcontainer;
hwaddr iova = iotlb->iova + giommu->iommu_offset;
ram_addr_t translated_addr;
Error *local_err = NULL;
}
static int
-vfio_sync_ram_discard_listener_dirty_bitmap(VFIOContainerBase *bcontainer,
+vfio_sync_ram_discard_listener_dirty_bitmap(VFIOContainer *bcontainer,
MemoryRegionSection *section)
{
RamDiscardManager *rdm = memory_region_get_ram_discard_manager(section->mr);
&vrdl);
}
-static int vfio_sync_iommu_dirty_bitmap(VFIOContainerBase *bcontainer,
+static int vfio_sync_iommu_dirty_bitmap(VFIOContainer *bcontainer,
MemoryRegionSection *section)
{
VFIOGuestIOMMU *giommu;
return 0;
}
-static int vfio_sync_dirty_bitmap(VFIOContainerBase *bcontainer,
+static int vfio_sync_dirty_bitmap(VFIOContainer *bcontainer,
MemoryRegionSection *section, Error **errp)
{
ram_addr_t ram_addr;
static void vfio_listener_log_sync(MemoryListener *listener,
MemoryRegionSection *section)
{
- VFIOContainerBase *bcontainer = container_of(listener, VFIOContainerBase,
- listener);
+ VFIOContainer *bcontainer = container_of(listener, VFIOContainer,
+ listener);
int ret;
Error *local_err = NULL;
.log_sync = vfio_listener_log_sync,
};
-bool vfio_listener_register(VFIOContainerBase *bcontainer, Error **errp)
+bool vfio_listener_register(VFIOContainer *bcontainer, Error **errp)
{
bcontainer->listener = vfio_memory_listener;
memory_listener_register(&bcontainer->listener, bcontainer->space->as);
return true;
}
-void vfio_listener_unregister(VFIOContainerBase *bcontainer)
+void vfio_listener_unregister(VFIOContainer *bcontainer)
{
memory_listener_unregister(&bcontainer->listener);
}
VFIOSpaprContainer *scontainer = container_of(listener, VFIOSpaprContainer,
prereg_listener);
VFIOLegacyContainer *container = &scontainer->container;
- VFIOContainerBase *bcontainer = VFIO_IOMMU(container);
+ VFIOContainer *bcontainer = VFIO_IOMMU(container);
const hwaddr gpa = section->offset_within_address_space;
hwaddr end;
int ret;
hwaddr *pgsize, Error **errp)
{
int ret = 0;
- VFIOContainerBase *bcontainer = VFIO_IOMMU(container);
+ VFIOContainer *bcontainer = VFIO_IOMMU(container);
VFIOSpaprContainer *scontainer = container_of(container, VFIOSpaprContainer,
container);
IOMMUMemoryRegion *iommu_mr = IOMMU_MEMORY_REGION(section->mr);
}
static bool
-vfio_spapr_container_add_section_window(VFIOContainerBase *bcontainer,
+vfio_spapr_container_add_section_window(VFIOContainer *bcontainer,
MemoryRegionSection *section,
Error **errp)
{
}
static void
-vfio_spapr_container_del_section_window(VFIOContainerBase *bcontainer,
+vfio_spapr_container_del_section_window(VFIOContainer *bcontainer,
MemoryRegionSection *section)
{
VFIOLegacyContainer *container = VFIO_IOMMU_LEGACY(bcontainer);
}
}
-static void vfio_spapr_container_release(VFIOContainerBase *bcontainer)
+static void vfio_spapr_container_release(VFIOContainer *bcontainer)
{
VFIOLegacyContainer *container = VFIO_IOMMU_LEGACY(bcontainer);
VFIOSpaprContainer *scontainer = container_of(container, VFIOSpaprContainer,
}
}
-static bool vfio_spapr_container_setup(VFIOContainerBase *bcontainer,
+static bool vfio_spapr_container_setup(VFIOContainer *bcontainer,
Error **errp)
{
VFIOLegacyContainer *container = VFIO_IOMMU_LEGACY(bcontainer);
typedef struct IOMMUFDBackend IOMMUFDBackend;
typedef struct VFIOIOMMUFDContainer {
- VFIOContainerBase bcontainer;
+ VFIOContainer bcontainer;
IOMMUFDBackend *be;
uint32_t ioas_id;
QLIST_HEAD(, VFIOIOASHwpt) hwpt_list;
#ifndef HW_VFIO_VFIO_LISTENER_H
#define HW_VFIO_VFIO_LISTENER_H
-bool vfio_listener_register(VFIOContainerBase *bcontainer, Error **errp);
-void vfio_listener_unregister(VFIOContainerBase *bcontainer);
+bool vfio_listener_register(VFIOContainer *bcontainer, Error **errp);
+void vfio_listener_unregister(VFIOContainer *bcontainer);
#endif /* HW_VFIO_VFIO_LISTENER_H */
typedef struct VFIOAddressSpace {
AddressSpace *as;
- QLIST_HEAD(, VFIOContainerBase) containers;
+ QLIST_HEAD(, VFIOContainer) containers;
QLIST_ENTRY(VFIOAddressSpace) list;
} VFIOAddressSpace;
/*
* This is the base object for vfio container backends
*/
-struct VFIOContainerBase {
+struct VFIOContainer {
Object parent_obj;
VFIOAddressSpace *space;
bool dirty_pages_started; /* Protected by BQL */
QLIST_HEAD(, VFIOGuestIOMMU) giommu_list;
QLIST_HEAD(, VFIORamDiscardListener) vrdl_list;
- QLIST_ENTRY(VFIOContainerBase) next;
+ QLIST_ENTRY(VFIOContainer) next;
QLIST_HEAD(, VFIODevice) device_list;
GList *iova_ranges;
NotifierWithReturn cpr_reboot_notifier;
};
#define TYPE_VFIO_IOMMU "vfio-iommu"
-OBJECT_DECLARE_TYPE(VFIOContainerBase, VFIOIOMMUClass, VFIO_IOMMU)
+OBJECT_DECLARE_TYPE(VFIOContainer, VFIOIOMMUClass, VFIO_IOMMU)
typedef struct VFIOGuestIOMMU {
- VFIOContainerBase *bcontainer;
+ VFIOContainer *bcontainer;
IOMMUMemoryRegion *iommu_mr;
hwaddr iommu_offset;
IOMMUNotifier n;
} VFIOGuestIOMMU;
typedef struct VFIORamDiscardListener {
- VFIOContainerBase *bcontainer;
+ VFIOContainer *bcontainer;
MemoryRegion *mr;
hwaddr offset_within_address_space;
hwaddr size;
VFIOAddressSpace *vfio_address_space_get(AddressSpace *as);
void vfio_address_space_put(VFIOAddressSpace *space);
void vfio_address_space_insert(VFIOAddressSpace *space,
- VFIOContainerBase *bcontainer);
+ VFIOContainer *bcontainer);
-int vfio_container_dma_map(VFIOContainerBase *bcontainer,
+int vfio_container_dma_map(VFIOContainer *bcontainer,
hwaddr iova, ram_addr_t size,
void *vaddr, bool readonly, MemoryRegion *mr);
-int vfio_container_dma_unmap(VFIOContainerBase *bcontainer,
+int vfio_container_dma_unmap(VFIOContainer *bcontainer,
hwaddr iova, ram_addr_t size,
IOMMUTLBEntry *iotlb, bool unmap_all);
-bool vfio_container_add_section_window(VFIOContainerBase *bcontainer,
+bool vfio_container_add_section_window(VFIOContainer *bcontainer,
MemoryRegionSection *section,
Error **errp);
-void vfio_container_del_section_window(VFIOContainerBase *bcontainer,
+void vfio_container_del_section_window(VFIOContainer *bcontainer,
MemoryRegionSection *section);
-int vfio_container_set_dirty_page_tracking(VFIOContainerBase *bcontainer,
+int vfio_container_set_dirty_page_tracking(VFIOContainer *bcontainer,
bool start, Error **errp);
bool vfio_container_dirty_tracking_is_started(
- const VFIOContainerBase *bcontainer);
+ const VFIOContainer *bcontainer);
bool vfio_container_devices_dirty_tracking_is_supported(
- const VFIOContainerBase *bcontainer);
-int vfio_container_query_dirty_bitmap(const VFIOContainerBase *bcontainer,
+ const VFIOContainer *bcontainer);
+int vfio_container_query_dirty_bitmap(const VFIOContainer *bcontainer,
uint64_t iova, uint64_t size, ram_addr_t ram_addr, Error **errp);
-GList *vfio_container_get_iova_ranges(const VFIOContainerBase *bcontainer);
+GList *vfio_container_get_iova_ranges(const VFIOContainer *bcontainer);
static inline uint64_t
-vfio_container_get_page_size_mask(const VFIOContainerBase *bcontainer)
+vfio_container_get_page_size_mask(const VFIOContainer *bcontainer)
{
assert(bcontainer);
return bcontainer->pgsizes;
* Perform basic setup of the container, including configuring IOMMU
* capabilities, IOVA ranges, supported page sizes, etc.
*
- * @bcontainer: #VFIOContainerBase
+ * @bcontainer: #VFIOContainer
* @errp: pointer to Error*, to store an error if it happens.
*
* Returns true to indicate success and false for error.
*/
- bool (*setup)(VFIOContainerBase *bcontainer, Error **errp);
+ bool (*setup)(VFIOContainer *bcontainer, Error **errp);
/**
* @listener_begin
* Called at the beginning of an address space update transaction.
* See #MemoryListener.
*
- * @bcontainer: #VFIOContainerBase
+ * @bcontainer: #VFIOContainer
*/
- void (*listener_begin)(VFIOContainerBase *bcontainer);
+ void (*listener_begin)(VFIOContainer *bcontainer);
/**
* @listener_commit
* Called at the end of an address space update transaction,
* See #MemoryListener.
*
- * @bcontainer: #VFIOContainerBase
+ * @bcontainer: #VFIOContainer
*/
- void (*listener_commit)(VFIOContainerBase *bcontainer);
+ void (*listener_commit)(VFIOContainer *bcontainer);
/**
* @dma_map
* Map an address range into the container. Note that the memory region is
* referenced within an RCU read lock region across this call.
*
- * @bcontainer: #VFIOContainerBase to use
+ * @bcontainer: #VFIOContainer to use
* @iova: start address to map
* @size: size of the range to map
* @vaddr: process virtual address of mapping
*
* Returns 0 to indicate success and -errno otherwise.
*/
- int (*dma_map)(const VFIOContainerBase *bcontainer,
+ int (*dma_map)(const VFIOContainer *bcontainer,
hwaddr iova, ram_addr_t size,
void *vaddr, bool readonly, MemoryRegion *mr);
/**
*
* Map a file range for the container.
*
- * @bcontainer: #VFIOContainerBase to use for map
+ * @bcontainer: #VFIOContainer to use for map
* @iova: start address to map
* @size: size of the range to map
* @fd: descriptor of the file to map
* @start: starting file offset of the range to map
* @readonly: map read only if true
*/
- int (*dma_map_file)(const VFIOContainerBase *bcontainer,
+ int (*dma_map_file)(const VFIOContainer *bcontainer,
hwaddr iova, ram_addr_t size,
int fd, unsigned long start, bool readonly);
/**
*
* Unmap an address range from the container.
*
- * @bcontainer: #VFIOContainerBase to use for unmap
+ * @bcontainer: #VFIOContainer to use for unmap
* @iova: start address to unmap
* @size: size of the range to unmap
* @iotlb: The IOMMU TLB mapping entry (or NULL)
*
* Returns 0 to indicate success and -errno otherwise.
*/
- int (*dma_unmap)(const VFIOContainerBase *bcontainer,
+ int (*dma_unmap)(const VFIOContainer *bcontainer,
hwaddr iova, ram_addr_t size,
IOMMUTLBEntry *iotlb, bool unmap_all);
*
* Start or stop dirty pages tracking on VFIO container
*
- * @bcontainer: #VFIOContainerBase on which to de/activate dirty
+ * @bcontainer: #VFIOContainer on which to de/activate dirty
* page tracking
* @start: indicates whether to start or stop dirty pages tracking
* @errp: pointer to Error*, to store an error if it happens.
*
* Returns zero to indicate success and negative for error.
*/
- int (*set_dirty_page_tracking)(const VFIOContainerBase *bcontainer,
+ int (*set_dirty_page_tracking)(const VFIOContainer *bcontainer,
bool start, Error **errp);
/**
* @query_dirty_bitmap
*
* Get bitmap of dirty pages from container
*
- * @bcontainer: #VFIOContainerBase from which to get dirty pages
+ * @bcontainer: #VFIOContainer from which to get dirty pages
* @vbmap: #VFIOBitmap internal bitmap structure
* @iova: iova base address
* @size: size of iova range
*
* Returns zero to indicate success and negative for error.
*/
- int (*query_dirty_bitmap)(const VFIOContainerBase *bcontainer,
+ int (*query_dirty_bitmap)(const VFIOContainer *bcontainer,
VFIOBitmap *vbmap, hwaddr iova, hwaddr size, Error **errp);
/* PCI specific */
int (*pci_hot_reset)(VFIODevice *vbasedev, bool single);
/* SPAPR specific */
- bool (*add_window)(VFIOContainerBase *bcontainer,
+ bool (*add_window)(VFIOContainer *bcontainer,
MemoryRegionSection *section,
Error **errp);
- void (*del_window)(VFIOContainerBase *bcontainer,
+ void (*del_window)(VFIOContainer *bcontainer,
MemoryRegionSection *section);
- void (*release)(VFIOContainerBase *bcontainer);
+ void (*release)(VFIOContainer *bcontainer);
};
VFIORamDiscardListener *vfio_find_ram_discard_listener(
- VFIOContainerBase *bcontainer, MemoryRegionSection *section);
+ VFIOContainer *bcontainer, MemoryRegionSection *section);
-void vfio_container_region_add(VFIOContainerBase *bcontainer,
+void vfio_container_region_add(VFIOContainer *bcontainer,
MemoryRegionSection *section, bool cpr_remap);
#endif /* HW_VFIO_VFIO_CONTAINER_BASE_H */
} VFIOGroup;
struct VFIOLegacyContainer {
- VFIOContainerBase parent_obj;
+ VFIOContainer parent_obj;
int fd; /* /dev/vfio/vfio, empowered by the attached groups */
unsigned iommu_type;
#include "system/memory.h"
struct VFIOLegacyContainer;
-struct VFIOContainerBase;
+struct VFIOContainer;
struct VFIOGroup;
struct VFIODevice;
struct VFIOPCIDevice;
struct VFIOIOMMUFDContainer;
struct IOMMUFDBackend;
-typedef int (*dma_map_fn)(const struct VFIOContainerBase *bcontainer,
+typedef int (*dma_map_fn)(const struct VFIOContainer *bcontainer,
hwaddr iova, ram_addr_t size, void *vaddr,
bool readonly, MemoryRegion *mr);
bool vfio_cpr_container_match(struct VFIOLegacyContainer *container,
struct VFIOGroup *group, int fd);
-void vfio_cpr_giommu_remap(struct VFIOContainerBase *bcontainer,
+void vfio_cpr_giommu_remap(struct VFIOContainer *bcontainer,
MemoryRegionSection *section);
bool vfio_cpr_ram_discard_register_listener(
- struct VFIOContainerBase *bcontainer, MemoryRegionSection *section);
+ struct VFIOContainer *bcontainer, MemoryRegionSection *section);
void vfio_cpr_save_vector_fd(struct VFIOPCIDevice *vdev, const char *name,
int nr, int fd);
QLIST_ENTRY(VFIODevice) container_next;
QLIST_ENTRY(VFIODevice) global_next;
struct VFIOGroup *group;
- VFIOContainerBase *bcontainer;
+ VFIOContainer *bcontainer;
char *sysfsdev;
char *name;
DeviceState *dev;
void *data, bool post);
};
-void vfio_device_prepare(VFIODevice *vbasedev, VFIOContainerBase *bcontainer,
+void vfio_device_prepare(VFIODevice *vbasedev, VFIOContainer *bcontainer,
struct vfio_device_info *info);
void vfio_device_unprepare(VFIODevice *vbasedev);