Re: [PATCH v2 5/7] clocksource/drivers/exynos_mct: Fix uninitialized irq name warning

Peter Griffin
2025-05-08T10:22:42Z

Hi Will,

On Thu, 3 Apr 2025 at 00:34, Will McVicker <willmcvicker@google.com> wrote:
>
> The Exynos MCT driver doesn't set the clocksource name until the CPU
> hotplug state is setup which happens after the IRQs are requested. This
> results in an empty IRQ name which leads to the below warning at
> proc_create() time. When this happens, the userdata partition fails to
> mount and the device gets stuck in an endless loop printing the error:
>
> root '/dev/disk/by-partlabel/userdata' doesn't exist or does not contain a /dev.
>
> To fix this, we just need to initialize the name before requesting the
> IRQs.
>
> Warning from Pixel 6 kernel log:
>
> [ T430] name len 0
> [ T430] WARNING: CPU: 6 PID: 430 at fs/proc/generic.c:407 __proc_create+0x258/0x2b4
> [ T430] Modules linked in: dwc3_exynos(E+)
> [ T430] ufs_exynos(E+) phy_exynos_ufs(E)
> [ T430] phy_exynos5_usbdrd(E) exynos_usi(E+) exynos_mct(E+) s3c2410_wdt(E)
> [ T430] arm_dsu_pmu(E) simplefb(E)
> [ T430] CPU: 6 UID: 0 PID: 430 Comm: (udev-worker) Tainted:
> ... 6.14.0-next-20250331-4k-00008-g59adf909e40e #1 ...
> [ T430] Tainted: [W]=WARN, [E]=UNSIGNED_MODULE
> [ T430] Hardware name: Raven (DT)
> [...]
> [ T430] Call trace:
> [ T430] __proc_create+0x258/0x2b4 (P)
> [ T430] proc_mkdir+0x40/0xa0
> [ T430] register_handler_proc+0x118/0x140
> [ T430] __setup_irq+0x460/0x6d0
> [ T430] request_threaded_irq+0xcc/0x1b0
> [ T430] mct_init_dt+0x244/0x604 [exynos_mct ...]
> [ T430] mct_init_spi+0x18/0x34 [exynos_mct ...]
> [ T430] exynos4_mct_probe+0x30/0x4c [exynos_mct ...]
> [ T430] platform_probe+0x6c/0xe4
> [ T430] really_probe+0xf4/0x38c
> [...]
> [ T430] driver_register+0x6c/0x140
> [ T430] __platform_driver_register+0x28/0x38
> [ T430] exynos4_mct_driver_init+0x24/0xfe8 [exynos_mct ...]
> [ T430] do_one_initcall+0x84/0x3c0
> [ T430] do_init_module+0x58/0x208
> [ T430] load_module+0x1de0/0x2500
> [ T430] init_module_from_file+0x8c/0xdc
>
> Signed-off-by: Will McVicker <willmcvicker@google.com>
> ---

You could additionally consider adding a Fixes: tag and CC stable if
you want this to land in LTS tree's.

Reviewed-by: Peter Griffin <peter.griffin@linaro.org>

> drivers/clocksource/exynos_mct.c | 10 ++++++++--
> 1 file changed, 8 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/clocksource/exynos_mct.c b/drivers/clocksource/exynos_mct.c
> index a5ef7d64b1c2..62febeb4e1de 100644
> --- a/drivers/clocksource/exynos_mct.c
> +++ b/drivers/clocksource/exynos_mct.c
> @@ -465,8 +465,6 @@ static int exynos4_mct_starting_cpu(unsigned int cpu)
> per_cpu_ptr(&percpu_mct_tick, cpu);
> struct clock_event_device *evt = &mevt->evt;
>
> - snprintf(mevt->name, sizeof(mevt->name), "mct_tick%d", cpu);
> -
> evt->name = mevt->name;
> evt->cpumask = cpumask_of(cpu);
> evt->set_next_event = exynos4_tick_set_next_event;
> @@ -567,6 +565,14 @@ static int __init exynos4_timer_interrupts(struct device_node *np,
> for (i = MCT_L0_IRQ; i < nr_irqs; i++)
> mct_irqs[i] = irq_of_parse_and_map(np, i);
>
> + for_each_possible_cpu(cpu) {
> + struct mct_clock_event_device *mevt =
> + per_cpu_ptr(&percpu_mct_tick, cpu);
> +
> + snprintf(mevt->name, sizeof(mevt->name), "mct_tick%d",
> + cpu);
> + }
> +
> if (mct_int_type == MCT_INT_PPI) {
>
> err = request_percpu_irq(mct_irqs[MCT_L0_IRQ],
> --
> 2.49.0.472.ge94155a9ec-goog
>