Hi Will, On Thu, 3 Apr 2025 at 00:34, Will McVicker <willmcvicker@xxxxxxxxxx> 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@xxxxxxxxxx> > --- 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@xxxxxxxxxx> > 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 >