]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
iommu/arm-smmu-v3: Remove unrecoverable faults reporting
authorLu Baolu <baolu.lu@linux.intel.com>
Mon, 12 Feb 2024 01:22:13 +0000 (09:22 +0800)
committerJoerg Roedel <jroedel@suse.de>
Fri, 16 Feb 2024 14:19:21 +0000 (15:19 +0100)
No device driver registers fault handler to handle the reported
unrecoveraable faults. Remove it to avoid dead code.

Signed-off-by: Lu Baolu <baolu.lu@linux.intel.com>
Reviewed-by: Kevin Tian <kevin.tian@intel.com>
Reviewed-by: Jason Gunthorpe <jgg@nvidia.com>
Tested-by: Longfang Liu <liulongfang@huawei.com>
Link: https://lore.kernel.org/r/20240212012227.119381-3-baolu.lu@linux.intel.com
Signed-off-by: Joerg Roedel <jroedel@suse.de>
drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c

index 0ffb1cf17e0b2e6687b1c5ff12ff87405e2552b6..4cf1054ed321e92d68c23974edf776bdb87bd968 100644 (file)
@@ -1461,7 +1461,6 @@ arm_smmu_find_master(struct arm_smmu_device *smmu, u32 sid)
 static int arm_smmu_handle_evt(struct arm_smmu_device *smmu, u64 *evt)
 {
        int ret;
-       u32 reason;
        u32 perm = 0;
        struct arm_smmu_master *master;
        bool ssid_valid = evt[0] & EVTQ_0_SSV;
@@ -1471,16 +1470,9 @@ static int arm_smmu_handle_evt(struct arm_smmu_device *smmu, u64 *evt)
 
        switch (FIELD_GET(EVTQ_0_ID, evt[0])) {
        case EVT_ID_TRANSLATION_FAULT:
-               reason = IOMMU_FAULT_REASON_PTE_FETCH;
-               break;
        case EVT_ID_ADDR_SIZE_FAULT:
-               reason = IOMMU_FAULT_REASON_OOR_ADDRESS;
-               break;
        case EVT_ID_ACCESS_FAULT:
-               reason = IOMMU_FAULT_REASON_ACCESS;
-               break;
        case EVT_ID_PERMISSION_FAULT:
-               reason = IOMMU_FAULT_REASON_PERMISSION;
                break;
        default:
                return -EOPNOTSUPP;
@@ -1490,6 +1482,9 @@ static int arm_smmu_handle_evt(struct arm_smmu_device *smmu, u64 *evt)
        if (evt[1] & EVTQ_1_S2)
                return -EFAULT;
 
+       if (!(evt[1] & EVTQ_1_STALL))
+               return -EOPNOTSUPP;
+
        if (evt[1] & EVTQ_1_RnW)
                perm |= IOMMU_FAULT_PERM_READ;
        else
@@ -1501,32 +1496,17 @@ static int arm_smmu_handle_evt(struct arm_smmu_device *smmu, u64 *evt)
        if (evt[1] & EVTQ_1_PnU)
                perm |= IOMMU_FAULT_PERM_PRIV;
 
-       if (evt[1] & EVTQ_1_STALL) {
-               flt->type = IOMMU_FAULT_PAGE_REQ;
-               flt->prm = (struct iommu_fault_page_request) {
-                       .flags = IOMMU_FAULT_PAGE_REQUEST_LAST_PAGE,
-                       .grpid = FIELD_GET(EVTQ_1_STAG, evt[1]),
-                       .perm = perm,
-                       .addr = FIELD_GET(EVTQ_2_ADDR, evt[2]),
-               };
-
-               if (ssid_valid) {
-                       flt->prm.flags |= IOMMU_FAULT_PAGE_REQUEST_PASID_VALID;
-                       flt->prm.pasid = FIELD_GET(EVTQ_0_SSID, evt[0]);
-               }
-       } else {
-               flt->type = IOMMU_FAULT_DMA_UNRECOV;
-               flt->event = (struct iommu_fault_unrecoverable) {
-                       .reason = reason,
-                       .flags = IOMMU_FAULT_UNRECOV_ADDR_VALID,
-                       .perm = perm,
-                       .addr = FIELD_GET(EVTQ_2_ADDR, evt[2]),
-               };
+       flt->type = IOMMU_FAULT_PAGE_REQ;
+       flt->prm = (struct iommu_fault_page_request) {
+               .flags = IOMMU_FAULT_PAGE_REQUEST_LAST_PAGE,
+               .grpid = FIELD_GET(EVTQ_1_STAG, evt[1]),
+               .perm = perm,
+               .addr = FIELD_GET(EVTQ_2_ADDR, evt[2]),
+       };
 
-               if (ssid_valid) {
-                       flt->event.flags |= IOMMU_FAULT_UNRECOV_PASID_VALID;
-                       flt->event.pasid = FIELD_GET(EVTQ_0_SSID, evt[0]);
-               }
+       if (ssid_valid) {
+               flt->prm.flags |= IOMMU_FAULT_PAGE_REQUEST_PASID_VALID;
+               flt->prm.pasid = FIELD_GET(EVTQ_0_SSID, evt[0]);
        }
 
        mutex_lock(&smmu->streams_mutex);