Commit 22af4859 authored by Alexey Kardashevskiy's avatar Alexey Kardashevskiy Committed by Michael Ellerman

vfio: powerpc/spapr: Rework groups attaching

This is to make extended ownership and multiple groups support patches
simpler for review.

This should cause no behavioural change.
Signed-off-by: default avatarAlexey Kardashevskiy <aik@ozlabs.ru>
[aw: for the vfio related changes]
Acked-by: default avatarAlex Williamson <alex.williamson@redhat.com>
Reviewed-by: default avatarDavid Gibson <david@gibson.dropbear.id.au>
Reviewed-by: default avatarGavin Shan <gwshan@linux.vnet.ibm.com>
Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
parent 649354b7
...@@ -460,16 +460,21 @@ static int tce_iommu_attach_group(void *iommu_data, ...@@ -460,16 +460,21 @@ static int tce_iommu_attach_group(void *iommu_data,
iommu_group_id(container->tbl->it_group), iommu_group_id(container->tbl->it_group),
iommu_group_id(iommu_group)); iommu_group_id(iommu_group));
ret = -EBUSY; ret = -EBUSY;
} else if (container->enabled) { goto unlock_exit;
}
if (container->enabled) {
pr_err("tce_vfio: attaching group #%u to enabled container\n", pr_err("tce_vfio: attaching group #%u to enabled container\n",
iommu_group_id(iommu_group)); iommu_group_id(iommu_group));
ret = -EBUSY; ret = -EBUSY;
} else { goto unlock_exit;
}
ret = iommu_take_ownership(tbl); ret = iommu_take_ownership(tbl);
if (!ret) if (!ret)
container->tbl = tbl; container->tbl = tbl;
}
unlock_exit:
mutex_unlock(&container->lock); mutex_unlock(&container->lock);
return ret; return ret;
...@@ -487,7 +492,9 @@ static void tce_iommu_detach_group(void *iommu_data, ...@@ -487,7 +492,9 @@ static void tce_iommu_detach_group(void *iommu_data,
pr_warn("tce_vfio: detaching group #%u, expected group is #%u\n", pr_warn("tce_vfio: detaching group #%u, expected group is #%u\n",
iommu_group_id(iommu_group), iommu_group_id(iommu_group),
iommu_group_id(tbl->it_group)); iommu_group_id(tbl->it_group));
} else { goto unlock_exit;
}
if (container->enabled) { if (container->enabled) {
pr_warn("tce_vfio: detaching group #%u from enabled container, forcing disable\n", pr_warn("tce_vfio: detaching group #%u from enabled container, forcing disable\n",
iommu_group_id(tbl->it_group)); iommu_group_id(tbl->it_group));
...@@ -499,7 +506,8 @@ static void tce_iommu_detach_group(void *iommu_data, ...@@ -499,7 +506,8 @@ static void tce_iommu_detach_group(void *iommu_data,
container->tbl = NULL; container->tbl = NULL;
tce_iommu_clear(container, tbl, tbl->it_offset, tbl->it_size); tce_iommu_clear(container, tbl, tbl->it_offset, tbl->it_size);
iommu_release_ownership(tbl); iommu_release_ownership(tbl);
}
unlock_exit:
mutex_unlock(&container->lock); mutex_unlock(&container->lock);
} }
......
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