> -----Original Message-----
> From: Julien Grall <julien.gr...@arm.com>
> Sent: 25 September 2019 22:34
> To: Paul Durrant <paul.durr...@citrix.com>; 'Oleksandr' 
> <olekst...@gmail.com>; 'Jan Beulich'
> <jbeul...@suse.com>
> Cc: nd <n...@arm.com>; Petre Pircalabu <ppircal...@bitdefender.com>; Stefano 
> Stabellini
> <sstabell...@kernel.org>; Wei Liu <w...@xen.org>; KonradRzeszutek Wilk 
> <konrad.w...@oracle.com>; Andrew
> Cooper <andrew.coop...@citrix.com>; David Scott <d...@recoil.org>; Tim 
> (Xen.org) <t...@xen.org>; George
> Dunlap <george.dun...@citrix.com>; Tamas K Lengyel <ta...@tklengyel.com>; Ian 
> Jackson
> <ian.jack...@citrix.com>; Anthony Perard <anthony.per...@citrix.com>; 
> xen-devel@lists.xenproject.org;
> Volodymyr Babchuk <volodymyr_babc...@epam.com>; Roger Pau Monne 
> <roger....@citrix.com>
> Subject: Re: [Xen-devel] [PATCH v13 0/4] add per-domain IOMMU control
> 
> Hi,
> 
> On 25/09/2019 17:10, Paul Durrant wrote:
> >> -----Original Message-----
> >> From: Oleksandr <olekst...@gmail.com>
> >> Sent: 25 September 2019 16:50
> >> To: Paul Durrant <paul.durr...@citrix.com>; 'Jan Beulich' 
> >> <jbeul...@suse.com>
> >> Cc: Petre Pircalabu <ppircal...@bitdefender.com>; Stefano Stabellini 
> >> <sstabell...@kernel.org>; Wei
> Liu
> >> <w...@xen.org>; KonradRzeszutek Wilk <konrad.w...@oracle.com>; Andrew 
> >> Cooper
> >> <andrew.coop...@citrix.com>; David Scott <d...@recoil.org>; Tim (Xen.org) 
> >> <t...@xen.org>; George
> Dunlap
> >> <george.dun...@citrix.com>; Tamas K Lengyel <ta...@tklengyel.com>; Ian 
> >> Jackson
> >> <ian.jack...@citrix.com>; Anthony Perard <anthony.per...@citrix.com>; xen-
> de...@lists.xenproject.org;
> >> Volodymyr Babchuk <volodymyr_babc...@epam.com>; Roger Pau Monne 
> >> <roger....@citrix.com>; Julien
> Grall
> >> <julien.gr...@arm.com>
> >> Subject: Re: [Xen-devel] [PATCH v13 0/4] add per-domain IOMMU control
> >>
> >>
> >> [CC Julien]
> >>
> >>
> >> Hi Paul
> >>
> >> I may mistake, but looks like
> >>
> >> 80ff3d338dc93260b41ffeeebb0f852c2edef9ce iommu: tidy up
> >> iommu_use_hap_pt() and need_iommu_pt_sync() macros
> >>
> >> triggers ASSERT_UNREACHABLE on Arm if no IOMMU has been found (I built
> >> with my platform's IOMMU driver disabled: # CONFIG_IPMMU_VMSA is not set) .
> >>
> >> So, iommu_setup() calls clear_iommu_hap_pt_share() with
> >> iommu_hap_pt_share being set (CONFIG_IOMMU_FORCE_PT_SHARE=y) which,
> >> actually, triggers ASSERT.
> >>
> >
> > Here a minimal patch, leaving 'force pt share' in place. Does this avoid 
> > the problem?
> >
> > ---8<---
> > diff --git a/xen/common/sysctl.c b/xen/common/sysctl.c
> > index e8763c7fdf..f88a285e7f 100644
> > --- a/xen/common/sysctl.c
> > +++ b/xen/common/sysctl.c
> > @@ -268,9 +268,11 @@ long do_sysctl(XEN_GUEST_HANDLE_PARAM(xen_sysctl_t) 
> > u_sysctl)
> >           pi->max_mfn = get_upper_mfn_bound();
> >           arch_do_physinfo(pi);
> >           if ( iommu_enabled )
> > +        {
> >               pi->capabilities |= XEN_SYSCTL_PHYSCAP_directio;
> > -        if ( iommu_hap_pt_share )
> > -            pi->capabilities |= XEN_SYSCTL_PHYSCAP_iommu_hap_pt_share;
> > +            if ( iommu_hap_pt_share )
> > +                pi->capabilities |= XEN_SYSCTL_PHYSCAP_iommu_hap_pt_share;
> > +        }
> >
> >           if ( copy_to_guest(u_sysctl, op, 1) )
> >               ret = -EFAULT;
> > diff --git a/xen/include/xen/iommu.h b/xen/include/xen/iommu.h
> > index 7c3003f3f1..6a10a24128 100644
> > --- a/xen/include/xen/iommu.h
> > +++ b/xen/include/xen/iommu.h
> > @@ -68,8 +68,6 @@ static inline void clear_iommu_hap_pt_share(void)
> >   {
> >   #ifndef iommu_hap_pt_share
> >       iommu_hap_pt_share = false;
> > -#elif iommu_hap_pt_share
> > -    ASSERT_UNREACHABLE();
> >   #endif
> 
> IHMO, calling this function is a mistake on platform only supporting
> shared page-table so the ASSERT() should be kept here.
> 
> This raises the question why the function is actually called from common
> code. iommu_hap_enabled() should technically not be used in any code if
> the IOMMU is not enabled/present. So what are you trying to prevent here?

What I'm trying to prevent, on x86, is a situation where the iommu_enabled == 
false but iommu_hap_pt_share == true. I had, mistakenly, believed that 
iommu_enabled would never be false for ARM but it seems this is not the case so 
that situation has to be tolerated. I guess, given the other hunk of my patch, 
I can actually leave the ASSERT in place and avoid making the call from common 
code, in which case the function ought to move into an x86 header as well.

  Paul

> 
> Cheers,
> 
> --
> Julien Grall
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel

Reply via email to