Messages in this thread | | | Date | Mon, 25 Nov 2019 16:01:13 +1100 | Subject | Re: lockdep warning while booting POWER9 PowerNV | From | Michael Ellerman <> |
| |
On 25 November 2019 12:12:01 pm AEDT, Daniel Axtens <dja@axtens.net> wrote: >Hi Michael, > >>>> Once in a while, booting an IBM POWER9 PowerNV system (8335-GTH) >would generate >>>> a warning in lockdep_register_key() at, >>>> >>>> if (WARN_ON_ONCE(static_obj(key))) >>>> >>>> because >>>> >>>> key = 0xc0000000019ad118 >>>> &_stext = 0xc000000000000000 >>>> &_end = 0xc0000000049d0000 >>>> >>>> i.e., it will cause static_obj() returns 1. >>> >>> (back from a trip) >>> >>> Hi Qian, >>> >>> Does this mean that on POWER9 it can happen that a dynamically >allocated >>> object has an address that falls between &_stext and &_end? >> >> I thought that was true on all arches due to initmem, but seems not. >> >> I guess we have the same problem as s390 and we need to define >> arch_is_kernel_initmem_freed(). >> >> Qian, can you try this: >> >> diff --git a/arch/powerpc/include/asm/sections.h >b/arch/powerpc/include/asm/sections.h >> index 4a1664a8658d..616b1b7b7e52 100644 >> --- a/arch/powerpc/include/asm/sections.h >> +++ b/arch/powerpc/include/asm/sections.h >> @@ -5,8 +5,22 @@ >> >> #include <linux/elf.h> >> #include <linux/uaccess.h> >> + >> +#define arch_is_kernel_initmem_freed arch_is_kernel_initmem_freed >> + >> #include <asm-generic/sections.h> >> >> +extern bool init_mem_is_free; >> + >> +static inline int arch_is_kernel_initmem_freed(unsigned long addr) >> +{ >> + if (!init_mem_is_free) >> + return 0; >> + >> + return addr >= (unsigned long)__init_begin && >> + addr < (unsigned long)__init_end; >> +} >> + >> extern char __head_end[]; >> >> #ifdef __powerpc64__ >> > >This also fixes the following syzkaller bug: >https://syzkaller-ppc64.appspot.com/bug?id=cfdf75cd985012d0124cd41e6fa095d33e7d0f6b >https://github.com/linuxppc/issues/issues/284 > >Would you like me to do up a nice commit message for it?
That'd be great, thanks.
cheers
| |