|
|
|
|
|
|
|
|
|
|
xen-changelog
[Xen-changelog] [xen-unstable] VT-d: Explicitly test EPT capabilities du
# HG changeset patch
# User Tim Deegan <tim@xxxxxxx>
# Date 1314092600 -3600
# Node ID 41f00cf6b82205cab03a583356c6a64855539726
# Parent 3a05da2dc7c0a5fc0fcfc40c535d1fcb71203625
VT-d: Explicitly test EPT capabilities during IOMMU init
because the cached version isn't set up until the EPT init happens.
Signed-off-by: Tim Deegan <tim@xxxxxxx>
---
diff -r 3a05da2dc7c0 -r 41f00cf6b822 xen/drivers/passthrough/vtd/iommu.c
--- a/xen/drivers/passthrough/vtd/iommu.c Mon Aug 22 16:15:33 2011 +0100
+++ b/xen/drivers/passthrough/vtd/iommu.c Tue Aug 23 10:43:20 2011 +0100
@@ -1739,15 +1739,15 @@
static int vtd_ept_page_compatible(struct iommu *iommu)
{
- u64 cap = iommu->cap;
+ u64 ept_cap, vtd_cap = iommu->cap;
- if ( ept_has_2mb(cpu_has_vmx_ept_2mb) != cap_sps_2mb(cap) )
+ /* EPT is not initialised yet, so we must check the capability in
+ * the MSR explicitly rather than use cpu_has_vmx_ept_*() */
+ if ( rdmsr_safe(MSR_IA32_VMX_EPT_VPID_CAP, ept_cap) != 0 )
return 0;
- if ( ept_has_1gb(cpu_has_vmx_ept_1gb) != cap_sps_1gb(cap) )
- return 0;
-
- return 1;
+ return ( ept_has_2mb(ept_cap) == cap_sps_2mb(vtd_cap)
+ && ept_has_1gb(ept_cap) == cap_sps_1gb(vtd_cap) );
}
/*
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|
<Prev in Thread] |
Current Thread |
[Next in Thread> |
- [Xen-changelog] [xen-unstable] VT-d: Explicitly test EPT capabilities during IOMMU init,
Xen patchbot-unstable <=
|
|
|
|
|