[PATCH] powernv: Avoid calling trace tlbie in kexec path.
Naveen N. Rao
naveen.n.rao at linux.vnet.ibm.com
Thu Nov 23 06:07:01 AEDT 2017
Mahesh J Salgaonkar wrote:
> From: Mahesh Salgaonkar <mahesh at linux.vnet.ibm.com>
>
> Rebooting into a new kernel with kexec fails in trace_tlbie() which is
> called from native_hpte_clear(). This happens if the running kernel has
> CONFIG_LOCKDEP enabled. With lockdep enabled, the tracepoints always
> execute few RCU checks regardless of whether tracing is on or off.
> We are already in the last phase of kexec sequence in real mode with
> HILE_BE set. At this point the RCU check ends up in RCU_LOCKDEP_WARN and
> causes kexec to fail.
>
> Fix this by not calling trace_tlbie() from native_hpte_clear().
>
> Signed-off-by: Mahesh Salgaonkar <mahesh at linux.vnet.ibm.com>
> Reported-by: Aneesh Kumar K.V <aneesh.kumar at linux.vnet.ibm.com>
> Suggested-by: Michael Ellerman <mpe at ellerman.id.au>
> ---
> arch/powerpc/mm/hash_native_64.c | 15 ++++++++++++---
> 1 file changed, 12 insertions(+), 3 deletions(-)
>
> diff --git a/arch/powerpc/mm/hash_native_64.c b/arch/powerpc/mm/hash_native_64.c
> index 3848af1..640cf56 100644
> --- a/arch/powerpc/mm/hash_native_64.c
> +++ b/arch/powerpc/mm/hash_native_64.c
> @@ -47,7 +47,8 @@
>
> DEFINE_RAW_SPINLOCK(native_tlbie_lock);
>
> -static inline void __tlbie(unsigned long vpn, int psize, int apsize, int ssize)
> +static inline unsigned long ___tlbie(unsigned long vpn, int psize,
> + int apsize, int ssize)
> {
> unsigned long va;
> unsigned int penc;
> @@ -100,7 +101,15 @@ static inline void __tlbie(unsigned long vpn, int psize, int apsize, int ssize)
> : "memory");
> break;
> }
> - trace_tlbie(0, 0, va, 0, 0, 0, 0);
Does it help if you use the _rcuidle variant instead, to turn off all
rcu checks for tracing __tlbie()?
trace_tlbie_rcuidle(0, 0, va, 0, 0, 0, 0);
- Naveen
More information about the Linuxppc-dev
mailing list