Commit 7c3078b6 authored by Jason Wessel's avatar Jason Wessel Committed by Ingo Molnar

kgdb: clocksource watchdog

In order to not trip the clocksource watchdog, kgdb must touch the
clocksource watchdog on the return to normal system run state.
Signed-off-by: default avatarJason Wessel <jason.wessel@windriver.com>
Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
parent d3597524
...@@ -216,6 +216,7 @@ static inline void clocksource_calculate_interval(struct clocksource *c, ...@@ -216,6 +216,7 @@ static inline void clocksource_calculate_interval(struct clocksource *c,
/* used to install a new clocksource */ /* used to install a new clocksource */
extern int clocksource_register(struct clocksource*); extern int clocksource_register(struct clocksource*);
extern void clocksource_unregister(struct clocksource*); extern void clocksource_unregister(struct clocksource*);
extern void clocksource_touch_watchdog(void);
extern struct clocksource* clocksource_get_next(void); extern struct clocksource* clocksource_get_next(void);
extern void clocksource_change_rating(struct clocksource *cs, int rating); extern void clocksource_change_rating(struct clocksource *cs, int rating);
extern void clocksource_resume(void); extern void clocksource_resume(void);
......
...@@ -28,6 +28,7 @@ ...@@ -28,6 +28,7 @@
* kind, whether express or implied. * kind, whether express or implied.
*/ */
#include <linux/pid_namespace.h> #include <linux/pid_namespace.h>
#include <linux/clocksource.h>
#include <linux/interrupt.h> #include <linux/interrupt.h>
#include <linux/spinlock.h> #include <linux/spinlock.h>
#include <linux/console.h> #include <linux/console.h>
...@@ -574,6 +575,7 @@ static void kgdb_wait(struct pt_regs *regs) ...@@ -574,6 +575,7 @@ static void kgdb_wait(struct pt_regs *regs)
/* Signal the primary CPU that we are done: */ /* Signal the primary CPU that we are done: */
atomic_set(&cpu_in_kgdb[cpu], 0); atomic_set(&cpu_in_kgdb[cpu], 0);
clocksource_touch_watchdog();
local_irq_restore(flags); local_irq_restore(flags);
} }
#endif #endif
...@@ -1396,6 +1398,7 @@ acquirelock: ...@@ -1396,6 +1398,7 @@ acquirelock:
atomic_read(&kgdb_cpu_doing_single_step) != cpu) { atomic_read(&kgdb_cpu_doing_single_step) != cpu) {
atomic_set(&kgdb_active, -1); atomic_set(&kgdb_active, -1);
clocksource_touch_watchdog();
local_irq_restore(flags); local_irq_restore(flags);
goto acquirelock; goto acquirelock;
...@@ -1487,6 +1490,7 @@ acquirelock: ...@@ -1487,6 +1490,7 @@ acquirelock:
kgdb_restore: kgdb_restore:
/* Free kgdb_active */ /* Free kgdb_active */
atomic_set(&kgdb_active, -1); atomic_set(&kgdb_active, -1);
clocksource_touch_watchdog();
local_irq_restore(flags); local_irq_restore(flags);
return error; return error;
......
...@@ -221,6 +221,18 @@ void clocksource_resume(void) ...@@ -221,6 +221,18 @@ void clocksource_resume(void)
spin_unlock_irqrestore(&clocksource_lock, flags); spin_unlock_irqrestore(&clocksource_lock, flags);
} }
/**
* clocksource_touch_watchdog - Update watchdog
*
* Update the watchdog after exception contexts such as kgdb so as not
* to incorrectly trip the watchdog.
*
*/
void clocksource_touch_watchdog(void)
{
clocksource_resume_watchdog();
}
/** /**
* clocksource_get_next - Returns the selected clocksource * clocksource_get_next - Returns the selected clocksource
* *
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment