On Wed, Dec 06, 2023 at 08:57:27AM +0800, Zhangfei Gao wrote: > From: Wenkai Lin <linwenkai6@xxxxxxxxxxxxx> > > In the stall model, invalid transactions were expected to be > stalled and aborted by the IOPF handler. > > However, when killing a test case with a huge amount of data, the > accelerator streamline can not stop until all data is consumed > even if the page fault handler reports errors. As a result, the > kill may take a long time, about 10 seconds with numerous iopf > interrupts. > > So disable stall for quiet_cd in the non-force stall model, since > force stall model (STALL_MODEL==0b10) requires CD.S must be 1. > > Signed-off-by: Zhangfei Gao <zhangfei.gao@xxxxxxxxxx> > Signed-off-by: Wenkai Lin <linwenkai6@xxxxxxxxxxxxx> > Suggested-by: Jean-Philippe Brucker <jean-philippe@xxxxxxxxxx> Reviewed-by: Jean-Philippe Brucker <jean-philippe@xxxxxxxxxx> > --- > drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c | 3 +++ > 1 file changed, 3 insertions(+) > > diff --git a/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c b/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c > index 7445454c2af2..7086e5fa41ff 100644 > --- a/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c > +++ b/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c > @@ -1063,6 +1063,7 @@ int arm_smmu_write_ctx_desc(struct arm_smmu_master *master, int ssid, > bool cd_live; > __le64 *cdptr; > struct arm_smmu_ctx_desc_cfg *cd_table = &master->cd_table; > + struct arm_smmu_device *smmu = master->smmu; > > if (WARN_ON(ssid >= (1 << cd_table->s1cdmax))) > return -E2BIG; > @@ -1077,6 +1078,8 @@ int arm_smmu_write_ctx_desc(struct arm_smmu_master *master, int ssid, > if (!cd) { /* (5) */ > val = 0; > } else if (cd == &quiet_cd) { /* (4) */ > + if (!(smmu->features & ARM_SMMU_FEAT_STALL_FORCE)) > + val &= ~(CTXDESC_CD_0_S | CTXDESC_CD_0_R); > val |= CTXDESC_CD_0_TCR_EPD0; > } else if (cd_live) { /* (3) */ > val &= ~CTXDESC_CD_0_ASID; > -- > 2.39.3 (Apple Git-145) >