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

[PATCH 15/17] IOMMU: page table dumping adjustments


  • To: "xen-devel@xxxxxxxxxxxxxxxxxxxx" <xen-devel@xxxxxxxxxxxxxxxxxxxx>
  • From: Jan Beulich <jbeulich@xxxxxxxx>
  • Date: Tue, 24 Aug 2021 16:26:44 +0200
  • Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com; dkim=pass header.d=suse.com; arc=none
  • Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=+chUC9y2Lb1G4vN61QIuBBXsqqC6ILv8f/8geNJpSIk=; b=V+m4gd3hop4Kd6k5SME465aQMkRQ6JfO1OFj8mEC4hyY+mivMHV4Vr9qtXnz3jSIm+a7vVlsMf8Ibl8noifa4v5yYJNGy0nEpoXhLTqRWZPJs+2KAn9F6sbRoc5DZRWBeCS5kH+f3UWlBJYklLXVYD2OpCRZmMCcyFy26SNt5I/sDvnepPFexUhUfONKaCvxuxinBdhb6KVaVzpXvwnvjegtsE225Nk3zpX9jsubZi0+tytvOod4+mJ7GXAEcFH1IMZoH8MrXqBa4WCpdqpzunXgbncYVa39yPf/886wiZtvtDXJUFf5SmSAA0q7mKAn2yXyDTUSQUeHAkwR+F4Emw==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=K0KRIO8eqhFI+9kQygeatb9Kg9FK5Rru0iuKTCFOOV2U2n4N/WokiYeBzy6Q14ZnlkArDes9Kbi7leynJvqrHLrIvp9ElDtW/LeaGMgBPnI2K52M9qH5sSgjdZYRMcW7Jw7QjXUGKDdwAsTrb+EcHXrlHxTlXc7P2Wu2lLYLm3UK7MSQVC4syGx7seMrHnSnz1pvZTw2qWuMeyVf1geJhmXudKT0xmasHQPW/5DcURFdT/wml/8A2iTCLa/6jaLvpQjrgoYZq8UhJ/kqIOra3fNTTp3gaMDFbj0mZHfBsPH68anXRetrNfkkYjnH3TfdEg0J1vZnH+/eSfE6lAUA3Q==
  • Authentication-results: xen.org; dkim=none (message not signed) header.d=none;xen.org; dmarc=none action=none header.from=suse.com;
  • Cc: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>, Paul Durrant <paul@xxxxxxx>
  • Delivery-date: Tue, 24 Aug 2021 14:26:53 +0000
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>

For one none of the three IOMMU implementations on Arm specify a dumping
hook. Generalize VT-d's "don't dump shared page tables" to cover for
this.

Further in the past I was told that on Arm in principle there could be
multiple different IOMMUs, and hence different domains' platform_ops
pointers could differ. Use each domain's ops for calling the dump hook.
(In the long run all uses of iommu_get_ops() would likely need to
disappear for this reason.)

Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx>

--- a/xen/drivers/passthrough/iommu.c
+++ b/xen/drivers/passthrough/iommu.c
@@ -640,12 +640,9 @@ bool_t iommu_has_feature(struct domain *
 static void iommu_dump_page_tables(unsigned char key)
 {
     struct domain *d;
-    const struct iommu_ops *ops;
 
     ASSERT(iommu_enabled);
 
-    ops = iommu_get_ops();
-
     rcu_read_lock(&domlist_read_lock);
 
     for_each_domain(d)
@@ -653,7 +650,13 @@ static void iommu_dump_page_tables(unsig
         if ( is_hardware_domain(d) || !is_iommu_enabled(d) )
             continue;
 
-        ops->dump_page_tables(d);
+        if ( iommu_use_hap_pt(d) )
+        {
+            printk("%pd sharing page tables\n", d);
+            continue;
+        }
+
+        dom_iommu(d)->platform_ops->dump_page_tables(d);
     }
 
     rcu_read_unlock(&domlist_read_lock);
--- a/xen/drivers/passthrough/vtd/iommu.c
+++ b/xen/drivers/passthrough/vtd/iommu.c
@@ -2835,12 +2835,6 @@ static void vtd_dump_page_tables(struct
 {
     const struct domain_iommu *hd = dom_iommu(d);
 
-    if ( iommu_use_hap_pt(d) )
-    {
-        printk(VTDPREFIX " %pd sharing EPT table\n", d);
-        return;
-    }
-
     printk(VTDPREFIX" %pd table has %d levels\n", d,
            agaw_to_level(hd->arch.vtd.agaw));
     vtd_dump_page_table_level(hd->arch.vtd.pgd_maddr,




 


Rackspace

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