[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-changelog] [xen staging] x86/iommu: fix PVH dom0 settings



commit eb8ce7d5ca38565953faebb728179eebb00012bf
Author:     Paul Durrant <paul.durrant@xxxxxxxxxx>
AuthorDate: Fri Sep 27 14:07:42 2019 +0200
Commit:     Jan Beulich <jbeulich@xxxxxxxx>
CommitDate: Fri Sep 27 14:07:42 2019 +0200

    x86/iommu: fix PVH dom0 settings
    
    PVH dom0 must operate with the iommu settings in 'strict' mode i.e. only the
    domain's own pages will be mapped in the IOMMU. The check_hwdom_reqs() is
    supposed to ensure this. Unfortunately the test for a PVH dom0 is made
    using paging_mode_translate() and, when commit f89f5558 "remove late
    (on-demand) construction of IOMMU page tables" moved the call of
    check_hwdom_reqs() from iommu_hwdom_init() to iommu_domain_init(), that
    test became ineffective (because iommu_domain_init() is called before
    paging_enable()).
    
    This patch replaces the test of paging_mode_translate() with a test of
    hap_enabled(), and also verifies 'strict' mode is turned on in
    arch_iommu_check_autotranslated_hwdom().
    
    Reported-by: Roger Pau Monne <roger.pau@xxxxxxxxxx>
    Signed-off-by: Paul Durrant <paul.durrant@xxxxxxxxxx>
    Reviewed-by: Jan Beulich <jbeulich@xxxxxxxx>
    Release-acked-by: Juergen Gross <jgross@xxxxxxxx>
---
 xen/drivers/passthrough/iommu.c     | 6 +++---
 xen/drivers/passthrough/x86/iommu.c | 3 +++
 2 files changed, 6 insertions(+), 3 deletions(-)

diff --git a/xen/drivers/passthrough/iommu.c b/xen/drivers/passthrough/iommu.c
index 2733b320ec..8b550f909b 100644
--- a/xen/drivers/passthrough/iommu.c
+++ b/xen/drivers/passthrough/iommu.c
@@ -154,13 +154,13 @@ custom_param("dom0-iommu", parse_dom0_iommu_param);
 
 static void __hwdom_init check_hwdom_reqs(struct domain *d)
 {
-    if ( iommu_hwdom_none || !paging_mode_translate(d) )
+    if ( iommu_hwdom_none || !hap_enabled(d) )
         return;
 
-    arch_iommu_check_autotranslated_hwdom(d);
-
     iommu_hwdom_passthrough = false;
     iommu_hwdom_strict = true;
+
+    arch_iommu_check_autotranslated_hwdom(d);
 }
 
 int iommu_domain_init(struct domain *d, unsigned int opts)
diff --git a/xen/drivers/passthrough/x86/iommu.c 
b/xen/drivers/passthrough/x86/iommu.c
index 7107b11757..59905629e1 100644
--- a/xen/drivers/passthrough/x86/iommu.c
+++ b/xen/drivers/passthrough/x86/iommu.c
@@ -85,6 +85,9 @@ void __hwdom_init 
arch_iommu_check_autotranslated_hwdom(struct domain *d)
 {
     if ( !is_iommu_enabled(d) )
         panic("Presently, iommu must be enabled for PVH hardware domain\n");
+
+    if ( !iommu_hwdom_strict )
+        panic("PVH hardware domain iommu must be set in 'strict' mode\n");
 }
 
 int arch_iommu_domain_init(struct domain *d)
--
generated by git-patchbot for /home/xen/git/xen.git#staging

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/xen-changelog

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.