Re: [PATCH] powerpc: setup_64: hack around kcov + devicetree limitations
From: Daniel Axtens <hidden>
Date: 2020-02-12 05:16:59
So: create a fake task and preload it into our fake PACA. Load the paca just into r13 (local_paca) before we call into dt_cpu_ftrs_init. This fake task persists just for the first part of the setup process before we set up the real PACAs.
mpe has asked for this to be fixed in a different way, so I'll respin with that change. Daniel
quoted hunk ↗ jump to hunk
Translations get switched on once we leave early_setup, so I think we'd already catch any other cases where the PACA or task aren't set up. Fixes: fb0b0a73b223 ("powerpc: Enable kcov") Cc: Andrew Donnellan <redacted> Signed-off-by: Daniel Axtens <redacted> --- I haven't made the setup conditional on kcov being compiled in, but I guess I could if we think it's worth it? --- arch/powerpc/kernel/setup_64.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-)diff --git a/arch/powerpc/kernel/setup_64.c b/arch/powerpc/kernel/setup_64.c index e05e6dd67ae6..26f1b8539f8e 100644 --- a/arch/powerpc/kernel/setup_64.c +++ b/arch/powerpc/kernel/setup_64.c@@ -281,7 +281,18 @@ void __init record_spr_defaults(void) void __init early_setup(unsigned long dt_ptr) { - static __initdata struct paca_struct boot_paca; + /* + * We need to get something valid into local_paca/r13 asap if we + * are using kcov. dt_cpu_ftrs_init will call coverage-enabled code + * in the generic dt library, and that will try to call in_task(). + * We need a minimal paca that at least provides a valid __current. + * We can't use the usual initialise/setup/fixup path as that relies + * on a CPU feature. + */ + static __initdata struct task_struct task = {}; + static __initdata struct paca_struct boot_paca = { .__current = &task }; + + local_paca = &boot_paca; /* -------- printk is _NOT_ safe to use here ! ------- */-- 2.20.1