Christophe Leroy <christophe.leroy@xxxxxx> writes: > [Backport of upstream commit b45ba4a51cde29b2939365ef0c07ad34c8321789] > > On powerpc32, patch_instruction() is called by apply_feature_fixups() > which is called from early_init() > > There is the following note in front of early_init(): > * Note that the kernel may be running at an address which is different > * from the address that it was linked at, so we must use RELOC/PTRRELOC > * to access static data (including strings). -- paulus > > Therefore init_mem_is_free must be accessed with PTRRELOC() > > Fixes: 1c38a84d4586 ("powerpc: Avoid code patching freed init sections") > Link: https://bugzilla.kernel.org/show_bug.cgi?id=203597 > Signed-off-by: Christophe Leroy <christophe.leroy@xxxxxx> > > --- > Can't apply the upstream commit as such due to several of other unrelated stuff > like STRICT_KERNEL_RWX which are missing for instance. > So instead, using same approach as for commit 252eb55816a6f69ef9464cad303cdb3326cdc61d Yeah this looks good to me. Though should we keep the same subject as the upstream commit this is sort of a backport of? That might make it simpler for people who are trying to keep track of things? ie. "powerpc/lib: fix book3s/32 boot failure due to code patching" cheers > diff --git a/arch/powerpc/lib/code-patching.c b/arch/powerpc/lib/code-patching.c > index 14535ad4cdd1..c312955977ce 100644 > --- a/arch/powerpc/lib/code-patching.c > +++ b/arch/powerpc/lib/code-patching.c > @@ -23,7 +23,7 @@ int patch_instruction(unsigned int *addr, unsigned int instr) > int err; > > /* Make sure we aren't patching a freed init section */ > - if (init_mem_is_free && init_section_contains(addr, 4)) { > + if (*PTRRELOC(&init_mem_is_free) && init_section_contains(addr, 4)) { > pr_debug("Skipping init section patching addr: 0x%px\n", addr); > return 0; > } > -- > 2.13.3