[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [RFC PATCH] iommu/xen: Add Xen PV-IOMMU driver
On Thu, Jun 13, 2024 at 01:50:22PM +0000, Teddy Astie wrote: > +struct iommu_domain *xen_iommu_domain_alloc(unsigned type) > +{ > + struct xen_iommu_domain *domain; > + u16 ctx_no; > + int ret; > + > + if (type & IOMMU_DOMAIN_IDENTITY) { > + /* use default domain */ > + ctx_no = 0; Please use the new ops, domain_alloc_paging and the static identity domain. > +static struct iommu_group *xen_iommu_device_group(struct device *dev) > +{ > + if (!dev_is_pci(dev)) > + return ERR_PTR(-ENODEV); > + device_group is only called after probe_device, since you already exclude !pci during probe there is no need for this wrapper, just set the op directly to pci_device_group. > +static void xen_iommu_release_device(struct device *dev) > +{ > + int ret; > + struct pci_dev *pdev; > + struct pv_iommu_op op = { > + .subop_id = IOMMUOP_reattach_device, > + .flags = 0, > + .ctx_no = 0 /* reattach device back to default context */ > + }; Consider if you can use release_domain for this, I think this is probably a BLOCKED domain behavior. > + if (!dev_is_pci(dev)) > + return; No op is ever called on a non-probed device, remove all these checks. > +static int xen_iommu_map_pages(struct iommu_domain *domain, unsigned long > iova, > + phys_addr_t paddr, > size_t pgsize, size_t pgcount, > + int prot, gfp_t gfp, > size_t *mapped) > +{ > + size_t xen_pg_count = (pgsize / XEN_PAGE_SIZE) * pgcount; > + struct xen_iommu_domain *dom = to_xen_iommu_domain(domain); > + struct pv_iommu_op op = { > + .subop_id = IOMMUOP_map_pages, > + .flags = 0, > + .ctx_no = dom->ctx_no > + }; > + /* NOTE: paddr is actually bound to pfn, not gfn */ > + uint64_t pfn = addr_to_pfn(paddr); > + uint64_t dfn = addr_to_pfn(iova); > + int ret = 0; > + > + if (WARN(!dom->ctx_no, "Tried to map page to default context")) > + return -EINVAL; A paging domain should be the only domain ops that have a populated map so this should be made impossible by construction. Jason
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |