Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

perf/imx_ddr: Move ida_alloc() from ddr_perf_init() to ddr_perf_probe()

Move ida_alloc() from helper ddr_perf_init() into ddr_perf_probe() to
clarify why ida_free() must be called at the error path.

Add return value check for ida_alloc().

Rename label 'cpuhp_state_err' to 'idr_free' to make the code clearer,
since two error paths now jump to this label.

Signed-off-by: Frank Li <Frank.Li@nxp.com>
Signed-off-by: Will Deacon <will@kernel.org>

authored by

Frank Li and committed by
Will Deacon
66db99ff de8209e5

+12 -9
+12 -9
drivers/perf/fsl_imx8_ddr_perf.c
··· 645 645 { 646 646 } 647 647 648 - static int ddr_perf_init(struct ddr_pmu *pmu, void __iomem *base, 649 - struct device *dev) 648 + static void ddr_perf_init(struct ddr_pmu *pmu, void __iomem *base, 649 + struct device *dev) 650 650 { 651 651 *pmu = (struct ddr_pmu) { 652 652 .pmu = (struct pmu) { ··· 667 667 .base = base, 668 668 .dev = dev, 669 669 }; 670 - 671 - pmu->id = ida_alloc(&ddr_ida, GFP_KERNEL); 672 - return pmu->id; 673 670 } 674 671 675 672 static irqreturn_t ddr_perf_irq_handler(int irq, void *p) ··· 750 753 if (!pmu) 751 754 return -ENOMEM; 752 755 753 - num = ddr_perf_init(pmu, base, &pdev->dev); 756 + ddr_perf_init(pmu, base, &pdev->dev); 754 757 755 758 platform_set_drvdata(pdev, pmu); 759 + 760 + num = ida_alloc(&ddr_ida, GFP_KERNEL); 761 + if (num < 0) 762 + return num; 763 + 764 + pmu->id = num; 756 765 757 766 name = devm_kasprintf(&pdev->dev, GFP_KERNEL, DDR_PERF_DEV_NAME "%d", 758 767 num); 759 768 if (!name) { 760 769 ret = -ENOMEM; 761 - goto cpuhp_state_err; 770 + goto idr_free; 762 771 } 763 772 764 773 pmu->devtype_data = of_device_get_match_data(&pdev->dev); ··· 777 774 778 775 if (ret < 0) { 779 776 dev_err(&pdev->dev, "cpuhp_setup_state_multi failed\n"); 780 - goto cpuhp_state_err; 777 + goto idr_free; 781 778 } 782 779 783 780 pmu->cpuhp_state = ret; ··· 824 821 cpuhp_state_remove_instance_nocalls(pmu->cpuhp_state, &pmu->node); 825 822 cpuhp_instance_err: 826 823 cpuhp_remove_multi_state(pmu->cpuhp_state); 827 - cpuhp_state_err: 824 + idr_free: 828 825 ida_free(&ddr_ida, pmu->id); 829 826 dev_warn(&pdev->dev, "i.MX8 DDR Perf PMU failed (%d), disabled\n", ret); 830 827 return ret;