Messages in this thread | | | Date | Thu, 1 Dec 2011 11:57:25 +1100 | From | David Gibson <> | Subject | Re: [PATCH 1/4] iommu: Add iommu_device_group callback and iommu_group sysfs entry |
| |
On Wed, Nov 30, 2011 at 04:52:20PM -0800, Chris Wright wrote: > * David Gibson (dwg@au1.ibm.com) wrote: > > On Tue, Nov 29, 2011 at 10:25:51PM -0700, Alex Williamson wrote: > > > On Wed, 2011-11-30 at 15:51 +1100, Benjamin Herrenschmidt wrote: > > > > On Wed, 2011-11-30 at 13:42 +1100, David Gibson wrote: > > > > > > > > > > +static ssize_t show_iommu_group(struct device *dev, > > > > > > + struct device_attribute *attr, char *buf) > > > > > > +{ > > > > > > + unsigned int groupid; > > > > > > + > > > > > > + if (iommu_device_group(dev, &groupid)) > > > > > > + return 0; > > > > > > + > > > > > > + return sprintf(buf, "%u", groupid); > > > > > > +} > > > > > > +static DEVICE_ATTR(iommu_group, S_IRUGO, show_iommu_group, NULL); > > > > > > > > > > Hrm. Assuming the group is is an unsigned int seems dangerous to me. > > > > > More seriously, we really want these to be unique across the whole > > > > > system, but they're allocated by the iommu driver which can't > > > > > guarantee that if it's not the only one present. Seems to me it would > > > > > be safer to have an actual iommu_group structure allocated for each > > > > > group, and use the pointer to it as the ID to hand around (with NULL > > > > > meaning "no iommu" / untranslated). The structure could contain a > > > > > more human readable - or more relevant to platform documentation - ID > > > > > where appropriate. > > > > > > Note that iommu drivers are registered per bus_type, so the unique pair > > > is {bus_type, groupid}, which seems sufficient for vfio. > > > > Hrm. That's.. far from obvious. And still breaks down if we have two > > separate iommus on the same bus type (e.g. two independent PCI host > > bridges with inbuilt IOMMUs). > > Happens to still work for Intel IOMMU on x86 the way Alex wrote the > Intel VT-d patch in this series, as well as AMD IOMMU. The caveat for > AMD IOMMU is that the groupid generation would break (as-is) once > there's support for multiple PCI segments. This is not an inherent > shortcoming of the groupid mechanism though, just a current limitation > of AMD IOMMU's implementation. Alex overloaded B:D.F for those which is > a convenient id since that maps to the device (or in the case of devices > behind a PCIe-to-PCI bridge, the requestor ID of all devices behind the > bridge, or "the group").
"Happens to still work" is not exactly a ringing endorsement.
-- David Gibson | I'll have my music baroque, and my code david AT gibson.dropbear.id.au | minimalist, thank you. NOT _the_ _other_ | _way_ _around_! http://www.ozlabs.org/~dgibson
| |