diff mbox
Message ID | 1454971764-30720-1-git-send-email-yang.shi@linaro.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Commit Message
Yang Shi Feb. 8, 2016, 10:49 p.m. UTC
BUG: sleeping function called from invalid context at kernel/locking/rtmutex.c:917in_atomic(): 1, irqs_disabled(): 128, pid: 383, name: shPreemption disabled at:[<ffff800000124c18>] kgdb_cpu_enter+0x158/0x6b8CPU: 3 PID: 383 Comm: sh Tainted: G W 4.1.13-rt13 #2Hardware name: Freescale Layerscape 2085a RDB Board (DT)Call trace:[<ffff8000000885e8>] dump_backtrace+0x0/0x128[<ffff800000088734>] show_stack+0x24/0x30[<ffff80000079a7c4>] dump_stack+0x80/0xa0[<ffff8000000bd324>] ___might_sleep+0x18c/0x1a0[<ffff8000007a20ac>] __rt_spin_lock+0x2c/0x40[<ffff8000007a2268>] rt_read_lock+0x40/0x58[<ffff800000085328>] single_step_handler+0x38/0xd8[<ffff800000082368>] do_debug_exception+0x58/0xb8Exception stack(0xffff80834a1e7c80 to 0xffff80834a1e7da0)7c80: ffffff9c ffffffff 92c23ba0 0000ffff 4a1e7e40 ffff8083 001bfcc4 ffff80007ca0: f2000400 00000000 00000000 00000000 4a1e7d80 ffff8083 0049501c ffff80007cc0: 00005402 00000000 00aaa210 ffff8000 4a1e7ea0 ffff8083 000833f4 ffff80007ce0: ffffff9c ffffffff 92c23ba0 0000ffff 4a1e7ea0 ffff8083 001bfcc0 ffff80007d00: 4a0fc400 ffff8083 00005402 00000000 4a1e7d40 ffff8083 00490324 ffff80007d20: ffffff9c 00000000 92c23ba0 0000ffff 000a0000 00000000 00000000 000000007d40: 00000008 00000000 00080000 00000000 92c23b8b 0000ffff 92c23b8e 0000ffff7d60: 00000038 00000000 00001cb2 00000000 00000005 00000000 92d7b498 0000ffff7d80: 01010101 01010101 92be9000 0000ffff 00000000 00000000 00000030 00000000[<ffff8000000833f4>] el1_dbg+0x18/0x6cThis issue is similar with 62c6c61("arm64: replace read_lock to rcu lock incall_break_hook"), but comes to single_step_handler.This also solves kgdbts boot test silent hang issue on 4.4 -rt kernel.Signed-off-by: Yang Shi <yang.shi@linaro.org>--- arch/arm64/kernel/debug-monitors.c | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-)
Comments
Sebastian Andrzej Siewior Feb. 9, 2016, 9:02 a.m. UTC | #1
* Yang Shi | 2016-02-08 14:49:24 [-0800]:>BUG: sleeping function called from invalid context at kernel/locking/rtmutex.c:917…>This issue is similar with 62c6c61("arm64: replace read_lock to rcu lock in>call_break_hook"), but comes to single_step_handler.>>This also solves kgdbts boot test silent hang issue on 4.4 -rt kernel.I am going to apply this for -RT.Sebastian
Will Deacon Feb. 9, 2016, 2:54 p.m. UTC | #2
On Mon, Feb 08, 2016 at 02:49:24PM -0800, Yang Shi wrote:> BUG: sleeping function called from invalid context at kernel/locking/rtmutex.c:917> in_atomic(): 1, irqs_disabled(): 128, pid: 383, name: sh> Preemption disabled at:[<ffff800000124c18>] kgdb_cpu_enter+0x158/0x6b8> > CPU: 3 PID: 383 Comm: sh Tainted: G W 4.1.13-rt13 #2> Hardware name: Freescale Layerscape 2085a RDB Board (DT)> Call trace:> [<ffff8000000885e8>] dump_backtrace+0x0/0x128> [<ffff800000088734>] show_stack+0x24/0x30> [<ffff80000079a7c4>] dump_stack+0x80/0xa0> [<ffff8000000bd324>] ___might_sleep+0x18c/0x1a0> [<ffff8000007a20ac>] __rt_spin_lock+0x2c/0x40> [<ffff8000007a2268>] rt_read_lock+0x40/0x58> [<ffff800000085328>] single_step_handler+0x38/0xd8> [<ffff800000082368>] do_debug_exception+0x58/0xb8> Exception stack(0xffff80834a1e7c80 to 0xffff80834a1e7da0)> 7c80: ffffff9c ffffffff 92c23ba0 0000ffff 4a1e7e40 ffff8083 001bfcc4 ffff8000> 7ca0: f2000400 00000000 00000000 00000000 4a1e7d80 ffff8083 0049501c ffff8000> 7cc0: 00005402 00000000 00aaa210 ffff8000 4a1e7ea0 ffff8083 000833f4 ffff8000> 7ce0: ffffff9c ffffffff 92c23ba0 0000ffff 4a1e7ea0 ffff8083 001bfcc0 ffff8000> 7d00: 4a0fc400 ffff8083 00005402 00000000 4a1e7d40 ffff8083 00490324 ffff8000> 7d20: ffffff9c 00000000 92c23ba0 0000ffff 000a0000 00000000 00000000 00000000> 7d40: 00000008 00000000 00080000 00000000 92c23b8b 0000ffff 92c23b8e 0000ffff> 7d60: 00000038 00000000 00001cb2 00000000 00000005 00000000 92d7b498 0000ffff> 7d80: 01010101 01010101 92be9000 0000ffff 00000000 00000000 00000030 00000000> [<ffff8000000833f4>] el1_dbg+0x18/0x6c> > This issue is similar with 62c6c61("arm64: replace read_lock to rcu lock in> call_break_hook"), but comes to single_step_handler.> > This also solves kgdbts boot test silent hang issue on 4.4 -rt kernel.> > Signed-off-by: Yang Shi <yang.shi@linaro.org>Acked-by: Will Deacon <will.deacon@arm.com>Will
Steven Rostedt Feb. 9, 2016, 3:07 p.m. UTC | #3
On Tue, 9 Feb 2016 14:54:26 +0000Will Deacon <will.deacon@arm.com> wrote:> Acked-by: Will Deacon <will.deacon@arm.com>Will,The patch looks good to me. Do you want to take it through your tree?It benefits mainline too as a rcu_read_lock() is more efficient thanrwlocks. Although I will say this is a slow path anyway.-- Steve
Will Deacon Feb. 9, 2016, 4:04 p.m. UTC | #4
On Tue, Feb 09, 2016 at 10:07:58AM -0500, Steven Rostedt wrote:> On Tue, 9 Feb 2016 14:54:26 +0000> Will Deacon <will.deacon@arm.com> wrote:> > > > Acked-by: Will Deacon <will.deacon@arm.com>> > Will,Hi Steve,> The patch looks good to me. Do you want to take it through your tree?> > It benefits mainline too as a rcu_read_lock() is more efficient than> rwlocks. Although I will say this is a slow path anyway.I was thinking that Catalin would queue it for 4.6 in the arm64 tree,since that's probably easiest in case any unlikely conflicts crop up.Will
Steven Rostedt Feb. 9, 2016, 4:08 p.m. UTC | #5
On Tue, 9 Feb 2016 16:04:42 +0000Will Deacon <will.deacon@arm.com> wrote: > > The patch looks good to me. Do you want to take it through your tree?> > > > It benefits mainline too as a rcu_read_lock() is more efficient than> > rwlocks. Although I will say this is a slow path anyway. > > I was thinking that Catalin would queue it for 4.6 in the arm64 tree,> since that's probably easiest in case any unlikely conflicts crop up.Oh, OK.That's fine. I just didn't want you to think that the RT folks weregoing to pull it in for mainline.-- Steve
Catalin Marinas Feb. 9, 2016, 4:24 p.m. UTC | #6
On Tue, Feb 09, 2016 at 04:04:42PM +0000, Will Deacon wrote:> On Tue, Feb 09, 2016 at 10:07:58AM -0500, Steven Rostedt wrote:> > On Tue, 9 Feb 2016 14:54:26 +0000> > Will Deacon <will.deacon@arm.com> wrote:> > > > > > > Acked-by: Will Deacon <will.deacon@arm.com>> > > The patch looks good to me. Do you want to take it through your tree?> > > > It benefits mainline too as a rcu_read_lock() is more efficient than> > rwlocks. Although I will say this is a slow path anyway.> > I was thinking that Catalin would queue it for 4.6 in the arm64 tree,> since that's probably easiest in case any unlikely conflicts crop up.Queued.
diff mbox
Patch
diff --git a/arch/arm64/kernel/debug-monitors.c b/arch/arm64/kernel/debug-monitors.cindex 8aee3ae..c1492ba 100644--- a/arch/arm64/kernel/debug-monitors.c+++ b/arch/arm64/kernel/debug-monitors.c@@ -186,20 +186,21 @@ static void clear_regs_spsr_ss(struct pt_regs *regs) /* EL1 Single Step Handler hooks */ static LIST_HEAD(step_hook);-static DEFINE_RWLOCK(step_hook_lock);+static DEFINE_SPINLOCK(step_hook_lock); void register_step_hook(struct step_hook *hook) {-write_lock(&step_hook_lock);-list_add(&hook->node, &step_hook);-write_unlock(&step_hook_lock);+spin_lock(&step_hook_lock);+list_add_rcu(&hook->node, &step_hook);+spin_unlock(&step_hook_lock); } void unregister_step_hook(struct step_hook *hook) {-write_lock(&step_hook_lock);-list_del(&hook->node);-write_unlock(&step_hook_lock);+spin_lock(&step_hook_lock);+list_del_rcu(&hook->node);+spin_unlock(&step_hook_lock);+synchronize_rcu(); } /*@@ -213,15 +214,15 @@ static int call_step_hook(struct pt_regs *regs, unsigned int esr) struct step_hook *hook; int retval = DBG_HOOK_ERROR; -read_lock(&step_hook_lock);+rcu_read_lock(); -list_for_each_entry(hook, &step_hook, node){+list_for_each_entry_rcu(hook, &step_hook, node){ retval = hook->fn(regs, esr); if (retval == DBG_HOOK_HANDLED) break; } -read_unlock(&step_hook_lock);+rcu_read_unlock(); return retval; }