[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH] xen/arm: smmuv1: Revert associating the group pointer with the S2CR
Hi Rahul, > On 16 Apr 2021, at 12:25, Rahul Singh <rahul.singh@xxxxxxx> wrote: > > Revert the code that associates the group pointer with the S2CR as this > code causing an issue when the SMMU device has more than one master > device. > > This code is merged with the commit "xen/arm: smmuv1: Intelligent > SMR allocation”. > > Signed-off-by: Rahul Singh <rahul.singh@xxxxxxx> Reviewed-by: Bertrand Marquis <bertrand.marquis@xxxxxxx> Cheers, Bertrand > --- > xen/drivers/passthrough/arm/smmu.c | 44 +++--------------------------- > 1 file changed, 4 insertions(+), 40 deletions(-) > > diff --git a/xen/drivers/passthrough/arm/smmu.c > b/xen/drivers/passthrough/arm/smmu.c > index 24ac4f3a80..1a68c2ab3b 100644 > --- a/xen/drivers/passthrough/arm/smmu.c > +++ b/xen/drivers/passthrough/arm/smmu.c > @@ -597,7 +597,6 @@ enum arm_smmu_arch_version { > }; > > struct arm_smmu_s2cr { > - struct iommu_group *group; > int count; > enum arm_smmu_s2cr_type type; > enum arm_smmu_s2cr_privcfg privcfg; > @@ -1498,7 +1497,6 @@ static int arm_smmu_master_alloc_smes(struct device > *dev) > struct arm_smmu_master_cfg *cfg = find_smmu_master_cfg(dev); > struct arm_smmu_device *smmu = cfg->smmu; > struct arm_smmu_smr *smrs = smmu->smrs; > - struct iommu_group *group; > int i, idx, ret; > > spin_lock(&smmu->stream_map_lock); > @@ -1523,19 +1521,9 @@ static int arm_smmu_master_alloc_smes(struct device > *dev) > cfg->smendx[i] = (s16)idx; > } > > - group = iommu_group_get(dev); > - if (!group) > - group = ERR_PTR(-ENOMEM); > - if (IS_ERR(group)) { > - ret = PTR_ERR(group); > - goto out_err; > - } > - iommu_group_put(group); > - > /* It worked! Now, poke the actual hardware */ > for_each_cfg_sme(cfg, i, idx) { > arm_smmu_write_sme(smmu, idx); > - smmu->s2crs[idx].group = group; > } > > spin_unlock(&smmu->stream_map_lock); > @@ -1966,27 +1954,6 @@ static void __arm_smmu_release_pci_iommudata(void > *data) > kfree(data); > } > > -static struct iommu_group *arm_smmu_device_group(struct > - arm_smmu_master_cfg *cfg) > -{ > - struct arm_smmu_device *smmu = cfg->smmu; > - struct iommu_group *group = NULL; > - int i, idx; > - > - for_each_cfg_sme(cfg, i, idx) { > - if (group && smmu->s2crs[idx].group && > - group != smmu->s2crs[idx].group) > - return ERR_PTR(-EINVAL); > - > - group = smmu->s2crs[idx].group; > - } > - > - if (group) > - return group; > - > - return NULL; > -} > - > static int arm_smmu_add_device(struct device *dev) > { > struct arm_smmu_device *smmu; > @@ -2027,13 +1994,10 @@ static int arm_smmu_add_device(struct device *dev) > cfg->smmu = smmu; > } > > - group = arm_smmu_device_group(cfg); > - if (!group) { > - group = iommu_group_alloc(); > - if (IS_ERR(group)) { > - dev_err(dev, "Failed to allocate IOMMU group\n"); > - return PTR_ERR(group); > - } > + group = iommu_group_alloc(); > + if (IS_ERR(group)) { > + dev_err(dev, "Failed to allocate IOMMU group\n"); > + return PTR_ERR(group); > } > > iommu_group_set_iommudata(group, cfg, releasefn); > -- > 2.17.1 >
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |