> -----Original Message----- > From: kvm-owner@xxxxxxxxxxxxxxx [mailto:kvm-owner@xxxxxxxxxxxxxxx] On > Behalf Of Joerg Roedel > Sent: Wednesday, September 07, 2011 9:12 PM > To: iommu@xxxxxxxxxxxxxxxxxxxxxxxxxx > Cc: Greg Kroah-Hartman; Alex Williamson; Ohad Ben-Cohen; David Woodhouse; > David Brown; joro@xxxxxxxxxx; kvm@xxxxxxxxxxxxxxx; linux- > kernel@xxxxxxxxxxxxxxx; Joerg Roedel > Subject: [PATCH 03/10] iommu/core: Add bus_type parameter to > iommu_domain_alloc > > This is necessary to store a pointer to the bus-specific iommu_ops in the > iommu-domain structure. It will be used later to call into bus-specific > iommu-ops. > > Signed-off-by: Joerg Roedel <joerg.roedel@xxxxxxx> > --- > drivers/iommu/iommu.c | 14 +++++++++++++- > drivers/media/video/omap3isp/isp.c | 2 +- > include/linux/iommu.h | 6 ++++-- > virt/kvm/iommu.c | 2 +- > 4 files changed, 19 insertions(+), 5 deletions(-) > > diff --git a/drivers/iommu/iommu.c b/drivers/iommu/iommu.c index > 3b24a5b..adaee9b 100644 > --- a/drivers/iommu/iommu.c > +++ b/drivers/iommu/iommu.c > @@ -16,6 +16,7 @@ > * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 > USA > */ > > +#include <linux/device.h> > #include <linux/kernel.h> > #include <linux/bug.h> > #include <linux/types.h> > @@ -44,15 +45,26 @@ bool iommu_found(void) } > EXPORT_SYMBOL_GPL(iommu_found); > > -struct iommu_domain *iommu_domain_alloc(void) > +struct iommu_domain *iommu_domain_alloc(struct bus_type *bus) > { > struct iommu_domain *domain; > + struct iommu_ops *ops; > int ret; > > + if (bus->iommu_ops) > + ops = bus->iommu_ops; > + else > + ops = iommu_ops; > + > + if (ops == NULL) > + return NULL; > + > domain = kmalloc(sizeof(*domain), GFP_KERNEL); > if (!domain) > return NULL; > > + domain->ops = ops; > + > ret = iommu_ops->domain_init(domain); > if (ret) > goto out_free; > diff --git a/drivers/media/video/omap3isp/isp.c > b/drivers/media/video/omap3isp/isp.c > index a4baa61..a7ed985 100644 > --- a/drivers/media/video/omap3isp/isp.c > +++ b/drivers/media/video/omap3isp/isp.c > @@ -2141,7 +2141,7 @@ static int isp_probe(struct platform_device *pdev) > /* to be removed once iommu migration is complete */ > isp->iommu = to_iommu(isp->iommu_dev); > > - isp->domain = iommu_domain_alloc(); > + isp->domain = iommu_domain_alloc(pdev->dev.bus); > if (!isp->domain) { > dev_err(isp->dev, "can't alloc iommu domain\n"); > ret = -ENOMEM; > diff --git a/include/linux/iommu.h b/include/linux/iommu.h index > 4739e36..3bd6892 100644 > --- a/include/linux/iommu.h > +++ b/include/linux/iommu.h > @@ -25,10 +25,12 @@ > #define IOMMU_WRITE (2) > #define IOMMU_CACHE (4) /* DMA cache coherency */ > > +struct iommu_ops; > struct bus_type; > struct device; > > struct iommu_domain { > + struct iommu_ops *ops; > void *priv; > }; > > @@ -55,7 +57,7 @@ struct iommu_ops { > extern void register_iommu(struct iommu_ops *ops); extern void > iommu_bus_init(struct bus_type *bus, struct iommu_ops *ops); extern bool > iommu_found(void); -extern struct iommu_domain *iommu_domain_alloc(void); > +extern struct iommu_domain *iommu_domain_alloc(struct bus_type *bus); > extern void iommu_domain_free(struct iommu_domain *domain); extern int > iommu_attach_device(struct iommu_domain *domain, > struct device *dev); > @@ -79,7 +81,7 @@ static inline bool iommu_found(void) > return false; > } > > -static inline struct iommu_domain *iommu_domain_alloc(void) > +static inline struct iommu_domain *iommu_domain_alloc(struct bus_type > +*bus) > { > return NULL; > } > diff --git a/virt/kvm/iommu.c b/virt/kvm/iommu.c index 78c80f6..20115b1 > 100644 > --- a/virt/kvm/iommu.c > +++ b/virt/kvm/iommu.c > @@ -233,7 +233,7 @@ int kvm_iommu_map_guest(struct kvm *kvm) > return -ENODEV; > } > > - kvm->arch.iommu_domain = iommu_domain_alloc(); > + kvm->arch.iommu_domain = iommu_domain_alloc(&pci_bus_type); Although it might require changes starting all the way from the qemu interface, but it would certainly be nice if this could be made more extendable/generic in terms of the bus_type usage. This interface would be used by us (Freescale )for direct assignment of SOC devices sitting on the platform bus. -Varun -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html