From: "Xu, Quan" <quan.xu@intel.com> To: xen-devel@lists.xen.org Cc: Kevin Tian <kevin.tian@intel.com>, dario.faggioli@citrix.com, Jan Beulich <jbeulich@suse.com>, Quan Xu <quan.xu@intel.com> Subject: [PATCH v7 01/11] IOMMU: handle IOMMU mapping and unmapping failures Date: Wed, 8 Jun 2016 16:58:54 +0800 [thread overview] Message-ID: <1465376344-28290-2-git-send-email-quan.xu@intel.com> (raw) In-Reply-To: <1465376344-28290-1-git-send-email-quan.xu@intel.com> From: Quan Xu <quan.xu@intel.com> Treat IOMMU mapping and unmapping failures as a fatal to the DomU If IOMMU mapping and unmapping failed, crash the DomU and propagate the error up to the call trees. No spamming of the log can occur. For DomU, we avoid logging any message for already dying domains. For Dom0, that'll still be more verbose than we'd really like, but it at least wouldn't outright flood the console. Signed-off-by: Quan Xu <quan.xu@intel.com> Reviewed-by: Kevin Tian <kevin.tian@intel.com> Reviewed-by: Jan Beulich <jbeulich@suse.com> CC: Jan Beulich <jbeulich@suse.com> CC: Kevin Tian <kevin.tian@intel.com> --- xen/drivers/passthrough/iommu.c | 30 ++++++++++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/xen/drivers/passthrough/iommu.c b/xen/drivers/passthrough/iommu.c index 9d104d2..673e126 100644 --- a/xen/drivers/passthrough/iommu.c +++ b/xen/drivers/passthrough/iommu.c @@ -240,21 +240,47 @@ int iommu_map_page(struct domain *d, unsigned long gfn, unsigned long mfn, unsigned int flags) { const struct domain_iommu *hd = dom_iommu(d); + int rc; if ( !iommu_enabled || !hd->platform_ops ) return 0; - return hd->platform_ops->map_page(d, gfn, mfn, flags); + rc = hd->platform_ops->map_page(d, gfn, mfn, flags); + if ( unlikely(rc) ) + { + if ( !d->is_shutting_down && printk_ratelimit() ) + printk(XENLOG_ERR + "d%d: IOMMU mapping gfn %#lx to mfn %#lx failed: %d\n", + d->domain_id, gfn, mfn, rc); + + if ( !is_hardware_domain(d) ) + domain_crash(d); + } + + return rc; } int iommu_unmap_page(struct domain *d, unsigned long gfn) { const struct domain_iommu *hd = dom_iommu(d); + int rc; if ( !iommu_enabled || !hd->platform_ops ) return 0; - return hd->platform_ops->unmap_page(d, gfn); + rc = hd->platform_ops->unmap_page(d, gfn); + if ( unlikely(rc) ) + { + if ( !d->is_shutting_down && printk_ratelimit() ) + printk(XENLOG_ERR + "d%d: IOMMU unmapping gfn %#lx failed: %d\n", + d->domain_id, gfn, rc); + + if ( !is_hardware_domain(d) ) + domain_crash(d); + } + + return rc; } static void iommu_free_pagetables(unsigned long unused) -- 1.9.1 _______________________________________________ Xen-devel mailing list Xen-devel@lists.xen.org http://lists.xen.org/xen-devel
next prev parent reply other threads:[~2016-06-08 8:58 UTC|newest] Thread overview: 45+ messages / expand[flat|nested] mbox.gz Atom feed top 2016-06-08 8:58 [PATCH v7 00/11] Check VT-d Device-TLB flush error Xu, Quan 2016-06-08 8:58 ` Xu, Quan [this message] 2016-06-08 8:58 ` [PATCH v7 02/11] IOMMU/MMU: enhance the call trees of IOMMU unmapping and mapping Xu, Quan 2016-06-08 14:40 ` Jan Beulich [not found] ` <57584D8602000078000F32D0@prv-mh.provo.novell.com> [not found] ` <421857ad-4f6b-e99c-1e81-034b19effdfb@amd.com> 2016-06-10 6:56 ` Jan Beulich 2016-06-12 6:41 ` Tian, Kevin 2016-06-08 8:58 ` [PATCH v7 03/11] IOMMU: propagate IOMMU Device-TLB flush error up to IOMMU unmapping (top level ones) Xu, Quan 2016-06-08 14:42 ` Jan Beulich 2016-06-08 14:54 ` Jan Beulich 2016-06-09 19:30 ` Suravee Suthikulanit 2016-06-09 10:28 ` Julien Grall 2016-06-08 8:58 ` [PATCH v7 04/11] IOMMU: propagate IOMMU Device-TLB flush error up to IOMMU mapping " Xu, Quan 2016-06-08 14:43 ` Jan Beulich 2016-06-09 18:45 ` Suravee Suthikulanit 2016-06-09 10:30 ` Julien Grall 2016-06-08 8:58 ` [PATCH v7 05/11] IOMMU/MMU: propagate IOMMU Device-TLB flush error up to iommu_iotlb_flush{, _all} " Xu, Quan 2016-06-09 11:12 ` Julien Grall 2016-06-09 11:45 ` Jan Beulich 2016-06-09 12:03 ` Julien Grall 2016-06-09 12:08 ` Julien Grall 2016-06-09 12:15 ` Jan Beulich 2016-06-09 12:24 ` Julien Grall 2016-06-09 12:32 ` Jan Beulich 2016-06-09 12:39 ` Julien Grall 2016-06-12 6:55 ` Tian, Kevin 2016-06-12 7:02 ` Xu, Quan 2016-06-12 15:35 ` Julien Grall 2016-06-09 12:14 ` Jan Beulich 2016-06-12 6:46 ` Tian, Kevin 2016-06-08 8:58 ` [PATCH v7 06/11] propagate IOMMU Device-TLB flush error up to EPT update " Xu, Quan 2016-06-08 8:59 ` [PATCH v7 07/11] IOMMU: propagate IOMMU Device-TLB flush error up to IOMMU suspending " Xu, Quan 2016-06-08 14:51 ` Jan Beulich 2016-06-12 7:42 ` Xu, Quan 2016-06-13 9:25 ` Jan Beulich 2016-06-09 18:58 ` Suravee Suthikulanit 2016-06-12 6:58 ` Tian, Kevin 2016-06-08 8:59 ` [PATCH v7 08/11] IOMMU: propagate IOMMU Device-TLB flush error (leaf ones) Xu, Quan 2016-06-08 8:59 ` [PATCH v7 09/11] vt-d: fix the IOMMU flush issue Xu, Quan 2016-06-12 7:32 ` Tian, Kevin 2016-06-12 9:27 ` Xu, Quan 2016-06-13 8:50 ` Xu, Quan 2016-06-08 8:59 ` [PATCH v7 10/11] vt-d: propagate the IOMMU Device-TLB flush error up to ME phantom functions Xu, Quan 2016-06-12 7:34 ` Tian, Kevin 2016-06-08 8:59 ` [PATCH v7 11/11] vt-d: add __must_check annotation to IOMMU flush pointers and handlers Xu, Quan 2016-06-12 7:35 ` Tian, Kevin
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=1465376344-28290-2-git-send-email-quan.xu@intel.com \ --to=quan.xu@intel.com \ --cc=dario.faggioli@citrix.com \ --cc=jbeulich@suse.com \ --cc=kevin.tian@intel.com \ --cc=xen-devel@lists.xen.org \ --subject='Re: [PATCH v7 01/11] IOMMU: handle IOMMU mapping and unmapping failures' \ /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
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).