[PATCH v5 10/15] iommu/arm-smmu-v3: Support PRI Page Request in arm_smmu_handle_ppr()
Jason Gunthorpe
jgg at nvidia.com
Wed Sep 23 11:37:05 PDT 2026
> [ ... 60 lines skipped ... ]
> + mutex_lock(&smmu->streams_mutex);
> + master = arm_smmu_find_master(smmu, sid);
> + if (master && master->pri_enabled) {
> + struct iopf_fault iopf_fault = {};
> + struct iommu_fault *fault = &iopf_fault.fault;
> +
> + fault->type = IOMMU_FAULT_PAGE_REQ;
> + if (last)
> + fault->prm.flags |= IOMMU_FAULT_PAGE_REQUEST_LAST_PAGE;
> + if (ssv) {
> + fault->prm.flags |=
> + IOMMU_FAULT_PAGE_REQUEST_PASID_VALID;
> + fault->prm.pasid = ssid;
> + }
> + fault->prm.grpid = grpid;
> + if (evt[0] & PRIQ_0_PERM_READ)
> + fault->prm.perm |= IOMMU_FAULT_PERM_READ;
> + if (evt[0] & PRIQ_0_PERM_WRITE)
> + fault->prm.perm |= IOMMU_FAULT_PERM_WRITE;
> + if (evt[0] & PRIQ_0_PERM_EXEC)
> + fault->prm.perm |= IOMMU_FAULT_PERM_EXEC;
> + if (evt[0] & PRIQ_0_PERM_PRIV)
> + fault->prm.perm |= IOMMU_FAULT_PERM_PRIV;
> + fault->prm.addr = FIELD_GET(PRIQ_1_ADDR_MASK, evt[1]) << 12;
> +
> + iommu_report_device_fault(master->dev, &iopf_fault);
> + mutex_unlock(&smmu->streams_mutex);
This doesn't need to hold this mutex when calling report, the irq
should be synchronized when the master is removed to keep dev stable.
Reviewed-by: Jason Gunthorpe <jgg at nvidia.com>
--
Jason
More information about the linux-arm-kernel
mailing list