• Guo Ren's avatar
    riscv: Fixup static_obj() fail · 6184358d
    Guo Ren authored
    When enable LOCKDEP, static_obj() will cause error. Because some
    __initdata static variables is before _stext:
    
    static int static_obj(const void *obj)
    {
            unsigned long start = (unsigned long) &_stext,
                          end   = (unsigned long) &_end,
                          addr  = (unsigned long) obj;
    
            /*
             * static variable?
             */
            if ((addr >= start) && (addr < end))
                    return 1;
    
    [    0.067192] INFO: trying to register non-static key.
    [    0.067325] the code is fine but needs lockdep annotation.
    [    0.067449] turning off the locking correctness validator.
    [    0.067718] CPU: 0 PID: 0 Comm: swapper/0 Not tainted 5.7.0-rc7-dirty #44
    [    0.067945] Call Trace:
    [    0.068369] [<ffffffe00020323c>] walk_stackframe+0x0/0xa4
    [    0.068506] [<ffffffe000203422>] show_stack+0x2a/0x34
    [    0.068631] [<ffffffe000521e4e>] dump_stack+0x94/0xca
    [    0.068757] [<ffffffe000255a4e>] register_lock_class+0x5b8/0x5bc
    [    0.068969] [<ffffffe000255abe>] __lock_acquire+0x6c/0x1d5c
    [    0.069101] [<ffffffe0002550fe>] lock_acquire+0xae/0x312
    [    0.069228] [<ffffffe000989a8e>] _raw_spin_lock_irqsave+0x40/0x5a
    [    0.069357] [<ffffffe000247c64>] complete+0x1e/0x50
    [    0.069479] [<ffffffe000984c38>] rest_init+0x1b0/0x28a
    [    0.069660] [<ffffffe0000016a2>] 0xffffffe0000016a2
    [    0.069779] [<ffffffe000001b84>] 0xffffffe000001b84
    [    0.069953] [<ffffffe000001092>] 0xffffffe000001092
    
    static __initdata DECLARE_COMPLETION(kthreadd_done);
    
    noinline void __ref rest_init(void)
    {
    	...
    	complete(&kthreadd_done);
    Signed-off-by: default avatarGuo Ren <guoren@linux.alibaba.com>
    Signed-off-by: default avatarPalmer Dabbelt <palmerdabbelt@google.com>
    6184358d
vmlinux.lds.S 1.67 KB