Re: [PATCH v5 2/9] iommu/arm-smmu-v3: Replace s1_cfg with cdtab_cfg
From: Jason Gunthorpe <jgg@nvidia.com>
Date: 2023-08-10 17:32:17
Also in:
linux-iommu, lkml
On Fri, Aug 11, 2023 at 01:15:14AM +0800, Michael Shavit wrote:
quoted
quoted
quoted
What dead code? Is the deal here that we keep the field, but still infer the value to write from (cd_table->l1_desc == null) in arm_smmu_write_strtab_ent??Keep the field and write it directly when populating the ste (i.e. don't infer anything), but the field moves into 'struct arm_smmu_ctx_desc_cfg'.Yes - the 'dead code' is that we introduce storage for a field that is always a known constant (STRTAB_STE_0_S1FMT_64K_L2).I'm not sure we're on the same page here. s1fmt could contain either `STRTAB_STE_0_S1FMT_64K_L2` or `STRTAB_STE_0_S1FMT_LINEAR`, and this value will be directly copied in arm_smmu_write_strtab_ent.
Ah, I did not check this closely, Will said: > But the computation isn't happening -- the STRTAB_STE_0_S1FMT_64K_L2 > constant is hardcoded here. So the nuanced answer is that computation is happening because today the format of the CD table (linear vs 64k) is encoded in l1_desc: + cd_table->l1_desc ? + STRTAB_STE_0_S1FMT_64K_L2 : + STRTAB_STE_0_S1FMT_LINEAR); So I would suggest that along with adding s1fmt to arm_smmu_ctx_desc_cfg you also go and normalize the usage:
@@ -1030,7 +1030,7 @@ static __le64 *arm_smmu_get_cd_ptr(struct arm_smmu_master *master, u32 ssid) struct arm_smmu_device *smmu = master->smmu; struct arm_smmu_ctx_desc_cfg *cd_table = &master->cd_table; - if (!cd_table->l1_desc) + if (cd_table->s1fmt == STRTAB_STE_0_S1FMT_LINEAR) return cd_table->cdtab + ssid * CTXDESC_CD_DWORDS;
Jason _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel