All of lore.kernel.org
 help / color / mirror / Atom feed
From: Atish Patra <atishp@atishpatra.org>
To: Guo Ren <guoren@kernel.org>
Cc: Palmer Dabbelt <palmerdabbelt@google.com>,
	linux-riscv <linux-riscv@lists.infradead.org>,
	Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
	Andreas Schwab <schwab@linux-m68k.org>,
	aurelien@aurel32.net, Guo Ren <guoren@linux.alibaba.com>
Subject: Re: [PATCH 2/2] riscv: Fixup static_obj() fail v2
Date: Fri, 9 Oct 2020 14:16:00 -0700	[thread overview]
Message-ID: <CAOnJCUKcs8quZdHDx6SZ0USbOifE1D_zeL7XaGqMr+-DuN1MwQ@mail.gmail.com> (raw)
In-Reply-To: <CAJF2gTS2fTQNYAtK=FfVHR8g49vfm7mQPe72xD+RRpa4C3T9Dw@mail.gmail.com>

On Thu, Oct 8, 2020 at 6:53 PM Guo Ren <guoren@kernel.org> wrote:
>
> On Thu, Oct 8, 2020 at 11:54 AM Palmer Dabbelt <palmerdabbelt@google.com> wrote:
> >
> > On Wed, 07 Oct 2020 08:08:33 PDT (-0700), guoren@kernel.org wrote:
> > > From: Guo Ren <guoren@linux.alibaba.com>
> > >
> > > v1 is commit: 6184358da0004c8fd940afda6c0a0fa4027dc911 which has
> > > been reverted.
> > >
> > > When enable LOCKDEP, static_obj() will cause error:
> > >
> > > [    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
> > >
> > > 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;
> > >
> > >       if (arch_is_kernel_data(addr))
> > >               return 1;
> > >
> > > We could implement arch_is_kernel_data to fixup it.
> > >
> > > Link: https://lore.kernel.org/linux-riscv/1593266228-61125-1-git-send-email-guoren@kernel.org/T/#t
> > > Signed-off-by: Guo Ren <guoren@linux.alibaba.com>
> > > Reported-by: Aurelien Jarno <aurelien@aurel32.net>
> > > Cc: Palmer Dabbelt <palmerdabbelt@google.com>
> > > Cc: Atish Patra <atishp@atishpatra.org>
> > > Cc: Andreas Schwab <schwab@linux-m68k.org>
> > > Cc: Aurelien Jarno <aurelien@aurel32.net>
> > > ---
> > >  arch/riscv/include/asm/sections.h | 20 ++++++++++++++++++++
> > >  arch/riscv/kernel/setup.c         |  9 +++++++++
> > >  2 files changed, 29 insertions(+)
> > >  create mode 100644 arch/riscv/include/asm/sections.h
> > >
> > > diff --git a/arch/riscv/include/asm/sections.h b/arch/riscv/include/asm/sections.h
> > > new file mode 100644
> > > index 00000000..2317b9e
> > > --- /dev/null
> > > +++ b/arch/riscv/include/asm/sections.h
> > > @@ -0,0 +1,20 @@
> > > +/* SPDX-License-Identifier: GPL-2.0-only */
> > > +
> > > +#ifndef _ASM_RISCV_SECTIONS_H
> > > +#define _ASM_RISCV_SECTIONS_H
> > > +
> > > +#define arch_is_kernel_data arch_is_kernel_data
> > > +
> > > +#include <asm-generic/sections.h>
> > > +
> > > +extern bool init_mem_is_free;
> > > +
> > > +static inline int arch_is_kernel_data(unsigned long addr)
> > > +{
> > > +     if (init_mem_is_free)
> > > +             return 0;
> > > +
> > > +     return addr >= (unsigned long)__init_begin &&
> > > +             addr < (unsigned long)__init_end;
> > > +}
> > > +#endif /* _ASM_RISCV_SECTIONS_H */
> > > diff --git a/arch/riscv/kernel/setup.c b/arch/riscv/kernel/setup.c
> > > index 2c6dd32..9ebd5eb4 100644
> > > --- a/arch/riscv/kernel/setup.c
> > > +++ b/arch/riscv/kernel/setup.c
> > > @@ -17,6 +17,7 @@
> > >  #include <linux/sched/task.h>
> > >  #include <linux/swiotlb.h>
> > >  #include <linux/smp.h>
> > > +#include <linux/poison.h>
> > >
> > >  #include <asm/cpu_ops.h>
> > >  #include <asm/setup.h>
> > > @@ -112,3 +113,11 @@ static int __init topology_init(void)
> > >       return 0;
> > >  }
> > >  subsys_initcall(topology_init);
> > > +
> > > +bool init_mem_is_free = false;
> > > +
> > > +void free_initmem(void)
> > > +{
> > > +     free_initmem_default(POISON_FREE_INITMEM);
> > > +     init_mem_is_free = true;
> > > +}
> >
> > I'm a bit confused as to what you're trying to do here.  Yesterday I got
> > another version of this patch set that moves init data around, today a
> > different one.  Yesterday's is tested and simpler, and given it's so late in
> > the process I'm inclined to take that as I don't want to break anything.
> >
> > Right now I have
> >
> > 84814460eef9 ("riscv: Fixup bootup failure with HARDENED_USERCOPY")
> > a78c6f5956a9 ("RISC-V: Make sure memblock reserves the memory containing DT")
> > 549738f15da0 ("Linux 5.9-rc8")
> >
> > Unless there's some functional bug, that's what I'm going to send out for 5.9
> > -- I'm not all that worried about lacking the ability to free init data.  The
> > above seems like fine 5.10 material.
> >
> > Let me know if I'm missing something here.
> 84814460eef9 could resolve the problem and Atish ask for any other
> idea? So It's another choice, I forgot RFC in prefix.
>

I prefer this fix as it is cleaner and doesn't waste memory. I have
sent another series
on top of this fix, that addresses the init section protections we
talked about. All of these are definitely
next merge window material.

> 6184358da0004c8fd940afda6c0a0fa4027dc911("riscv: Fixup static_obj()
> fail") is a sloppy patch that introduces another problem. Sorry about
> that.
>
> --
> Best Regards
>  Guo Ren
>
> ML: https://lore.kernel.org/linux-csky/



-- 
Regards,
Atish

WARNING: multiple messages have this Message-ID (diff)
From: Atish Patra <atishp@atishpatra.org>
To: Guo Ren <guoren@kernel.org>
Cc: Guo Ren <guoren@linux.alibaba.com>,
	Palmer Dabbelt <palmerdabbelt@google.com>,
	Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
	Andreas Schwab <schwab@linux-m68k.org>,
	linux-riscv <linux-riscv@lists.infradead.org>,
	aurelien@aurel32.net
Subject: Re: [PATCH 2/2] riscv: Fixup static_obj() fail v2
Date: Fri, 9 Oct 2020 14:16:00 -0700	[thread overview]
Message-ID: <CAOnJCUKcs8quZdHDx6SZ0USbOifE1D_zeL7XaGqMr+-DuN1MwQ@mail.gmail.com> (raw)
In-Reply-To: <CAJF2gTS2fTQNYAtK=FfVHR8g49vfm7mQPe72xD+RRpa4C3T9Dw@mail.gmail.com>

On Thu, Oct 8, 2020 at 6:53 PM Guo Ren <guoren@kernel.org> wrote:
>
> On Thu, Oct 8, 2020 at 11:54 AM Palmer Dabbelt <palmerdabbelt@google.com> wrote:
> >
> > On Wed, 07 Oct 2020 08:08:33 PDT (-0700), guoren@kernel.org wrote:
> > > From: Guo Ren <guoren@linux.alibaba.com>
> > >
> > > v1 is commit: 6184358da0004c8fd940afda6c0a0fa4027dc911 which has
> > > been reverted.
> > >
> > > When enable LOCKDEP, static_obj() will cause error:
> > >
> > > [    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
> > >
> > > 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;
> > >
> > >       if (arch_is_kernel_data(addr))
> > >               return 1;
> > >
> > > We could implement arch_is_kernel_data to fixup it.
> > >
> > > Link: https://lore.kernel.org/linux-riscv/1593266228-61125-1-git-send-email-guoren@kernel.org/T/#t
> > > Signed-off-by: Guo Ren <guoren@linux.alibaba.com>
> > > Reported-by: Aurelien Jarno <aurelien@aurel32.net>
> > > Cc: Palmer Dabbelt <palmerdabbelt@google.com>
> > > Cc: Atish Patra <atishp@atishpatra.org>
> > > Cc: Andreas Schwab <schwab@linux-m68k.org>
> > > Cc: Aurelien Jarno <aurelien@aurel32.net>
> > > ---
> > >  arch/riscv/include/asm/sections.h | 20 ++++++++++++++++++++
> > >  arch/riscv/kernel/setup.c         |  9 +++++++++
> > >  2 files changed, 29 insertions(+)
> > >  create mode 100644 arch/riscv/include/asm/sections.h
> > >
> > > diff --git a/arch/riscv/include/asm/sections.h b/arch/riscv/include/asm/sections.h
> > > new file mode 100644
> > > index 00000000..2317b9e
> > > --- /dev/null
> > > +++ b/arch/riscv/include/asm/sections.h
> > > @@ -0,0 +1,20 @@
> > > +/* SPDX-License-Identifier: GPL-2.0-only */
> > > +
> > > +#ifndef _ASM_RISCV_SECTIONS_H
> > > +#define _ASM_RISCV_SECTIONS_H
> > > +
> > > +#define arch_is_kernel_data arch_is_kernel_data
> > > +
> > > +#include <asm-generic/sections.h>
> > > +
> > > +extern bool init_mem_is_free;
> > > +
> > > +static inline int arch_is_kernel_data(unsigned long addr)
> > > +{
> > > +     if (init_mem_is_free)
> > > +             return 0;
> > > +
> > > +     return addr >= (unsigned long)__init_begin &&
> > > +             addr < (unsigned long)__init_end;
> > > +}
> > > +#endif /* _ASM_RISCV_SECTIONS_H */
> > > diff --git a/arch/riscv/kernel/setup.c b/arch/riscv/kernel/setup.c
> > > index 2c6dd32..9ebd5eb4 100644
> > > --- a/arch/riscv/kernel/setup.c
> > > +++ b/arch/riscv/kernel/setup.c
> > > @@ -17,6 +17,7 @@
> > >  #include <linux/sched/task.h>
> > >  #include <linux/swiotlb.h>
> > >  #include <linux/smp.h>
> > > +#include <linux/poison.h>
> > >
> > >  #include <asm/cpu_ops.h>
> > >  #include <asm/setup.h>
> > > @@ -112,3 +113,11 @@ static int __init topology_init(void)
> > >       return 0;
> > >  }
> > >  subsys_initcall(topology_init);
> > > +
> > > +bool init_mem_is_free = false;
> > > +
> > > +void free_initmem(void)
> > > +{
> > > +     free_initmem_default(POISON_FREE_INITMEM);
> > > +     init_mem_is_free = true;
> > > +}
> >
> > I'm a bit confused as to what you're trying to do here.  Yesterday I got
> > another version of this patch set that moves init data around, today a
> > different one.  Yesterday's is tested and simpler, and given it's so late in
> > the process I'm inclined to take that as I don't want to break anything.
> >
> > Right now I have
> >
> > 84814460eef9 ("riscv: Fixup bootup failure with HARDENED_USERCOPY")
> > a78c6f5956a9 ("RISC-V: Make sure memblock reserves the memory containing DT")
> > 549738f15da0 ("Linux 5.9-rc8")
> >
> > Unless there's some functional bug, that's what I'm going to send out for 5.9
> > -- I'm not all that worried about lacking the ability to free init data.  The
> > above seems like fine 5.10 material.
> >
> > Let me know if I'm missing something here.
> 84814460eef9 could resolve the problem and Atish ask for any other
> idea? So It's another choice, I forgot RFC in prefix.
>

I prefer this fix as it is cleaner and doesn't waste memory. I have
sent another series
on top of this fix, that addresses the init section protections we
talked about. All of these are definitely
next merge window material.

> 6184358da0004c8fd940afda6c0a0fa4027dc911("riscv: Fixup static_obj()
> fail") is a sloppy patch that introduces another problem. Sorry about
> that.
>
> --
> Best Regards
>  Guo Ren
>
> ML: https://lore.kernel.org/linux-csky/



-- 
Regards,
Atish

_______________________________________________
linux-riscv mailing list
linux-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-riscv

  reply	other threads:[~2020-10-09 21:16 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-10-07 15:08 [PATCH 1/2] Revert "riscv: Fixup static_obj() fail" guoren
2020-10-07 15:08 ` guoren
2020-10-07 15:08 ` [PATCH 2/2] riscv: Fixup static_obj() fail v2 guoren
2020-10-07 15:08   ` guoren
2020-10-07 19:46   ` Atish Patra
2020-10-07 19:46     ` Atish Patra
2020-10-08  2:30     ` Guo Ren
2020-10-08  2:30       ` Guo Ren
2020-10-08  3:54   ` Palmer Dabbelt
2020-10-08  3:54     ` Palmer Dabbelt
2020-10-08 17:57     ` Atish Patra
2020-10-08 17:57       ` Atish Patra
2020-10-09  1:53     ` Guo Ren
2020-10-09  1:53       ` Guo Ren
2020-10-09 21:16       ` Atish Patra [this message]
2020-10-09 21:16         ` Atish Patra
2020-10-09 21:23         ` Palmer Dabbelt
2020-10-09 21:23           ` Palmer Dabbelt
2020-10-07 18:52 ` [PATCH 1/2] Revert "riscv: Fixup static_obj() fail" Atish Patra
2020-10-07 18:52   ` Atish Patra

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=CAOnJCUKcs8quZdHDx6SZ0USbOifE1D_zeL7XaGqMr+-DuN1MwQ@mail.gmail.com \
    --to=atishp@atishpatra.org \
    --cc=aurelien@aurel32.net \
    --cc=guoren@kernel.org \
    --cc=guoren@linux.alibaba.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-riscv@lists.infradead.org \
    --cc=palmerdabbelt@google.com \
    --cc=schwab@linux-m68k.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.