* Interfaces for IBM EEH (Enhanced Error Handling)
*/
#ifdef CONFIG_VFIO_PCI
-static bool vfio_eeh_container_ok(VFIOContainer *container)
+static bool vfio_eeh_container_ok(VFIOLegacyContainer *container)
{
/*
* As of 2016-03-04 (linux-4.5) the host kernel EEH/VFIO
return true;
}
-static int vfio_eeh_container_op(VFIOContainer *container, uint32_t op)
+static int vfio_eeh_container_op(VFIOLegacyContainer *container, uint32_t op)
{
struct vfio_eeh_pe_op pe_op = {
.argsz = sizeof(pe_op),
return ret;
}
-static VFIOContainer *vfio_eeh_as_container(AddressSpace *as)
+static VFIOLegacyContainer *vfio_eeh_as_container(AddressSpace *as)
{
VFIOAddressSpace *space = vfio_address_space_get(as);
VFIOContainerBase *bcontainer = NULL;
static bool vfio_eeh_as_ok(AddressSpace *as)
{
- VFIOContainer *container = vfio_eeh_as_container(as);
+ VFIOLegacyContainer *container = vfio_eeh_as_container(as);
return (container != NULL) && vfio_eeh_container_ok(container);
}
static int vfio_eeh_as_op(AddressSpace *as, uint32_t op)
{
- VFIOContainer *container = vfio_eeh_as_container(as);
+ VFIOLegacyContainer *container = vfio_eeh_as_container(as);
if (!container) {
return -ENODEV;
static VFIOGroupList vfio_group_list =
QLIST_HEAD_INITIALIZER(vfio_group_list);
-static int vfio_ram_block_discard_disable(VFIOContainer *container, bool state)
+static int vfio_ram_block_discard_disable(VFIOLegacyContainer *container,
+ bool state)
{
switch (container->iommu_type) {
case VFIO_TYPE1v2_IOMMU:
}
}
-static int vfio_dma_unmap_bitmap(const VFIOContainer *container,
+static int vfio_dma_unmap_bitmap(const VFIOLegacyContainer *container,
hwaddr iova, ram_addr_t size,
IOMMUTLBEntry *iotlb)
{
hwaddr iova, ram_addr_t size,
IOMMUTLBEntry *iotlb)
{
- const VFIOContainer *container = VFIO_IOMMU_LEGACY(bcontainer);
+ const VFIOLegacyContainer *container = VFIO_IOMMU_LEGACY(bcontainer);
struct vfio_iommu_type1_dma_unmap unmap = {
.argsz = sizeof(unmap),
.flags = 0,
ram_addr_t size, void *vaddr, bool readonly,
MemoryRegion *mr)
{
- const VFIOContainer *container = VFIO_IOMMU_LEGACY(bcontainer);
+ const VFIOLegacyContainer *container = VFIO_IOMMU_LEGACY(bcontainer);
struct vfio_iommu_type1_dma_map map = {
.argsz = sizeof(map),
.flags = VFIO_DMA_MAP_FLAG_READ,
vfio_legacy_set_dirty_page_tracking(const VFIOContainerBase *bcontainer,
bool start, Error **errp)
{
- const VFIOContainer *container = VFIO_IOMMU_LEGACY(bcontainer);
+ const VFIOLegacyContainer *container = VFIO_IOMMU_LEGACY(bcontainer);
int ret;
struct vfio_iommu_type1_dirty_bitmap dirty = {
.argsz = sizeof(dirty),
static int vfio_legacy_query_dirty_bitmap(const VFIOContainerBase *bcontainer,
VFIOBitmap *vbmap, hwaddr iova, hwaddr size, Error **errp)
{
- const VFIOContainer *container = VFIO_IOMMU_LEGACY(bcontainer);
+ const VFIOLegacyContainer *container = VFIO_IOMMU_LEGACY(bcontainer);
struct vfio_iommu_type1_dirty_bitmap *dbitmap;
struct vfio_iommu_type1_dirty_bitmap_get *range;
int ret;
return true;
}
-static VFIOContainer *vfio_create_container(int fd, VFIOGroup *group,
+static VFIOLegacyContainer *vfio_create_container(int fd, VFIOGroup *group,
Error **errp)
{
int iommu_type;
const char *vioc_name;
- VFIOContainer *container;
+ VFIOLegacyContainer *container;
iommu_type = vfio_get_iommu_type(fd, errp);
if (iommu_type < 0) {
return container;
}
-static int vfio_get_iommu_info(VFIOContainer *container,
+static int vfio_get_iommu_info(VFIOLegacyContainer *container,
struct vfio_iommu_type1_info **info)
{
return NULL;
}
-static void vfio_get_iommu_info_migration(VFIOContainer *container,
+static void vfio_get_iommu_info_migration(VFIOLegacyContainer *container,
struct vfio_iommu_type1_info *info)
{
struct vfio_info_cap_header *hdr;
static bool vfio_legacy_setup(VFIOContainerBase *bcontainer, Error **errp)
{
- VFIOContainer *container = VFIO_IOMMU_LEGACY(bcontainer);
+ VFIOLegacyContainer *container = VFIO_IOMMU_LEGACY(bcontainer);
g_autofree struct vfio_iommu_type1_info *info = NULL;
int ret;
return true;
}
-static bool vfio_container_attach_discard_disable(VFIOContainer *container,
- VFIOGroup *group, Error **errp)
+static bool vfio_container_attach_discard_disable(
+ VFIOLegacyContainer *container, VFIOGroup *group, Error **errp)
{
int ret;
return !ret;
}
-static bool vfio_container_group_add(VFIOContainer *container, VFIOGroup *group,
- Error **errp)
+static bool vfio_container_group_add(VFIOLegacyContainer *container,
+ VFIOGroup *group, Error **errp)
{
if (!vfio_container_attach_discard_disable(container, group, errp)) {
return false;
return true;
}
-static void vfio_container_group_del(VFIOContainer *container, VFIOGroup *group)
+static void vfio_container_group_del(VFIOLegacyContainer *container,
+ VFIOGroup *group)
{
QLIST_REMOVE(group, container_next);
group->container = NULL;
static bool vfio_container_connect(VFIOGroup *group, AddressSpace *as,
Error **errp)
{
- VFIOContainer *container;
+ VFIOLegacyContainer *container;
VFIOContainerBase *bcontainer;
int ret, fd = -1;
VFIOAddressSpace *space;
static void vfio_container_disconnect(VFIOGroup *group)
{
- VFIOContainer *container = group->container;
+ VFIOLegacyContainer *container = group->container;
VFIOContainerBase *bcontainer = VFIO_IOMMU(container);
VFIOIOMMUClass *vioc = VFIO_IOMMU_GET_CLASS(bcontainer);
static void vfio_iommu_legacy_instance_init(Object *obj)
{
- VFIOContainer *container = VFIO_IOMMU_LEGACY(obj);
+ VFIOLegacyContainer *container = VFIO_IOMMU_LEGACY(obj);
QLIST_INIT(&container->group_list);
}
.name = TYPE_VFIO_IOMMU_LEGACY,
.parent = TYPE_VFIO_IOMMU,
.instance_init = vfio_iommu_legacy_instance_init,
- .instance_size = sizeof(VFIOContainer),
+ .instance_size = sizeof(VFIOLegacyContainer),
.class_init = vfio_iommu_legacy_class_init,
}, {
.name = TYPE_HOST_IOMMU_DEVICE_LEGACY_VFIO,
#include "qapi/error.h"
#include "qemu/error-report.h"
-static bool vfio_dma_unmap_vaddr_all(VFIOContainer *container, Error **errp)
+static bool vfio_dma_unmap_vaddr_all(VFIOLegacyContainer *container,
+ Error **errp)
{
struct vfio_iommu_type1_dma_unmap unmap = {
.argsz = sizeof(unmap),
hwaddr iova, ram_addr_t size, void *vaddr,
bool readonly, MemoryRegion *mr)
{
- const VFIOContainer *container = VFIO_IOMMU_LEGACY(bcontainer);
+ const VFIOLegacyContainer *container = VFIO_IOMMU_LEGACY(bcontainer);
struct vfio_iommu_type1_dma_map map = {
.argsz = sizeof(map),
static void vfio_region_remap(MemoryListener *listener,
MemoryRegionSection *section)
{
- VFIOContainer *container = container_of(listener, VFIOContainer,
- cpr.remap_listener);
+ VFIOLegacyContainer *container = container_of(listener,
+ VFIOLegacyContainer,
+ cpr.remap_listener);
vfio_container_region_add(VFIO_IOMMU(container), section, true);
}
-static bool vfio_cpr_supported(VFIOContainer *container, Error **errp)
+static bool vfio_cpr_supported(VFIOLegacyContainer *container, Error **errp)
{
if (!ioctl(container->fd, VFIO_CHECK_EXTENSION, VFIO_UPDATE_VADDR)) {
error_setg(errp, "VFIO container does not support VFIO_UPDATE_VADDR");
static int vfio_container_pre_save(void *opaque)
{
- VFIOContainer *container = opaque;
+ VFIOLegacyContainer *container = opaque;
Error *local_err = NULL;
if (!vfio_dma_unmap_vaddr_all(container, &local_err)) {
static int vfio_container_post_load(void *opaque, int version_id)
{
- VFIOContainer *container = opaque;
+ VFIOLegacyContainer *container = opaque;
VFIOContainerBase *bcontainer = VFIO_IOMMU(container);
VFIOIOMMUClass *vioc = VFIO_IOMMU_GET_CLASS(bcontainer);
dma_map_fn saved_dma_map = vioc->dma_map;
static int vfio_cpr_fail_notifier(NotifierWithReturn *notifier,
MigrationEvent *e, Error **errp)
{
- VFIOContainer *container =
- container_of(notifier, VFIOContainer, cpr.transfer_notifier);
+ VFIOLegacyContainer *container =
+ container_of(notifier, VFIOLegacyContainer, cpr.transfer_notifier);
VFIOContainerBase *bcontainer = VFIO_IOMMU(container);
if (e->type != MIG_EVENT_PRECOPY_FAILED) {
return 0;
}
-bool vfio_legacy_cpr_register_container(VFIOContainer *container, Error **errp)
+bool vfio_legacy_cpr_register_container(VFIOLegacyContainer *container,
+ Error **errp)
{
VFIOContainerBase *bcontainer = VFIO_IOMMU(container);
Error **cpr_blocker = &container->cpr.blocker;
return true;
}
-void vfio_legacy_cpr_unregister_container(VFIOContainer *container)
+void vfio_legacy_cpr_unregister_container(VFIOLegacyContainer *container)
{
VFIOContainerBase *bcontainer = VFIO_IOMMU(container);
return !fstat(fd1, &st1) && !fstat(fd2, &st2) && st1.st_dev == st2.st_dev;
}
-bool vfio_cpr_container_match(VFIOContainer *container, VFIOGroup *group,
+bool vfio_cpr_container_match(VFIOLegacyContainer *container, VFIOGroup *group,
int fd)
{
if (container->fd == fd) {
} VFIOHostDMAWindow;
typedef struct VFIOSpaprContainer {
- VFIOContainer container;
+ VFIOLegacyContainer container;
MemoryListener prereg_listener;
QLIST_HEAD(, VFIOHostDMAWindow) hostwin_list;
unsigned int levels;
{
VFIOSpaprContainer *scontainer = container_of(listener, VFIOSpaprContainer,
prereg_listener);
- VFIOContainer *container = &scontainer->container;
+ VFIOLegacyContainer *container = &scontainer->container;
VFIOContainerBase *bcontainer = VFIO_IOMMU(container);
const hwaddr gpa = section->offset_within_address_space;
hwaddr end;
{
VFIOSpaprContainer *scontainer = container_of(listener, VFIOSpaprContainer,
prereg_listener);
- VFIOContainer *container = &scontainer->container;
+ VFIOLegacyContainer *container = &scontainer->container;
const hwaddr gpa = section->offset_within_address_space;
hwaddr end;
int ret;
return hostwin_found ? hostwin : NULL;
}
-static int vfio_spapr_remove_window(VFIOContainer *container,
+static int vfio_spapr_remove_window(VFIOLegacyContainer *container,
hwaddr offset_within_address_space)
{
struct vfio_iommu_spapr_tce_remove remove = {
return 0;
}
-static bool vfio_spapr_create_window(VFIOContainer *container,
+static bool vfio_spapr_create_window(VFIOLegacyContainer *container,
MemoryRegionSection *section,
hwaddr *pgsize, Error **errp)
{
MemoryRegionSection *section,
Error **errp)
{
- VFIOContainer *container = VFIO_IOMMU_LEGACY(bcontainer);
+ VFIOLegacyContainer *container = VFIO_IOMMU_LEGACY(bcontainer);
VFIOSpaprContainer *scontainer = container_of(container, VFIOSpaprContainer,
container);
VFIOHostDMAWindow *hostwin;
vfio_spapr_container_del_section_window(VFIOContainerBase *bcontainer,
MemoryRegionSection *section)
{
- VFIOContainer *container = VFIO_IOMMU_LEGACY(bcontainer);
+ VFIOLegacyContainer *container = VFIO_IOMMU_LEGACY(bcontainer);
VFIOSpaprContainer *scontainer = container_of(container, VFIOSpaprContainer,
container);
static void vfio_spapr_container_release(VFIOContainerBase *bcontainer)
{
- VFIOContainer *container = VFIO_IOMMU_LEGACY(bcontainer);
+ VFIOLegacyContainer *container = VFIO_IOMMU_LEGACY(bcontainer);
VFIOSpaprContainer *scontainer = container_of(container, VFIOSpaprContainer,
container);
VFIOHostDMAWindow *hostwin, *next;
static bool vfio_spapr_container_setup(VFIOContainerBase *bcontainer,
Error **errp)
{
- VFIOContainer *container = VFIO_IOMMU_LEGACY(bcontainer);
+ VFIOLegacyContainer *container = VFIO_IOMMU_LEGACY(bcontainer);
VFIOSpaprContainer *scontainer = container_of(container, VFIOSpaprContainer,
container);
struct vfio_iommu_spapr_tce_info info;
#include "hw/vfio/vfio-container-base.h"
#include "hw/vfio/vfio-cpr.h"
-typedef struct VFIOContainer VFIOContainer;
+typedef struct VFIOLegacyContainer VFIOLegacyContainer;
typedef struct VFIODevice VFIODevice;
typedef struct VFIOGroup {
int fd;
int groupid;
- VFIOContainer *container;
+ VFIOLegacyContainer *container;
QLIST_HEAD(, VFIODevice) device_list;
QLIST_ENTRY(VFIOGroup) next;
QLIST_ENTRY(VFIOGroup) container_next;
bool ram_block_discard_allowed;
} VFIOGroup;
-struct VFIOContainer {
+struct VFIOLegacyContainer {
VFIOContainerBase parent_obj;
int fd; /* /dev/vfio/vfio, empowered by the attached groups */
VFIOContainerCPR cpr;
};
-OBJECT_DECLARE_SIMPLE_TYPE(VFIOContainer, VFIO_IOMMU_LEGACY);
+OBJECT_DECLARE_SIMPLE_TYPE(VFIOLegacyContainer, VFIO_IOMMU_LEGACY);
#endif /* HW_VFIO_CONTAINER_H */
#include "migration/misc.h"
#include "system/memory.h"
-struct VFIOContainer;
+struct VFIOLegacyContainer;
struct VFIOContainerBase;
struct VFIOGroup;
struct VFIODevice;
NotifierWithReturn transfer_notifier;
} VFIOPCICPR;
-bool vfio_legacy_cpr_register_container(struct VFIOContainer *container,
+bool vfio_legacy_cpr_register_container(struct VFIOLegacyContainer *container,
Error **errp);
-void vfio_legacy_cpr_unregister_container(struct VFIOContainer *container);
+void vfio_legacy_cpr_unregister_container(
+ struct VFIOLegacyContainer *container);
int vfio_cpr_reboot_notifier(NotifierWithReturn *notifier, MigrationEvent *e,
Error **errp);
int vfio_cpr_group_get_device_fd(int d, const char *name);
-bool vfio_cpr_container_match(struct VFIOContainer *container,
+bool vfio_cpr_container_match(struct VFIOLegacyContainer *container,
struct VFIOGroup *group, int fd);
void vfio_cpr_giommu_remap(struct VFIOContainerBase *bcontainer,