Message ID | 1387453851-19341-4-git-send-email-vijay.kilari@gmail.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On 12/19/2013 05:50 AM, vijay.kilari@gmail.com wrote: > From: Vijaya Kumar K <Vijaya.Kumar@caviumnetworks.com> > > The function kgdb_breakpoint() sets up break point at > compile time by calling arch_kgdb_breakpoint(); > Though this call is surrounded by wmb() barrier, > the compile can still re-order the break point, > because this scheduling barrier is not a code motion > barrier in gcc. > > Making kgdb_breakpoint() as noinline solves this problem > of code reording around break point instruction and also > avoids problem of being called as inline function from > other places > > More details about discussion on this can be found here > http://comments.gmane.org/gmane.linux.ports.arm.kernel/269732 > > Signed-off-by: Vijaya Kumar K <Vijaya.Kumar@caviumnetworks.com> > Acked-by: Will Deacon <will.deacon@arm.com> Acked-by: Jason Wessel <jason.wessel@windriver.com> Cheers, Jason. > --- > kernel/debug/debug_core.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/kernel/debug/debug_core.c b/kernel/debug/debug_core.c > index 7d2f35e..cf04798 100644 > --- a/kernel/debug/debug_core.c > +++ b/kernel/debug/debug_core.c > @@ -1034,7 +1034,7 @@ int dbg_io_get_char(void) > * otherwise as a quick means to stop program execution and "break" into > * the debugger. > */ > -void kgdb_breakpoint(void) > +noinline void kgdb_breakpoint(void) > { > atomic_inc(&kgdb_setting_breakpoint); > wmb(); /* Sync point before breakpoint */
On Wed, Jan 15, 2014 at 04:44:27PM +0000, Jason Wessel wrote: > On 12/19/2013 05:50 AM, vijay.kilari@gmail.com wrote: > > From: Vijaya Kumar K <Vijaya.Kumar@caviumnetworks.com> > > > > The function kgdb_breakpoint() sets up break point at > > compile time by calling arch_kgdb_breakpoint(); > > Though this call is surrounded by wmb() barrier, > > the compile can still re-order the break point, > > because this scheduling barrier is not a code motion > > barrier in gcc. > > > > Making kgdb_breakpoint() as noinline solves this problem > > of code reording around break point instruction and also > > avoids problem of being called as inline function from > > other places > > > > More details about discussion on this can be found here > > http://comments.gmane.org/gmane.linux.ports.arm.kernel/269732 > > > > Signed-off-by: Vijaya Kumar K <Vijaya.Kumar@caviumnetworks.com> > > Acked-by: Will Deacon <will.deacon@arm.com> > > Acked-by: Jason Wessel <jason.wessel@windriver.com> Thanks Jason! We'll take this series via the arm64 tree. Will
diff --git a/kernel/debug/debug_core.c b/kernel/debug/debug_core.c index 7d2f35e..cf04798 100644 --- a/kernel/debug/debug_core.c +++ b/kernel/debug/debug_core.c @@ -1034,7 +1034,7 @@ int dbg_io_get_char(void) * otherwise as a quick means to stop program execution and "break" into * the debugger. */ -void kgdb_breakpoint(void) +noinline void kgdb_breakpoint(void) { atomic_inc(&kgdb_setting_breakpoint); wmb(); /* Sync point before breakpoint */