On 04.09.2025 17:32, Peter Griffin wrote: > This patch addresses a regression reported in [1] whereby CPU hotplug now > fails on little CPUs (for reasons that aren't fully understood) for Arm > 32bit platforms such as Exynos 5422 used in OdroidXU3/XU4 boards. > > Note: This patch makes an assumption that the exynos_mct driver is only > used on Arm 32/64 bit SoCs. > > Fixes: f3cec54ee3bf ("clocksource/drivers/exynos_mct: Set local timer interrupts as percpu") > Reported-by: Marek Szyprowski <m.szyprowski@xxxxxxxxxxx> > Closes: https://lore.kernel.org/lkml/8c861182-7e90-4bbf-ac04-173d59f5af69@xxxxxxxxxxx/ > Link: https://lore.kernel.org/lkml/8c861182-7e90-4bbf-ac04-173d59f5af69@xxxxxxxxxxx/ [1] > Signed-off-by: Peter Griffin <peter.griffin@xxxxxxxxxx> > --- > Hi Marek & Krzysztof, > > Can you test this patch on your Exynos5422 based boards and see if it > resolves the issue Marek reported of CPU hot plug failing on the little > cores of Exynos 5422 based boards? > > Unfortunately I only have gs101 based Exynos hardware (which is Arm 64 bit > SoC) to test on. I can confirm CPU hotplug is functional on the little > cluster CPUs with IRQF_PERCPU flag on Pixel6/gs101 though. This is a duplicate of https://lore.kernel.org/all/20250827102645.1964659-1-m.szyprowski@xxxxxxxxxxx/ and yes, it fixes the reported issue. Tested-by: Marek Szyprowski <m.szyprowski@xxxxxxxxxxx> > Thanks, > > Peter > --- > --- > drivers/clocksource/exynos_mct.c | 13 +++++++++++-- > 1 file changed, 11 insertions(+), 2 deletions(-) > > diff --git a/drivers/clocksource/exynos_mct.c b/drivers/clocksource/exynos_mct.c > index 62febeb4e1decec7f5db104db395884824563915..91d79b73a96a7e8a354d803c2b497bcde92af8d8 100644 > --- a/drivers/clocksource/exynos_mct.c > +++ b/drivers/clocksource/exynos_mct.c > @@ -532,6 +532,16 @@ static int __init exynos4_timer_resources(struct device_node *np) > return 0; > } > > +/* > + * For reasons that aren't fully understood IRQF_PERCPU breaks CPU hotplug on > + * little cores of ARM 32 bit SoCs like Exynos5422 used in OdroidXU3/4 boards. > + */ > +#if defined(CONFIG_ARM64) || defined(CONFIG_COMPILE_TEST) > +#define MCT_IRQ_FLAGS (IRQF_TIMER | IRQF_NOBALANCING | IRQF_PERCPU) > +#elif defined(CONFIG_ARM) > +#define MCT_IRQ_FLAGS (IRQF_TIMER | IRQF_NOBALANCING) > +#endif > + > /** > * exynos4_timer_interrupts - initialize MCT interrupts > * @np: device node for MCT > @@ -602,8 +612,7 @@ 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_PERCPU, > + MCT_IRQ_FLAGS, > pcpu_mevt->name, pcpu_mevt)) { > pr_err("exynos-mct: cannot register IRQ (cpu%d)\n", > cpu); > > --- > base-commit: 4ac65880ebca1b68495bd8704263b26c050ac010 > change-id: 20250904-exynos-mct-arm32-cpuhp-regression-14f321e4a591 > > Best regards, Best regards -- Marek Szyprowski, PhD Samsung R&D Institute Poland