Loading drivers/iommu/tegra-smmu.c +6 −31 Original line number Diff line number Diff line Loading @@ -971,51 +971,26 @@ static int tegra_smmu_probe(struct platform_device *pdev) spin_lock_init(&smmu->lock); err = smmu_setup_regs(smmu); if (err) goto fail; return err; platform_set_drvdata(pdev, smmu); smmu->avp_vector_page = alloc_page(GFP_KERNEL); if (!smmu->avp_vector_page) goto fail; return -ENOMEM; smmu_handle = smmu; return 0; fail: if (smmu->avp_vector_page) __free_page(smmu->avp_vector_page); if (smmu && smmu->as) { for (i = 0; i < smmu->num_as; i++) { if (smmu->as[i].pdir_page) { ClearPageReserved(smmu->as[i].pdir_page); __free_page(smmu->as[i].pdir_page); } } devm_kfree(dev, smmu->as); } devm_kfree(dev, smmu); return err; } static int tegra_smmu_remove(struct platform_device *pdev) { struct smmu_device *smmu = platform_get_drvdata(pdev); struct device *dev = smmu->dev; smmu_write(smmu, SMMU_CONFIG_DISABLE, SMMU_CONFIG); platform_set_drvdata(pdev, NULL); if (smmu->as) { int i; smmu_write(smmu, SMMU_CONFIG_DISABLE, SMMU_CONFIG); for (i = 0; i < smmu->num_as; i++) free_pdir(&smmu->as[i]); devm_kfree(dev, smmu->as); } if (smmu->avp_vector_page) __free_page(smmu->avp_vector_page); if (smmu->regs) devm_iounmap(dev, smmu->regs); devm_kfree(dev, smmu); smmu_handle = NULL; return 0; } Loading Loading
drivers/iommu/tegra-smmu.c +6 −31 Original line number Diff line number Diff line Loading @@ -971,51 +971,26 @@ static int tegra_smmu_probe(struct platform_device *pdev) spin_lock_init(&smmu->lock); err = smmu_setup_regs(smmu); if (err) goto fail; return err; platform_set_drvdata(pdev, smmu); smmu->avp_vector_page = alloc_page(GFP_KERNEL); if (!smmu->avp_vector_page) goto fail; return -ENOMEM; smmu_handle = smmu; return 0; fail: if (smmu->avp_vector_page) __free_page(smmu->avp_vector_page); if (smmu && smmu->as) { for (i = 0; i < smmu->num_as; i++) { if (smmu->as[i].pdir_page) { ClearPageReserved(smmu->as[i].pdir_page); __free_page(smmu->as[i].pdir_page); } } devm_kfree(dev, smmu->as); } devm_kfree(dev, smmu); return err; } static int tegra_smmu_remove(struct platform_device *pdev) { struct smmu_device *smmu = platform_get_drvdata(pdev); struct device *dev = smmu->dev; smmu_write(smmu, SMMU_CONFIG_DISABLE, SMMU_CONFIG); platform_set_drvdata(pdev, NULL); if (smmu->as) { int i; smmu_write(smmu, SMMU_CONFIG_DISABLE, SMMU_CONFIG); for (i = 0; i < smmu->num_as; i++) free_pdir(&smmu->as[i]); devm_kfree(dev, smmu->as); } if (smmu->avp_vector_page) __free_page(smmu->avp_vector_page); if (smmu->regs) devm_iounmap(dev, smmu->regs); devm_kfree(dev, smmu); smmu_handle = NULL; return 0; } Loading