| From 039dfb45b8b58390d01a55044793acb73df20515 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Thu, 18 Oct 2018 11:57:04 +0200 |
| Subject: clocksource/drivers/exynos_mct: Fix error path in timer resources |
| initialization |
| |
| From: Marek Szyprowski <m.szyprowski@samsung.com> |
| |
| [ Upstream commit b9307420196009cdf18bad55e762ac49fb9a80f4 ] |
| |
| While freeing interrupt handlers in error path, don't assume that all |
| requested interrupts are per-processor interrupts and properly release |
| standard interrupts too. |
| |
| Reported-by: Krzysztof Kozlowski <krzk@kernel.org> |
| Fixes: 56a94f13919c ("clocksource: exynos_mct: Avoid blocking calls in the cpu hotplug notifier") |
| Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com> |
| Reviewed-by: Krzysztof Kozlowski <krzk@kernel.org> |
| Reviewed-by: Chanwoo Choi <cw00.choi@samsung.com> |
| Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/clocksource/exynos_mct.c | 14 +++++++++++++- |
| 1 file changed, 13 insertions(+), 1 deletion(-) |
| |
| diff --git a/drivers/clocksource/exynos_mct.c b/drivers/clocksource/exynos_mct.c |
| index d32248e2ceab4..ae3cbaeffd9c5 100644 |
| --- a/drivers/clocksource/exynos_mct.c |
| +++ b/drivers/clocksource/exynos_mct.c |
| @@ -563,7 +563,19 @@ static int __init exynos4_timer_resources(struct device_node *np, void __iomem * |
| return 0; |
| |
| out_irq: |
| - free_percpu_irq(mct_irqs[MCT_L0_IRQ], &percpu_mct_tick); |
| + if (mct_int_type == MCT_INT_PPI) { |
| + free_percpu_irq(mct_irqs[MCT_L0_IRQ], &percpu_mct_tick); |
| + } else { |
| + for_each_possible_cpu(cpu) { |
| + struct mct_clock_event_device *pcpu_mevt = |
| + per_cpu_ptr(&percpu_mct_tick, cpu); |
| + |
| + if (pcpu_mevt->evt.irq != -1) { |
| + free_irq(pcpu_mevt->evt.irq, pcpu_mevt); |
| + pcpu_mevt->evt.irq = -1; |
| + } |
| + } |
| + } |
| return err; |
| } |
| |
| -- |
| 2.20.1 |
| |