From: Andrea Bastoni <[email protected]>

The symbol "smmu" is declared and defined only in the smmu-v3
compilation unit. Give different names and pass a pointer as parameter
to preserve generality of the accessor functions and avoid shadowing the
smmu name.

Signed-off-by: Andrea Bastoni <[email protected]>
[Jan: refactored more aggressively, avoiding redundant array element lookups]
Signed-off-by: Jan Kiszka <[email protected]>
---
 hypervisor/arch/arm64/smmu-v3.c | 35 +++++++++++++++++++--------------
 1 file changed, 20 insertions(+), 15 deletions(-)

diff --git a/hypervisor/arch/arm64/smmu-v3.c b/hypervisor/arch/arm64/smmu-v3.c
index 2f57868d..5f75e862 100644
--- a/hypervisor/arch/arm64/smmu-v3.c
+++ b/hypervisor/arch/arm64/smmu-v3.c
@@ -360,7 +360,9 @@ struct arm_smmu_device {
        struct arm_smmu_evtq            evtq;
        unsigned int                    sid_bits;
        struct arm_smmu_strtab_cfg      strtab_cfg;
-} smmu[JAILHOUSE_MAX_IOMMU_UNITS];
+};
+
+static struct arm_smmu_device smmu_devices[JAILHOUSE_MAX_IOMMU_UNITS];
 
 /* Low-level queue manipulation functions */
 static bool queue_full(struct arm_smmu_queue *q)
@@ -1040,6 +1042,7 @@ static void arm_smmu_uninit_ste(struct arm_smmu_device 
*smmu, u32 sid, u32 vmid)
 
 static int arm_smmuv3_cell_init(struct cell *cell)
 {
+       struct arm_smmu_device *smmu = &smmu_devices[0];
        struct jailhouse_iommu *iommu;
        struct arm_smmu_cmdq_ent cmd;
        int ret, i, j, sid;
@@ -1048,20 +1051,20 @@ static int arm_smmuv3_cell_init(struct cell *cell)
                return 0;
 
        iommu = &system_config->platform_info.iommu_units[0];
-       for (i = 0; i < iommu_count_units(); iommu++, i++) {
+       for (i = 0; i < iommu_count_units(); iommu++, smmu++, i++) {
                if (iommu->type != JAILHOUSE_IOMMU_SMMUV3)
                        continue;
 
                for_each_stream_id(sid, cell->config, j) {
-                       ret = arm_smmu_init_ste(&smmu[i], sid, 
cell->config->id);
+                       ret = arm_smmu_init_ste(smmu, sid, cell->config->id);
                        if (ret)
                                return ret;
                }
 
                cmd.opcode      = CMDQ_OP_TLBI_S12_VMALL;
                cmd.tlbi.vmid   = cell->config->id;
-               arm_smmu_cmdq_issue_cmd(&smmu[i], &cmd);
-               arm_smmu_cmdq_issue_sync(&smmu[i]);
+               arm_smmu_cmdq_issue_cmd(smmu, &cmd);
+               arm_smmu_cmdq_issue_sync(smmu);
        }
 
        return 0;
@@ -1069,6 +1072,7 @@ static int arm_smmuv3_cell_init(struct cell *cell)
 
 static void arm_smmuv3_cell_exit(struct cell *cell)
 {
+       struct arm_smmu_device *smmu = &smmu_devices[0];
        struct jailhouse_iommu *iommu;
        struct arm_smmu_cmdq_ent cmd;
        int i, j, sid;
@@ -1076,46 +1080,47 @@ static void arm_smmuv3_cell_exit(struct cell *cell)
        if (!iommu_count_units())
                return;
 
-       for (i = 0; i < JAILHOUSE_MAX_IOMMU_UNITS; i++) {
-               iommu = &system_config->platform_info.iommu_units[i];
+       iommu = &system_config->platform_info.iommu_units[0];
+       for (i = 0; i < JAILHOUSE_MAX_IOMMU_UNITS; iommu++, smmu++, i++) {
                if (iommu->type != JAILHOUSE_IOMMU_SMMUV3)
                        continue;
 
                for_each_stream_id(sid, cell->config, j) {
-                       arm_smmu_uninit_ste(&smmu[i], sid, cell->config->id);
+                       arm_smmu_uninit_ste(smmu, sid, cell->config->id);
                }
 
                cmd.opcode      = CMDQ_OP_TLBI_S12_VMALL;
                cmd.tlbi.vmid   = cell->config->id;
-               arm_smmu_cmdq_issue_cmd(&smmu[i], &cmd);
-               arm_smmu_cmdq_issue_sync(&smmu[i]);
+               arm_smmu_cmdq_issue_cmd(smmu, &cmd);
+               arm_smmu_cmdq_issue_sync(smmu);
        }
 }
 
 static int arm_smmuv3_init(void)
 {
+       struct arm_smmu_device *smmu = &smmu_devices[0];
        struct jailhouse_iommu *iommu;
        int ret, i;
 
        iommu = &system_config->platform_info.iommu_units[0];
-       for (i = 0; i < iommu_count_units(); iommu++, i++) {
+       for (i = 0; i < iommu_count_units(); iommu++, smmu++, i++) {
                if (iommu->type != JAILHOUSE_IOMMU_SMMUV3)
                        continue;
 
-               smmu[i].base = paging_map_device(iommu->base, iommu->size);
+               smmu->base = paging_map_device(iommu->base, iommu->size);
 
                /* ToDo: irq allocation*/
 
-               ret = arm_smmu_device_init_features(&smmu[i]);
+               ret = arm_smmu_device_init_features(smmu);
                if (ret)
                        return ret;
 
-               ret = arm_smmu_init_structures(&smmu[i]);
+               ret = arm_smmu_init_structures(smmu);
                if (ret)
                        return ret;
 
                /* Reset the device */
-               ret = arm_smmu_device_reset(&smmu[i]);
+               ret = arm_smmu_device_reset(smmu);
                if (ret)
                        return ret;
        }
-- 
2.26.2

-- 
You received this message because you are subscribed to the Google Groups 
"Jailhouse" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/jailhouse-dev/2db25e92-63a9-3885-fadd-02adcd3a1a53%40siemens.com.

Reply via email to