Thread (45 messages) 45 messages, 3 authors, 2023-08-15

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
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help