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

Re: [Xen-devel] [PATCH v13 0/4] add per-domain IOMMU control



> -----Original Message-----
> From: Julien Grall <julien.grall@xxxxxxx>
> Sent: 26 September 2019 10:13
> To: Paul Durrant <Paul.Durrant@xxxxxxxxxx>; 'Oleksandr' 
> <olekstysh@xxxxxxxxx>; 'Jan Beulich'
> <jbeulich@xxxxxxxx>
> Cc: nd <nd@xxxxxxx>; Petre Pircalabu <ppircalabu@xxxxxxxxxxxxxxx>; Stefano 
> Stabellini
> <sstabellini@xxxxxxxxxx>; Wei Liu <wl@xxxxxxx>; KonradRzeszutek Wilk 
> <konrad.wilk@xxxxxxxxxx>; Andrew
> Cooper <Andrew.Cooper3@xxxxxxxxxx>; David Scott <dave@xxxxxxxxxx>; Tim 
> (Xen.org) <tim@xxxxxxx>; George
> Dunlap <George.Dunlap@xxxxxxxxxx>; Tamas K Lengyel <tamas@xxxxxxxxxxxxx>; Ian 
> Jackson
> <Ian.Jackson@xxxxxxxxxx>; Anthony Perard <anthony.perard@xxxxxxxxxx>; 
> xen-devel@xxxxxxxxxxxxxxxxxxxx;
> Volodymyr Babchuk <Volodymyr_Babchuk@xxxxxxxx>; Roger Pau Monne 
> <roger.pau@xxxxxxxxxx>
> Subject: Re: [Xen-devel] [PATCH v13 0/4] add per-domain IOMMU control
> 
> Hi,
> 
> On 9/26/19 9:39 AM, Paul Durrant wrote:
> >> -----Original Message-----
> >> From: Julien Grall <Julien.Grall@xxxxxxx>
> >> Sent: 25 September 2019 22:34
> >> To: Paul Durrant <Paul.Durrant@xxxxxxxxxx>; 'Oleksandr' 
> >> <olekstysh@xxxxxxxxx>; 'Jan Beulich'
> >> <jbeulich@xxxxxxxx>
> >> Cc: nd <nd@xxxxxxx>; Petre Pircalabu <ppircalabu@xxxxxxxxxxxxxxx>; Stefano 
> >> Stabellini
> >> <sstabellini@xxxxxxxxxx>; Wei Liu <wl@xxxxxxx>; KonradRzeszutek Wilk 
> >> <konrad.wilk@xxxxxxxxxx>;
> Andrew
> >> Cooper <Andrew.Cooper3@xxxxxxxxxx>; David Scott <dave@xxxxxxxxxx>; Tim 
> >> (Xen.org) <tim@xxxxxxx>;
> George
> >> Dunlap <George.Dunlap@xxxxxxxxxx>; Tamas K Lengyel <tamas@xxxxxxxxxxxxx>; 
> >> Ian Jackson
> >> <Ian.Jackson@xxxxxxxxxx>; Anthony Perard <anthony.perard@xxxxxxxxxx>; xen-
> devel@xxxxxxxxxxxxxxxxxxxx;
> >> Volodymyr Babchuk <Volodymyr_Babchuk@xxxxxxxx>; Roger Pau Monne 
> >> <roger.pau@xxxxxxxxxx>
> >> 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 <olekstysh@xxxxxxxxx>
> >>>> Sent: 25 September 2019 16:50
> >>>> To: Paul Durrant <Paul.Durrant@xxxxxxxxxx>; 'Jan Beulich' 
> >>>> <jbeulich@xxxxxxxx>
> >>>> Cc: Petre Pircalabu <ppircalabu@xxxxxxxxxxxxxxx>; Stefano Stabellini 
> >>>> <sstabellini@xxxxxxxxxx>;
> Wei
> >> Liu
> >>>> <wl@xxxxxxx>; KonradRzeszutek Wilk <konrad.wilk@xxxxxxxxxx>; Andrew 
> >>>> Cooper
> >>>> <Andrew.Cooper3@xxxxxxxxxx>; David Scott <dave@xxxxxxxxxx>; Tim 
> >>>> (Xen.org) <tim@xxxxxxx>; George
> >> Dunlap
> >>>> <George.Dunlap@xxxxxxxxxx>; Tamas K Lengyel <tamas@xxxxxxxxxxxxx>; Ian 
> >>>> Jackson
> >>>> <Ian.Jackson@xxxxxxxxxx>; Anthony Perard <anthony.perard@xxxxxxxxxx>; 
> >>>> xen-
> >> devel@xxxxxxxxxxxxxxxxxxxx;
> >>>> Volodymyr Babchuk <Volodymyr_Babchuk@xxxxxxxx>; Roger Pau Monne 
> >>>> <roger.pau@xxxxxxxxxx>; Julien
> >> Grall
> >>>> <julien.grall@xxxxxxx>
> >>>> 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.
> 
> This is not entirely uncommon to have other variables gated by others.
> So what could happen if you have iommu_enabled == false and
> iommu_hap_pt_share == true on x86?
> 

Well, I was hoping to avoid the nested if in sysctl.c.

> > 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.
> 
> By "the function", do you mean clear_iommu_hap_pt_share?

Yes.

> If so, I think
> it should stay were it is. This is a generic function that might be
> re-used for other architecture in the future.
> 

That seems like a bit of a long shot. If I remove the call from iommu_setup() 
then the only remaining callers are in x86 code, but I suppose it can stay 
where it is to avoid the churn. I'll spin a new test patch.

  Paul

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/xen-devel

 


Rackspace

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