[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <8c861182-7e90-4bbf-ac04-173d59f5af69@samsung.com>
Date: Tue, 26 Aug 2025 15:51:45 +0200
From: Marek Szyprowski <m.szyprowski@...sung.com>
To: Will McVicker <willmcvicker@...gle.com>, Catalin Marinas
<catalin.marinas@....com>, Will Deacon <will@...nel.org>, Daniel Lezcano
<daniel.lezcano@...aro.org>, Thomas Gleixner <tglx@...utronix.de>, Krzysztof
Kozlowski <krzk@...nel.org>, Alim Akhtar <alim.akhtar@...sung.com>, Rob
Herring <robh@...nel.org>, Saravana Kannan <saravanak@...gle.com>
Cc: Donghoon Yu <hoony.yu@...sung.com>, kernel-team@...roid.com,
linux-arm-kernel@...ts.infradead.org, linux-kernel@...r.kernel.org, John
Stultz <jstultz@...gle.com>, Youngmin Nam <youngmin.nam@...sung.com>, Peter
Griffin <peter.griffin@...aro.org>, Tudor Ambarus
<tudor.ambarus@...aro.org>, André Draszik
<andre.draszik@...aro.org>, Conor Dooley <conor+dt@...nel.org>,
linux-samsung-soc@...r.kernel.org, devicetree@...r.kernel.org
Subject: Re: [PATCH v4 3/6] clocksource/drivers/exynos_mct: Set local timer
interrupts as percpu
On 20.06.2025 20:17, Will McVicker wrote:
> From: Hosung Kim <hosung0.kim@...sung.com>
>
> To allow the CPU to handle it's own clock events, we need to set the
> IRQF_PERCPU flag. This prevents the local timer interrupts from
> migrating to other CPUs.
>
> Signed-off-by: Hosung Kim <hosung0.kim@...sung.com>
> [Original commit from https://android.googlesource.com/kernel/gs/+/03267fad19f093bac979ca78309483e9eb3a8d16]
> Reviewed-by: Peter Griffin <peter.griffin@...aro.org>
> Reviewed-by: Youngmin Nam <youngmin.nam@...sung.com>
> Tested-by: Youngmin Nam <youngmin.nam@...sung.com>
> Signed-off-by: Will McVicker <willmcvicker@...gle.com>
This patch has been merged some time ago to v6.17-rc1 as commit
f3cec54ee3bf ("clocksource/drivers/exynos_mct: Set local timer
interrupts as percpu"). Recently I found that it breaks CPU hotplug
support for some 'little' cores on Exynos5422 based boards, like
OdroidXU3/XU4:
# for i in /sys/devices/system/cpu/cpu[1-9]; do echo 0 >$i/online; done
# for i in /sys/devices/system/cpu/cpu[1-9]; do echo 1 >$i/online; done
[ 117.100195] CPU2: failed to come online
-bash: echo: write error: Input/output error
[ 118.140426] CPU3: failed to come online
-bash: echo: write error: Input/output error
[ 118.148428] CPU4: detected I-Cache line size mismatch, workaround
enabled
[ 118.169613] CPU5: detected I-Cache line size mismatch, workaround
enabled
[ 118.216802] CPU6: detected I-Cache line size mismatch, workaround
enabled
[ 118.283725] CPU7: detected I-Cache line size mismatch, workaround
enabled
#
Frankly speaking I have no idea why this happens. CPU hotplug was always
broken for the CPU0, but this is not relevant for this case. Maybe this
PERCPU flag should be applied only on ARM64-based boards to avoid
affecting legacy ARM 32bit cases?
> ---
> drivers/clocksource/exynos_mct.c | 3 ++-
> 1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/clocksource/exynos_mct.c b/drivers/clocksource/exynos_mct.c
> index 96361d5dc57d..a5ef7d64b1c2 100644
> --- a/drivers/clocksource/exynos_mct.c
> +++ b/drivers/clocksource/exynos_mct.c
> @@ -596,7 +596,8 @@ static int __init exynos4_timer_interrupts(struct device_node *np,
> irq_set_status_flags(mct_irq, IRQ_NOAUTOEN);
> if (request_irq(mct_irq,
> exynos4_mct_tick_isr,
> - IRQF_TIMER | IRQF_NOBALANCING,
> + IRQF_TIMER | IRQF_NOBALANCING |
> + IRQF_PERCPU,
> pcpu_mevt->name, pcpu_mevt)) {
> pr_err("exynos-mct: cannot register IRQ (cpu%d)\n",
> cpu);
Best regards
--
Marek Szyprowski, PhD
Samsung R&D Institute Poland
Powered by blists - more mailing lists