Commit 1282ba7f authored by Alexey Kardashevskiy's avatar Alexey Kardashevskiy Committed by Alex Williamson

vfio/powerpc/spapr_tce: Enforce IOMMU type compatibility check

The existing SPAPR TCE driver advertises both VFIO_SPAPR_TCE_IOMMU and
VFIO_SPAPR_TCE_v2_IOMMU types to the userspace and the userspace usually
picks the v2.

Normally the userspace would create a container, attach an IOMMU group
to it and only then set the IOMMU type (which would normally be v2).

However a specific IOMMU group may not support v2, in other words
it may not implement set_window/unset_window/take_ownership/
release_ownership and such a group should not be attached to
a v2 container.

This adds extra checks that a new group can do what the selected IOMMU
type suggests. The userspace can then test the return value from
ioctl(VFIO_SET_IOMMU, VFIO_SPAPR_TCE_v2_IOMMU) and try
VFIO_SPAPR_TCE_IOMMU.
Signed-off-by: default avatarAlexey Kardashevskiy <aik@ozlabs.ru>
Signed-off-by: default avatarAlex Williamson <alex.williamson@redhat.com>
parent 39da7c50
...@@ -1335,8 +1335,16 @@ static int tce_iommu_attach_group(void *iommu_data, ...@@ -1335,8 +1335,16 @@ static int tce_iommu_attach_group(void *iommu_data,
if (!table_group->ops || !table_group->ops->take_ownership || if (!table_group->ops || !table_group->ops->take_ownership ||
!table_group->ops->release_ownership) { !table_group->ops->release_ownership) {
if (container->v2) {
ret = -EPERM;
goto unlock_exit;
}
ret = tce_iommu_take_ownership(container, table_group); ret = tce_iommu_take_ownership(container, table_group);
} else { } else {
if (!container->v2) {
ret = -EPERM;
goto unlock_exit;
}
ret = tce_iommu_take_ownership_ddw(container, table_group); ret = tce_iommu_take_ownership_ddw(container, table_group);
if (!tce_groups_attached(container) && !container->tables[0]) if (!tce_groups_attached(container) && !container->tables[0])
container->def_window_pending = true; container->def_window_pending = true;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment