RE: [RFC 3/7] iommufd: Add iommufd_device_bind_pasid()

From: Tian, Kevin
Date: Tue Oct 10 2023 - 04:20:11 EST


> From: Liu, Yi L <yi.l.liu@xxxxxxxxx>
> Sent: Monday, October 9, 2023 4:51 PM
>
> +struct iommufd_device *iommufd_device_bind_pasid(struct iommufd_ctx
> *ictx,
> + struct device *dev,
> + u32 pasid, u32 *id)
> +{
> + struct iommufd_device *idev;
> + int rc;
> +
> + /*
> + * iommufd always sets IOMMU_CACHE because we offer no way for
> userspace
> + * to restore cache coherency.
> + */
> + if (!device_iommu_capable(dev, IOMMU_CAP_CACHE_COHERENCY))
> + return ERR_PTR(-EINVAL);
> +
> + /*
> + * No iommu supports pasid-granular msi message today. Here we
> + * just check whether the parent device can do safe interrupts.
> + * Isolation between virtual devices within the parent device
> + * relies on the parent driver to enforce.
> + */
> + if (!iommufd_selftest_is_mock_dev(dev) &&
> + !msi_device_has_isolated_msi(dev)) {
> + rc = iommufd_allow_unsafe_interrupts(dev);
> + if (rc)
> + return ERR_PTR(rc);
> + }
> +

Only MemWr w/o pasid can be interpreted as an interrupt message
then we need msi isolation to protect.

But for SIOV all MemWr's are tagged with a pasid hence can never
trigger an interrupt. From this angle looks this check is unnecessary.