The atomic_inc operation of slaves_in_kgdb could be executed on multi-cpus at the same time when kgdb have more than one slave cpu.
Due to the atomic_inc() function do not imply memory barrier, a missing memory barrier here maybe could casue an incorrect value of slaves_in_kgdb, then let kgdb confused. Add a memory barrier before atomic_inc(&slaves_in_kgdb) to avoid that potential problem. Signed-off-by: Dongdong Deng <[email protected]> --- kernel/debug/debug_core.c | 7 +++++-- 1 files changed, 5 insertions(+), 2 deletions(-) diff --git a/kernel/debug/debug_core.c b/kernel/debug/debug_core.c index cefd4a1..bec8af0 100644 --- a/kernel/debug/debug_core.c +++ b/kernel/debug/debug_core.c @@ -468,10 +468,13 @@ static int kgdb_cpu_enter(struct kgdb_state *ks, struct pt_regs *regs, kgdb_info[ks->cpu].enter_kgdb++; kgdb_info[ks->cpu].exception_state |= exception_state; - if (exception_state == DCPU_WANT_MASTER) + if (exception_state == DCPU_WANT_MASTER) { + smp_mb__before_atomic_inc(); atomic_inc(&masters_in_kgdb); - else + } else { + smp_mb__before_atomic_inc(); atomic_inc(&slaves_in_kgdb); + } if (arch_kgdb_ops.disable_hw_break) arch_kgdb_ops.disable_hw_break(regs); -- 1.6.0.4 ------------------------------------------------------------------------------ Increase Visibility of Your 3D Game App & Earn a Chance To Win $500! Tap into the largest installed PC base & get more eyes on your game by optimizing for Intel(R) Graphics Technology. Get started today with the Intel(R) Software Partner Program. Five $500 cash prizes are up for grabs. http://p.sf.net/sfu/intelisp-dev2dev _______________________________________________ Kgdb-bugreport mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/kgdb-bugreport
