提交 a492abd7 编写于 作者: K Kunkun Jiang 提交者: Zheng Zengkai

Revert "iommu/smmuv3: report additional recoverable faults"

virt inclusion
category: bugfix
bugzilla: https://gitee.com/openeuler/kernel/issues/I61SPO
CVE: NA

--------------------------------

This reverts commit 7733f2e7.
Signed-off-by: NKunkun Jiang <jiangkunkun@huawei.com>
Reviewed-by: NKeqian Zhu <zhukeqian1@huawei.com>
Signed-off-by: NZheng Zengkai <zhengzengkai@huawei.com>
上级 91011e3f
...@@ -1700,7 +1700,6 @@ static int arm_smmu_handle_evt(struct arm_smmu_device *smmu, u64 *evt) ...@@ -1700,7 +1700,6 @@ static int arm_smmu_handle_evt(struct arm_smmu_device *smmu, u64 *evt)
u32 perm = 0; u32 perm = 0;
struct arm_smmu_master *master; struct arm_smmu_master *master;
bool ssid_valid = evt[0] & EVTQ_0_SSV; bool ssid_valid = evt[0] & EVTQ_0_SSV;
u8 type = FIELD_GET(EVTQ_0_ID, evt[0]);
u32 sid = FIELD_GET(EVTQ_0_SID, evt[0]); u32 sid = FIELD_GET(EVTQ_0_SID, evt[0]);
struct iommu_fault_event fault_evt = { }; struct iommu_fault_event fault_evt = { };
struct iommu_fault *flt = &fault_evt.fault; struct iommu_fault *flt = &fault_evt.fault;
...@@ -1753,6 +1752,8 @@ static int arm_smmu_handle_evt(struct arm_smmu_device *smmu, u64 *evt) ...@@ -1753,6 +1752,8 @@ static int arm_smmu_handle_evt(struct arm_smmu_device *smmu, u64 *evt)
} else { } else {
flt->type = IOMMU_FAULT_DMA_UNRECOV; flt->type = IOMMU_FAULT_DMA_UNRECOV;
flt->event = (struct iommu_fault_unrecoverable) { flt->event = (struct iommu_fault_unrecoverable) {
.reason = reason,
.flags = IOMMU_FAULT_UNRECOV_ADDR_VALID,
.perm = perm, .perm = perm,
.addr = FIELD_GET(EVTQ_2_ADDR, evt[2]), .addr = FIELD_GET(EVTQ_2_ADDR, evt[2]),
}; };
...@@ -1761,43 +1762,6 @@ static int arm_smmu_handle_evt(struct arm_smmu_device *smmu, u64 *evt) ...@@ -1761,43 +1762,6 @@ static int arm_smmu_handle_evt(struct arm_smmu_device *smmu, u64 *evt)
flt->event.flags |= IOMMU_FAULT_UNRECOV_PASID_VALID; flt->event.flags |= IOMMU_FAULT_UNRECOV_PASID_VALID;
flt->event.pasid = FIELD_GET(EVTQ_0_SSID, evt[0]); flt->event.pasid = FIELD_GET(EVTQ_0_SSID, evt[0]);
} }
switch (type) {
case EVT_ID_TRANSLATION_FAULT:
flt->event.reason = IOMMU_FAULT_REASON_PTE_FETCH;
flt->event.flags |= IOMMU_FAULT_UNRECOV_ADDR_VALID;
break;
case EVT_ID_ADDR_SIZE_FAULT:
flt->event.reason = IOMMU_FAULT_REASON_OOR_ADDRESS;
flt->event.flags |= IOMMU_FAULT_UNRECOV_ADDR_VALID;
break;
case EVT_ID_ACCESS_FAULT:
flt->event.reason = IOMMU_FAULT_REASON_ACCESS;
flt->event.flags |= IOMMU_FAULT_UNRECOV_ADDR_VALID;
break;
case EVT_ID_PERMISSION_FAULT:
flt->event.reason = IOMMU_FAULT_REASON_PERMISSION;
flt->event.flags |= IOMMU_FAULT_UNRECOV_ADDR_VALID;
break;
case EVT_ID_BAD_SUBSTREAMID:
flt->event.reason = IOMMU_FAULT_REASON_PASID_INVALID;
break;
case EVT_ID_CD_FETCH:
flt->event.reason = IOMMU_FAULT_REASON_PASID_FETCH;
flt->event.flags |= IOMMU_FAULT_UNRECOV_FETCH_ADDR_VALID;
break;
case EVT_ID_BAD_CD:
flt->event.reason = IOMMU_FAULT_REASON_BAD_PASID_ENTRY;
break;
case EVT_ID_WALK_EABT:
flt->event.reason = IOMMU_FAULT_REASON_WALK_EABT;
flt->event.flags |= IOMMU_FAULT_UNRECOV_ADDR_VALID |
IOMMU_FAULT_UNRECOV_FETCH_ADDR_VALID;
break;
default:
/* TODO: report other unrecoverable faults. */
return -EFAULT;
}
} }
mutex_lock(&smmu->streams_mutex); mutex_lock(&smmu->streams_mutex);
......
...@@ -433,10 +433,6 @@ ...@@ -433,10 +433,6 @@
#define EVTQ_0_ID GENMASK_ULL(7, 0) #define EVTQ_0_ID GENMASK_ULL(7, 0)
#define EVT_ID_BAD_SUBSTREAMID 0x08
#define EVT_ID_CD_FETCH 0x09
#define EVT_ID_BAD_CD 0x0a
#define EVT_ID_WALK_EABT 0x0b
#define EVT_ID_TRANSLATION_FAULT 0x10 #define EVT_ID_TRANSLATION_FAULT 0x10
#define EVT_ID_ADDR_SIZE_FAULT 0x11 #define EVT_ID_ADDR_SIZE_FAULT 0x11
#define EVT_ID_ACCESS_FAULT 0x12 #define EVT_ID_ACCESS_FAULT 0x12
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册