On Mon, Jul 23, 2018 at 02:40:05PM +0100, Paul Durrant wrote:
> > -----Original Message-----
> > From: Wei Liu [mailto:[email protected]]
> > Sent: 23 July 2018 14:35
> > To: Paul Durrant <[email protected]>
> > Cc: [email protected]; Jan Beulich <[email protected]>;
> > Andrew Cooper <[email protected]>; George Dunlap
> > <[email protected]>; Ian Jackson <[email protected]>; Julien
> > Grall <[email protected]>; Konrad Rzeszutek Wilk
> > <[email protected]>; Stefano Stabellini <[email protected]>; Tim
> > (Xen.org) <[email protected]>; Wei Liu <[email protected]>
> > Subject: Re: [PATCH v3 12/13] x86: add iommu_ops to modify and flush
> > IOMMU mappings
> >
> > On Tue, Jul 17, 2018 at 02:38:15PM +0100, Paul Durrant wrote:
> > >
> > [...]
> > > +static int iommuop_map(struct xen_iommu_op_map *op)
> > > +{
> > > + struct domain *d, *currd = current->domain;
> > > + struct domain_iommu *iommu = dom_iommu(currd);
> > > + bool readonly = op->flags & XEN_IOMMUOP_map_readonly;
> > > + bfn_t bfn = _bfn(op->bfn);
> > > + struct page_info *page;
> > > + unsigned int prot;
> > > + int rc, ignore;
> > > +
> > > + if ( op->pad || (op->flags & ~XEN_IOMMUOP_map_readonly) )
> > > + return -EINVAL;
> > > +
> > > + if ( !iommu->iommu_op_ranges )
> > > + return -EOPNOTSUPP;
> > > +
> > > + /* Check whether the specified BFN falls in a reserved region */
> > > + if ( rangeset_contains_singleton(iommu->reserved_ranges,
> > bfn_x(bfn)) )
> > > + return -EINVAL;
> > > +
> > > + d = rcu_lock_domain_by_any_id(op->domid);
> >
> > I think this needs to be moved earlier before dereferencing assigning
> > iommu -- it depends on d being valid.
> >
> > Same applies to the unmap function.
> >
>
> Are you referring to the dom_iommu() macro? The code is uninterested
> in the IOMMU mappings of the target domain, only the current, so I
> can't see a problem here. Am I missing something?
Oh, I misread. Sorry for the noise.
>
> > > +
> > > +static int iommuop_flush(void)
> > > +{
> > > + return !iommu_iotlb_flush_all(current->domain) ? 0 : -EIO;
> >
> > I don't follow: why does this only flush current->domain? But
> > map/unmap use explicit argument to specify a domain?
> >
>
> Because the page may come from another domain but the IOMMU mappings
> are only ever for the local domain.
I see. That's fine then.
Wei.
_______________________________________________
Xen-devel mailing list
[email protected]
https://lists.xenproject.org/mailman/listinfo/xen-devel