All of lore.kernel.org
 help / color / mirror / Atom feed
From: will.deacon@arm.com (Will Deacon)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH] arm64: mm: Add trace_irqflags annotations to do_debug_exception()
Date: Tue, 29 Mar 2016 16:06:50 +0100	[thread overview]
Message-ID: <20160329150650.GE6745@arm.com> (raw)
In-Reply-To: <1458580446-32474-1-git-send-email-james.morse@arm.com>

On Mon, Mar 21, 2016 at 05:14:06PM +0000, James Morse wrote:
> With CONFIG_PROVE_LOCKING, CONFIG_DEBUG_LOCKDEP and CONFIG_TRACE_IRQFLAGS
> enabled, lockdep will compare current->hardirqs_enabled with the flags from
> local_irq_save().
> 
> When a debug exception occurs, interrupts are disabled in entry.S, but
> lockdep isn't told, resulting in:
> DEBUG_LOCKS_WARN_ON(current->hardirqs_enabled)
> ------------[ cut here ]------------
> WARNING: at ../kernel/locking/lockdep.c:3523
> Modules linked in:
> CPU: 3 PID: 1752 Comm: perf Not tainted 4.5.0-rc4+ #2204
> Hardware name: ARM Juno development board (r1) (DT)
> task: ffffffc974868000 ti: ffffffc975f40000 task.ti: ffffffc975f40000
> PC is at check_flags.part.35+0x17c/0x184
> LR is at check_flags.part.35+0x17c/0x184
> pc : [<ffffff80080fc93c>] lr : [<ffffff80080fc93c>] pstate: 600003c5
> [...]
> ---[ end trace 74631f9305ef5020 ]---
> Call trace:
> [<ffffff80080fc93c>] check_flags.part.35+0x17c/0x184
> [<ffffff80080ffe30>] lock_acquire+0xa8/0xc4
> [<ffffff8008093038>] breakpoint_handler+0x118/0x288
> [<ffffff8008082434>] do_debug_exception+0x3c/0xa8
> [<ffffff80080854b4>] el1_dbg+0x18/0x6c
> [<ffffff80081e82f4>] do_filp_open+0x64/0xdc
> [<ffffff80081d6e60>] do_sys_open+0x140/0x204
> [<ffffff80081d6f58>] SyS_openat+0x10/0x18
> [<ffffff8008085d30>] el0_svc_naked+0x24/0x28
> possible reason: unannotated irqs-off.
> irq event stamp: 65857
> hardirqs last  enabled at (65857): [<ffffff80081fb1c0>] lookup_mnt+0xf4/0x1b4
> hardirqs last disabled at (65856): [<ffffff80081fb188>] lookup_mnt+0xbc/0x1b4
> softirqs last  enabled at (65790): [<ffffff80080bdca4>] __do_softirq+0x1f8/0x290
> softirqs last disabled at (65757): [<ffffff80080be038>] irq_exit+0x9c/0xd0
> 
> This patch adds the annotations to do_debug_exception(), while trying not
> to call trace_hardirqs_off() if el1_dbg() interrupted a task that already
> had irqs disabled.
> 
> Signed-off-by: James Morse <james.morse@arm.com>
> ---
>  arch/arm64/mm/fault.c | 33 +++++++++++++++++++++++----------
>  1 file changed, 23 insertions(+), 10 deletions(-)
> 
> diff --git a/arch/arm64/mm/fault.c b/arch/arm64/mm/fault.c
> index 44e56de23f79..d8b9c1da2630 100644
> --- a/arch/arm64/mm/fault.c
> +++ b/arch/arm64/mm/fault.c
> @@ -548,20 +548,33 @@ asmlinkage int __exception do_debug_exception(unsigned long addr,
>  {
>  	const struct fault_info *inf = debug_fault_info + DBG_ESR_EVT(esr);
>  	struct siginfo info;
> +	int rv;
>  
> -	if (!inf->fn(addr, esr, regs))
> -		return 1;
> +	/*
> +	 * If we came in from el0_dbg, we disabled irqs. From el1_dbg,
> +	 * we need to test pstate.
> +	 */
> +	if (user_mode(regs) || !(regs->pstate & PSR_I_BIT))
> +		trace_hardirqs_off();

Can you use interrupts_enabled(regs) for this?

Will

  reply	other threads:[~2016-03-29 15:06 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-03-21 17:14 [PATCH] arm64: mm: Add trace_irqflags annotations to do_debug_exception() James Morse
2016-03-29 15:06 ` Will Deacon [this message]
2016-04-13 12:37   ` James Morse

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=20160329150650.GE6745@arm.com \
    --to=will.deacon@arm.com \
    --cc=linux-arm-kernel@lists.infradead.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.