From: Oleksandr Tyshchenko <olekstysh@gmail.com>
To: xen-devel@lists.xenproject.org
Cc: wei.liu2@citrix.com, julien.grall@arm.com,
sstabellini@kernel.org, ian.jackson@eu.citrix.com,
jbeulich@suse.com
Subject: [PATCH v1 08/10] iommu: Split iommu_hwdom_init() into arch specific parts
Date: Wed, 10 May 2017 17:03:12 +0300 [thread overview]
Message-ID: <1494424994-26232-9-git-send-email-olekstysh@gmail.com> (raw)
In-Reply-To: <1494424994-26232-1-git-send-email-olekstysh@gmail.com>
From: Oleksandr Tyshchenko <oleksandr_tyshchenko@epam.com>
The "retrieving mapping" code has never executed since
iommu_use_hap_pt(d) always returned true on ARM so far. But, with
introducing the non-shared IOMMU patch series we can no longer keep
this code as is due to the lack of M2P support.
In order to retain the current behavior for x86 this code was completely
moved to x86 specific part.
For ARM we just need to populate IOMMU page table if need_iommu flag
is already set and the IOMMU is non-shared.
So, the logic on ARM was changed a bit, but no functional change for x86.
Signed-off-by: Oleksandr Tyshchenko <oleksandr_tyshchenko@epam.com>
CC: Jan Beulich <jbeulich@suse.com>
CC: Julien Grall <julien.grall@arm.com>
---
Changes in V1:
- Clarify patch description.
---
xen/drivers/passthrough/arm/iommu.c | 7 +++++++
xen/drivers/passthrough/iommu.c | 30 +-----------------------------
xen/drivers/passthrough/x86/iommu.c | 36 ++++++++++++++++++++++++++++++++++++
xen/include/xen/iommu.h | 1 +
4 files changed, 45 insertions(+), 29 deletions(-)
diff --git a/xen/drivers/passthrough/arm/iommu.c b/xen/drivers/passthrough/arm/iommu.c
index f132032..2198723 100644
--- a/xen/drivers/passthrough/arm/iommu.c
+++ b/xen/drivers/passthrough/arm/iommu.c
@@ -19,6 +19,7 @@
#include <xen/iommu.h>
#include <xen/device_tree.h>
#include <asm/device.h>
+#include <xen/sched.h>
static const struct iommu_ops *iommu_ops;
@@ -59,6 +60,12 @@ void __hwdom_init arch_iommu_check_autotranslated_hwdom(struct domain *d)
return;
}
+void __hwdom_init arch_iommu_hwdom_init(struct domain *d)
+{
+ if ( need_iommu(d) && !iommu_use_hap_pt(d) )
+ arch_iommu_populate_page_table(d);
+}
+
int arch_iommu_domain_init(struct domain *d)
{
return iommu_dt_domain_init(d);
diff --git a/xen/drivers/passthrough/iommu.c b/xen/drivers/passthrough/iommu.c
index c85f7b4..e66eefb 100644
--- a/xen/drivers/passthrough/iommu.c
+++ b/xen/drivers/passthrough/iommu.c
@@ -177,36 +177,8 @@ void __hwdom_init iommu_hwdom_init(struct domain *d)
register_keyhandler('o', &iommu_dump_p2m_table, "dump iommu p2m table", 0);
d->need_iommu = !!iommu_dom0_strict;
- if ( need_iommu(d) && !iommu_use_hap_pt(d) )
- {
- struct page_info *page;
- unsigned int i = 0;
- int rc = 0;
-
- page_list_for_each ( page, &d->page_list )
- {
- unsigned long mfn = page_to_mfn(page);
- unsigned long gfn = mfn_to_gmfn(d, mfn);
- unsigned int mapping = IOMMUF_readable;
- int ret;
-
- if ( ((page->u.inuse.type_info & PGT_count_mask) == 0) ||
- ((page->u.inuse.type_info & PGT_type_mask)
- == PGT_writable_page) )
- mapping |= IOMMUF_writable;
-
- ret = hd->platform_ops->map_pages(d, gfn, mfn, 0, mapping);
- if ( !rc )
- rc = ret;
-
- if ( !(i++ & 0xfffff) )
- process_pending_softirqs();
- }
- if ( rc )
- printk(XENLOG_WARNING "d%d: IOMMU mapping failed: %d\n",
- d->domain_id, rc);
- }
+ arch_iommu_hwdom_init(d);
return hd->platform_ops->hwdom_init(d);
}
diff --git a/xen/drivers/passthrough/x86/iommu.c b/xen/drivers/passthrough/x86/iommu.c
index 973b72f..904736b 100644
--- a/xen/drivers/passthrough/x86/iommu.c
+++ b/xen/drivers/passthrough/x86/iommu.c
@@ -118,6 +118,42 @@ void __hwdom_init arch_iommu_check_autotranslated_hwdom(struct domain *d)
panic("Presently, iommu must be enabled for PVH hardware domain\n");
}
+void __hwdom_init arch_iommu_hwdom_init(struct domain *d)
+{
+ const struct domain_iommu *hd = dom_iommu(d);
+
+ if ( need_iommu(d) && !iommu_use_hap_pt(d) )
+ {
+ struct page_info *page;
+ unsigned int i = 0;
+ int rc = 0;
+
+ page_list_for_each ( page, &d->page_list )
+ {
+ unsigned long mfn = page_to_mfn(page);
+ unsigned long gfn = mfn_to_gmfn(d, mfn);
+ unsigned int mapping = IOMMUF_readable;
+ int ret;
+
+ if ( ((page->u.inuse.type_info & PGT_count_mask) == 0) ||
+ ((page->u.inuse.type_info & PGT_type_mask)
+ == PGT_writable_page) )
+ mapping |= IOMMUF_writable;
+
+ ret = hd->platform_ops->map_pages(d, gfn, mfn, 0, mapping);
+ if ( !rc )
+ rc = ret;
+
+ if ( !(i++ & 0xfffff) )
+ process_pending_softirqs();
+ }
+
+ if ( rc )
+ printk(XENLOG_WARNING "d%d: IOMMU mapping failed: %d\n",
+ d->domain_id, rc);
+ }
+}
+
int arch_iommu_domain_init(struct domain *d)
{
struct domain_iommu *hd = dom_iommu(d);
diff --git a/xen/include/xen/iommu.h b/xen/include/xen/iommu.h
index f5914db..be43b28 100644
--- a/xen/include/xen/iommu.h
+++ b/xen/include/xen/iommu.h
@@ -65,6 +65,7 @@ void arch_iommu_domain_destroy(struct domain *d);
int arch_iommu_domain_init(struct domain *d);
int arch_iommu_populate_page_table(struct domain *d);
void arch_iommu_check_autotranslated_hwdom(struct domain *d);
+void arch_iommu_hwdom_init(struct domain *d);
int iommu_construct(struct domain *d);
--
2.7.4
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
https://lists.xen.org/xen-devel
next prev parent reply other threads:[~2017-05-10 14:03 UTC|newest]
Thread overview: 66+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-05-10 14:03 [PATCH v1 00/10] "Non-shared" IOMMU support on ARM Oleksandr Tyshchenko
2017-05-10 14:03 ` [PATCH v1 01/10] xen/device-tree: Add dt_count_phandle_with_args helper Oleksandr Tyshchenko
2017-05-10 14:50 ` Jan Beulich
2017-05-10 15:06 ` Oleksandr Tyshchenko
2017-05-10 14:03 ` [PATCH v1 02/10] iommu: Add extra order argument to the IOMMU APIs and platform callbacks Oleksandr Tyshchenko
2017-05-12 14:23 ` Jan Beulich
2017-05-12 15:50 ` Oleksandr Tyshchenko
2017-05-12 16:17 ` Jan Beulich
2017-05-12 16:25 ` Oleksandr Tyshchenko
2017-05-15 7:22 ` Jan Beulich
2017-05-15 10:43 ` Oleksandr Tyshchenko
2017-05-15 12:33 ` Jan Beulich
2017-05-16 12:48 ` Oleksandr Tyshchenko
2017-05-16 13:11 ` Jan Beulich
2017-05-17 15:28 ` Oleksandr Tyshchenko
2017-05-17 15:39 ` Jan Beulich
2017-05-17 18:49 ` Oleksandr Tyshchenko
2017-05-10 14:03 ` [PATCH v1 03/10] xen/arm: p2m: Add helper to convert p2m type to IOMMU flags Oleksandr Tyshchenko
2017-05-10 14:03 ` [PATCH v1 04/10] xen/arm: p2m: Update IOMMU mapping whenever possible if page table is not shared Oleksandr Tyshchenko
2017-05-11 11:24 ` Julien Grall
2017-05-11 14:19 ` Oleksandr Tyshchenko
2017-05-10 14:03 ` [PATCH v1 05/10] iommu/arm: Re-define iommu_use_hap_pt(d) as iommu_hap_pt_share Oleksandr Tyshchenko
2017-05-11 11:28 ` Julien Grall
2017-05-11 14:38 ` Oleksandr Tyshchenko
2017-05-11 17:58 ` Julien Grall
2017-05-11 18:21 ` Oleksandr Tyshchenko
2017-05-10 14:03 ` [PATCH v1 06/10] iommu: Add extra use_iommu argument to iommu_domain_init() Oleksandr Tyshchenko
2017-05-12 14:31 ` Jan Beulich
2017-05-12 17:00 ` Oleksandr Tyshchenko
2017-05-15 7:27 ` Jan Beulich
2017-05-17 19:52 ` Julien Grall
2017-05-18 8:38 ` Jan Beulich
2017-05-18 17:41 ` Oleksandr Tyshchenko
2017-05-19 6:30 ` Jan Beulich
2017-05-19 8:56 ` Oleksandr Tyshchenko
2017-05-10 14:03 ` [PATCH v1 07/10] iommu/arm: Add alloc_page_table platform callback Oleksandr Tyshchenko
2017-05-11 11:38 ` Julien Grall
2017-05-11 14:00 ` Oleksandr Tyshchenko
2017-05-11 18:06 ` Julien Grall
2017-05-11 18:43 ` Oleksandr Tyshchenko
2017-05-12 14:36 ` Jan Beulich
2017-05-10 14:03 ` Oleksandr Tyshchenko [this message]
2017-05-12 14:41 ` [PATCH v1 08/10] iommu: Split iommu_hwdom_init() into arch specific parts Jan Beulich
2017-05-12 15:25 ` Oleksandr Tyshchenko
2017-05-12 15:34 ` Jan Beulich
2017-05-15 7:20 ` Jan Beulich
2017-05-15 7:42 ` Julien Grall
2017-05-15 8:19 ` Jan Beulich
2017-05-15 11:45 ` Julien Grall
2017-05-15 12:43 ` Jan Beulich
2017-05-17 15:45 ` Oleksandr Tyshchenko
2017-05-17 16:01 ` Jan Beulich
2017-05-17 18:51 ` Oleksandr Tyshchenko
2017-05-17 20:30 ` Julien Grall
2017-05-18 8:53 ` Jan Beulich
2017-05-18 18:06 ` Oleksandr Tyshchenko
2017-05-19 6:33 ` Jan Beulich
2017-05-10 14:03 ` [PATCH v1 09/10] xen/arm: Add use_iommu flag to xen_arch_domainconfig Oleksandr Tyshchenko
2017-05-11 11:42 ` Julien Grall
2017-05-11 14:04 ` Oleksandr Tyshchenko
2017-05-10 14:03 ` [PATCH v1 10/10] xen/arm: domain_build: Don't expose the "iommus" property to the guest Oleksandr Tyshchenko
2017-05-11 11:58 ` Julien Grall
2017-05-11 14:15 ` Oleksandr Tyshchenko
2017-05-11 18:07 ` Julien Grall
2017-05-11 18:19 ` Oleksandr Tyshchenko
2017-05-11 18:19 ` Julien Grall
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1494424994-26232-9-git-send-email-olekstysh@gmail.com \
--to=olekstysh@gmail.com \
--cc=ian.jackson@eu.citrix.com \
--cc=jbeulich@suse.com \
--cc=julien.grall@arm.com \
--cc=sstabellini@kernel.org \
--cc=wei.liu2@citrix.com \
--cc=xen-devel@lists.xenproject.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).