Stephen Warren <swarren@xxxxxxxxxxxxx> wrote @ Thu, 18 Jul 2013 22:10:29 +0200: > On 07/05/2013 04:44 AM, Hiroshi Doyu wrote: > > Create default IOVA maps at boot-up which can be attached to devices. > > > diff --git a/drivers/iommu/tegra-smmu.c b/drivers/iommu/tegra-smmu.c > > > static int tegra_smmu_probe(struct platform_device *pdev) > > { > > struct smmu_device *smmu; > > > @@ -1160,13 +1182,15 @@ static int tegra_smmu_probe(struct platform_device *pdev) > > if (of_property_read_u32(dev->of_node, "nvidia,#asids", &asids)) > > return -ENODEV; > > > > - bytes = sizeof(*smmu) + asids * sizeof(*smmu->as); > > + bytes = sizeof(*smmu) + asids * (sizeof(*smmu->as) + > > + sizeof(struct dma_iommu_mapping *)); > > smmu = devm_kzalloc(dev, bytes, GFP_KERNEL); > > if (!smmu) { > > dev_err(dev, "failed to allocate smmu_device\n"); > > return -ENOMEM; > > } > > > > + smmu->map = (struct dma_iommu_mapping **)(smmu->as + asids); > > Shouldn't "+ asids" be "+ asids * sizeof(*smmu->as)" to match the > calculation of "bytes" above? The structure is: smmu { .... struct dma_iommu_mapping **map; .... struct smmu_as as[0]; }; I think that this is correct, but is the following better? + smmu->map = (struct dma_iommu_mapping **)&smmu->as[asids]; -- To unsubscribe from this list: send the line "unsubscribe linux-tegra" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html