|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v2 07/11] IOMMU/MMU: propagate IOMMU Device-TLB flush error up to iommu_iotlb_flush{, _all} (top level ones).
On April 25, 2016 6:19 PM, Jan Beulich <JBeulich@xxxxxxxx> wrote:
> >>> On 18.04.16 at 16:00, <quan.xu@xxxxxxxxx> wrote:
> > --- a/xen/common/memory.c
> > +++ b/xen/common/memory.c
> > @@ -678,8 +678,9 @@ static int xenmem_add_to_physmap(struct domain
> *d,
> > if ( need_iommu(d) )
> > {
> > this_cpu(iommu_dont_flush_iotlb) = 0;
> > - iommu_iotlb_flush(d, xatp->idx - done, done);
> > - iommu_iotlb_flush(d, xatp->gpfn - done, done);
> > + rc = iommu_iotlb_flush(d, xatp->idx - done, done);
> > + if ( !rc )
> > + rc = iommu_iotlb_flush(d, xatp->gpfn - done, done);
>
> And again - best effort flushing in all cases. I.e. you shouldn't bypass the
> second one if the first one failed, but instead properly accumulate the return
> value, and also again not clobber any negative value rc may already hold.
Thanks for correcting me. I did like accumulating the return value. :(
I will follow your suggestion in next v3.
> What's worse (and makes me wonder whether this got tested) - you also
> clobber the positive return value this function may produce, even in the case
> the flushes succeed (and hence the function as a whole was successful).
>
I have tested it with previous patches (i.e. 1st patch), launching a VM with
PT ATS device to invoke this call tree.
btw, I fix the positive issue in 1st patch.
I know this is not strict, as I assume this patch set will be committed at the
same time.
> > --- a/xen/include/xen/iommu.h
> > +++ b/xen/include/xen/iommu.h
> > @@ -182,8 +182,8 @@ int iommu_do_pci_domctl(struct xen_domctl *,
> > struct domain *d, int iommu_do_domctl(struct xen_domctl *, struct domain
> *d,
> > XEN_GUEST_HANDLE_PARAM(xen_domctl_t));
> >
> > -void iommu_iotlb_flush(struct domain *d, unsigned long gfn, unsigned
> > int page_count); -void iommu_iotlb_flush_all(struct domain *d);
> > +int iommu_iotlb_flush(struct domain *d, unsigned long gfn, unsigned
> > +int page_count); int iommu_iotlb_flush_all(struct domain *d);
>
> __must_check
>
Agreed.
Quan
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |