|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-unstable] x86/mm: Make iommu passthrough and mem paging/sharing mutually exclusive
# HG changeset patch
# User Andres Lagar-Cavilla <andres@xxxxxxxxxxxxxxxx>
# Date 1333018893 -3600
# Node ID fb658789d83a47dd82e3b20b64b2aa8725447205
# Parent d52833fd69f86226703cfbc0fc6265e9b65eb39f
x86/mm: Make iommu passthrough and mem paging/sharing mutually exclusive
Regardless of table sharing or processor vendor, these features cannot coexist
since iommu's don't expect gfn->mfn mappings to change, and sharing and paging
depend on trapping all accesses.
Signed-off-by: Andres Lagar-Cavilla <andres@xxxxxxxxxxxxxxxx>
Acked-by: Tim Deegan <tim@xxxxxxx>
Committed-by: Tim Deegan <tim@xxxxxxx>
---
diff -r d52833fd69f8 -r fb658789d83a xen/arch/x86/mm/mem_event.c
--- a/xen/arch/x86/mm/mem_event.c Thu Mar 29 12:01:33 2012 +0100
+++ b/xen/arch/x86/mm/mem_event.c Thu Mar 29 12:01:33 2012 +0100
@@ -567,7 +567,11 @@ int mem_event_domctl(struct domain *d, x
if ( boot_cpu_data.x86_vendor != X86_VENDOR_INTEL )
break;
+ /* No paging if iommu is used */
rc = -EXDEV;
+ if ( unlikely(need_iommu(d)) )
+ break;
+
/* Disallow paging in a PoD guest */
if ( p2m->pod.entry_count )
break;
diff -r d52833fd69f8 -r fb658789d83a xen/arch/x86/mm/mem_sharing.c
--- a/xen/arch/x86/mm/mem_sharing.c Thu Mar 29 12:01:33 2012 +0100
+++ b/xen/arch/x86/mm/mem_sharing.c Thu Mar 29 12:01:33 2012 +0100
@@ -1205,8 +1205,11 @@ int mem_sharing_domctl(struct domain *d,
{
case XEN_DOMCTL_MEM_SHARING_CONTROL:
{
- d->arch.hvm_domain.mem_sharing_enabled = mec->u.enable;
rc = 0;
+ if ( unlikely(need_iommu(d) && mec->u.enable) )
+ rc = -EXDEV;
+ else
+ d->arch.hvm_domain.mem_sharing_enabled = mec->u.enable;
}
break;
diff -r d52833fd69f8 -r fb658789d83a xen/drivers/passthrough/iommu.c
--- a/xen/drivers/passthrough/iommu.c Thu Mar 29 12:01:33 2012 +0100
+++ b/xen/drivers/passthrough/iommu.c Thu Mar 29 12:01:33 2012 +0100
@@ -205,6 +205,13 @@ static int assign_device(struct domain *
if ( !iommu_enabled || !hd->platform_ops )
return 0;
+ /* Prevent device assign if mem paging or mem sharing have been
+ * enabled for this domain */
+ if ( unlikely(!need_iommu(d) &&
+ (d->arch.hvm_domain.mem_sharing_enabled ||
+ d->mem_event->paging.ring_page)) )
+ return -EXDEV;
+
spin_lock(&pcidevs_lock);
if ( (rc = hd->platform_ops->assign_device(d, seg, bus, devfn)) )
goto done;
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |