kernel/patches/0004-iommu-arm-smmu-v3-Integrate-the-function-for-obtain-.patch

76 lines
2.4 KiB
Diff

From 6f5496b19beae6c819d9a9d719e71b4af578c936 Mon Sep 17 00:00:00 2001
From: YunYi Yang <yangyunyi2@huawei.com>
Date: Tue, 24 Oct 2023 19:41:44 +0800
Subject: [PATCH 04/19] iommu/arm-smmu-v3: Integrate the function for obtain
the device domain type in bypass mode
driver inclusion
category: cleanup
bugzilla: https://gitee.com/openeuler/kernel/issues/I5RP8T
-------------------------------------------------------------------
When the CONFIG_SMMU_BYPASS_DEV macro is enabled, the obtaining of domain
type is encapsulated as a function as a step in arm_smmu_device_domian_type
function. So that the code is clearer and easier to call later.
Signed-off-by: YunYi Yang <yangyunyi2@huawei.com>
---
drivers/iommu/arm-smmu-v3.c | 31 +++++++++++++++++++++----------
1 file changed, 21 insertions(+), 10 deletions(-)
diff --git a/drivers/iommu/arm-smmu-v3.c b/drivers/iommu/arm-smmu-v3.c
index a11f5f03fcd0..66fab92a3e26 100644
--- a/drivers/iommu/arm-smmu-v3.c
+++ b/drivers/iommu/arm-smmu-v3.c
@@ -3075,9 +3075,27 @@ static void arm_smmu_put_resv_regions(struct device *dev,
#define IS_HISI_PTT_DEVICE(pdev) ((pdev)->vendor == PCI_VENDOR_ID_HUAWEI && \
(pdev)->device == 0xa12e)
-static int arm_smmu_device_domain_type(struct device *dev, unsigned int *type)
+#ifdef CONFIG_SMMU_BYPASS_DEV
+static int arm_smmu_bypass_dev_domain_type(struct device *dev)
{
int i;
+ struct pci_dev *pdev = to_pci_dev(dev);
+
+ for (i = 0; i < smmu_bypass_devices_num; i++) {
+ if ((smmu_bypass_devices[i].vendor == pdev->vendor) &&
+ (smmu_bypass_devices[i].device == pdev->device)) {
+ dev_info(dev, "device 0x%hx:0x%hx uses identity mapping.",
+ pdev->vendor, pdev->device);
+ return IOMMU_DOMAIN_IDENTITY;
+ }
+ }
+
+ return 0;
+}
+#endif
+
+static int arm_smmu_device_domain_type(struct device *dev, unsigned int *type)
+{
struct pci_dev *pdev;
if (!dev_is_pci(dev))
@@ -3091,15 +3109,8 @@ static int arm_smmu_device_domain_type(struct device *dev, unsigned int *type)
}
#ifdef CONFIG_SMMU_BYPASS_DEV
- for (i = 0; i < smmu_bypass_devices_num; i++) {
- if ((smmu_bypass_devices[i].vendor == pdev->vendor)
- && (smmu_bypass_devices[i].device == pdev->device)) {
- dev_info(dev, "device 0x%hx:0x%hx uses identity mapping.",
- pdev->vendor, pdev->device);
- *type = IOMMU_DOMAIN_IDENTITY;
- return 0;
- }
- }
+ *type = arm_smmu_bypass_dev_domain_type(dev);
+ return 0;
#endif
return -ERANGE;
}
--
2.27.0