[PATCH v1 14/14] iommu/arm-smmu-v3: Add arm_smmu_cache_invalidate_user

Tian, Kevin kevin.tian at intel.com
Fri Mar 17 02:47:47 PDT 2023


> From: Robin Murphy <robin.murphy at arm.com>
> Sent: Thursday, March 9, 2023 10:49 PM
> > +	case CMDQ_OP_ATC_INV:
> > +		ssid = inv_info->ssid;
> > +		iova = inv_info->range.start;
> > +		size = inv_info->range.last - inv_info->range.start + 1;
> > +		break;
> 
> Can we do any better than multiplying every single ATC_INV command, even
> for random bogus StreamIDs, into multiple commands across every physical
> device? In fact, I'm not entirely confident this isn't problematic, if
> the guest wishes to send invalidations for one device specifically while
> it's put some other device into a state where sending it a command would
> do something bad. At the very least, it's liable to be confusing if the
> guest sends a command for one StreamID but gets an error back for a
> different one.
> 

Or do we need support this cmd at all?

For vt-d we always implicitly invalidate ATC following a iotlb invalidation
request from userspace. Then vIOMMU just treats it as a nop in the
virtual queue.

IMHO a sane iommu driver should always invalidate both iotlb and atc
together. I'm not sure a valid usage where iotlb is invalidated while
atc is left with some stale mappings.


More information about the linux-arm-kernel mailing list