代码拉取完成,页面将自动刷新
同步操作将从 src-openEuler/qemu 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
From 9682b8cd2454c00fbb4c4f7eb3e959187d9e6f1c Mon Sep 17 00:00:00 2001
From: Kunkun Jiang <jiangkunkun@huawei.com>
Date: Fri, 18 Nov 2022 15:22:31 +0800
Subject: [PATCH 13/36] Revert "hw/arm/smmuv3: Pass stage 1 configurations to
the host"
This reverts commit 2e5929ec2a35a7a227dc7ba70a557a84993a366d.
Signed-off-by: Kunkun Jiang <jiangkunkun@huawei.com>
---
hw/arm/smmu-internal.h | 1 -
hw/arm/smmuv3.c | 71 ++++++------------------------------------
hw/arm/trace-events | 1 -
3 files changed, 9 insertions(+), 64 deletions(-)
diff --git a/hw/arm/smmu-internal.h b/hw/arm/smmu-internal.h
index 5ef8c598c6..2d75b31953 100644
--- a/hw/arm/smmu-internal.h
+++ b/hw/arm/smmu-internal.h
@@ -105,7 +105,6 @@ typedef struct SMMUIOTLBPageInvInfo {
} SMMUIOTLBPageInvInfo;
typedef struct SMMUSIDRange {
- SMMUState *state;
uint32_t start;
uint32_t end;
} SMMUSIDRange;
diff --git a/hw/arm/smmuv3.c b/hw/arm/smmuv3.c
index 514ce9d57d..cceb3794d4 100644
--- a/hw/arm/smmuv3.c
+++ b/hw/arm/smmuv3.c
@@ -16,10 +16,6 @@
* with this program; if not, see <http://www.gnu.org/licenses/>.
*/
-#ifdef __linux__
-#include "linux/iommu.h"
-#endif
-
#include "qemu/osdep.h"
#include "qemu/bitops.h"
#include "hw/irq.h"
@@ -936,61 +932,6 @@ static void smmuv3_s1_range_inval(SMMUState *s, Cmd *cmd)
}
}
-static void smmuv3_notify_config_change(SMMUState *bs, uint32_t sid)
-{
-#ifdef __linux__
- IOMMUMemoryRegion *mr = smmu_iommu_mr(bs, sid);
- SMMUEventInfo event = {.type = SMMU_EVT_NONE, .sid = sid,
- .inval_ste_allowed = true};
- IOMMUConfig iommu_config = {};
- SMMUTransCfg *cfg;
- SMMUDevice *sdev;
-
- if (!mr) {
- return;
- }
-
- sdev = container_of(mr, SMMUDevice, iommu);
-
- /* flush QEMU config cache */
- smmuv3_flush_config(sdev);
-
- if (!pci_device_is_pasid_ops_set(sdev->bus, sdev->devfn)) {
- return;
- }
-
- cfg = smmuv3_get_config(sdev, &event);
-
- if (!cfg) {
- return;
- }
-
- iommu_config.pasid_cfg.argsz = sizeof(struct iommu_pasid_table_config);
- iommu_config.pasid_cfg.version = PASID_TABLE_CFG_VERSION_1;
- iommu_config.pasid_cfg.format = IOMMU_PASID_FORMAT_SMMUV3;
- iommu_config.pasid_cfg.base_ptr = cfg->s1ctxptr;
- iommu_config.pasid_cfg.pasid_bits = 0;
- iommu_config.pasid_cfg.vendor_data.smmuv3.version = PASID_TABLE_SMMUV3_CFG_VERSION_1;
-
- if (cfg->disabled || cfg->bypassed) {
- iommu_config.pasid_cfg.config = IOMMU_PASID_CONFIG_BYPASS;
- } else if (cfg->aborted) {
- iommu_config.pasid_cfg.config = IOMMU_PASID_CONFIG_ABORT;
- } else {
- iommu_config.pasid_cfg.config = IOMMU_PASID_CONFIG_TRANSLATE;
- }
-
- trace_smmuv3_notify_config_change(mr->parent_obj.name,
- iommu_config.pasid_cfg.config,
- iommu_config.pasid_cfg.base_ptr);
-
- if (pci_device_set_pasid_table(sdev->bus, sdev->devfn, &iommu_config)) {
- error_report("Failed to pass PASID table to host for iommu mr %s (%m)",
- mr->parent_obj.name);
- }
-#endif
-}
-
static gboolean
smmuv3_invalidate_ste(gpointer key, gpointer value, gpointer user_data)
{
@@ -1001,7 +942,6 @@ smmuv3_invalidate_ste(gpointer key, gpointer value, gpointer user_data)
if (sid < sid_range->start || sid > sid_range->end) {
return false;
}
- smmuv3_notify_config_change(sid_range->state, sid);
trace_smmuv3_config_cache_inv(sid);
return true;
}
@@ -1072,14 +1012,22 @@ static int smmuv3_cmdq_consume(SMMUv3State *s)
case SMMU_CMD_CFGI_STE:
{
uint32_t sid = CMD_SID(&cmd);
+ IOMMUMemoryRegion *mr = smmu_iommu_mr(bs, sid);
+ SMMUDevice *sdev;
if (CMD_SSEC(&cmd)) {
cmd_error = SMMU_CERROR_ILL;
break;
}
+ if (!mr) {
+ break;
+ }
+
trace_smmuv3_cmdq_cfgi_ste(sid);
- smmuv3_notify_config_change(bs, sid);
+ sdev = container_of(mr, SMMUDevice, iommu);
+ smmuv3_flush_config(sdev);
+
break;
}
case SMMU_CMD_CFGI_STE_RANGE: /* same as SMMU_CMD_CFGI_ALL */
@@ -1094,7 +1042,6 @@ static int smmuv3_cmdq_consume(SMMUv3State *s)
}
mask = (1ULL << (range + 1)) - 1;
- sid_range.state = bs;
sid_range.start = sid & ~mask;
sid_range.end = sid_range.start + mask;
diff --git a/hw/arm/trace-events b/hw/arm/trace-events
index d9851d663e..1447ad5a90 100644
--- a/hw/arm/trace-events
+++ b/hw/arm/trace-events
@@ -53,5 +53,4 @@ smmuv3_config_cache_inv(uint32_t sid) "Config cache INV for sid=0x%x"
smmuv3_notify_flag_add(const char *iommu) "ADD SMMUNotifier node for iommu mr=%s"
smmuv3_notify_flag_del(const char *iommu) "DEL SMMUNotifier node for iommu mr=%s"
smmuv3_inv_notifiers_iova(const char *name, uint16_t asid, uint64_t iova, uint8_t tg, uint64_t num_pages) "iommu mr=%s asid=%d iova=0x%"PRIx64" tg=%d num_pages=0x%"PRIx64
-smmuv3_notify_config_change(const char *name, uint8_t config, uint64_t s1ctxptr) "iommu mr=%s config=%d s1ctxptr=0x%"PRIx64
--
2.27.0
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。