Quoting Sai Prakash Ranjan (2019-09-17 02:45:04) > diff --git a/drivers/iommu/arm-smmu-impl.c b/drivers/iommu/arm-smmu-impl.c > index 3f88cd078dd5..d62da270f430 100644 > --- a/drivers/iommu/arm-smmu-impl.c > +++ b/drivers/iommu/arm-smmu-impl.c > @@ -9,7 +9,6 @@ > > #include "arm-smmu.h" > > - > static int arm_smmu_gr0_ns(int offset) > { > switch(offset) { Why is this hunk still around? > diff --git a/drivers/iommu/arm-smmu-qcom.c b/drivers/iommu/arm-smmu-qcom.c > new file mode 100644 > index 000000000000..24c071c1d8b0 > --- /dev/null > +++ b/drivers/iommu/arm-smmu-qcom.c > @@ -0,0 +1,51 @@ [...] > +struct arm_smmu_device *qcom_smmu_impl_init(struct arm_smmu_device *smmu) > +{ > + struct qcom_smmu *qsmmu; > + > + qsmmu = devm_kzalloc(smmu->dev, sizeof(*qsmmu), GFP_KERNEL); > + if (!qsmmu) > + return ERR_PTR(-ENOMEM); > + > + qsmmu->smmu = *smmu; > + > + qsmmu->smmu.impl = &qcom_smmu_impl; > + devm_kfree(smmu->dev, smmu); This copy is interesting but OK I guess cavium does it. > + > + return &qsmmu->smmu; > +}