[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v4 02/10] IOMMU: handle IOMMU mapping and unmapping failures
On May 12, 2016 11:06 PM, Jan Beulich <JBeulich@xxxxxxxx> wrote: > >>> On 12.05.16 at 16:28, <quan.xu@xxxxxxxxx> wrote: > > On May 10, 2016 2:54 PM, Jan Beulich <JBeulich@xxxxxxxx> wrote: > >> >>> On 10.05.16 at 05:41, <quan.xu@xxxxxxxxx> wrote: > >> > On May 10, 2016 12:14 AM, Jan Beulich <JBeulich@xxxxxxxx> wrote: > >> >> >>> On 06.05.16 at 10:54, <quan.xu@xxxxxxxxx> wrote: Jan, Try it again, I hope I have got it. If not, could you write some sample code for me as an exception? :) --- a/xen/drivers/passthrough/iommu.c +++ b/xen/drivers/passthrough/iommu.c @@ -240,21 +240,63 @@ int iommu_map_page(struct domain *d, unsigned long gfn, unsigned long mfn, unsigned int flags) { const struct domain_iommu *hd = dom_iommu(d); + static int printed = 0; + 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 ( is_hardware_domain(d) ) + { + if ( !printed ) + { + printk(XENLOG_ERR + "d%d: IOMMU mapping gfn %#lx mfn %#lx failed %d.", + d->domain_id, gfn, mfn, rc); + + printed = 1; + } + } + else + domain_crash(d); + } + + return rc; } int iommu_unmap_page(struct domain *d, unsigned long gfn) { const struct domain_iommu *hd = dom_iommu(d); + static int printed = 0; + 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 ( is_hardware_domain(d) ) + { + if ( !printed ) + { + printk(XENLOG_ERR + "d%d: IOMMU unmapping gfn %#lx failed %d.", + d->domain_id, gfn, rc); + + printed = 1; + } + } + else + domain_crash(d); + } + + return rc; } Thanks again!! Quan _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |