Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -216,6 +216,7 @@ static inline void clocksource_calculate_interval(struct clocksource *c,
/* used to install a new clocksource */
extern int clocksource_register(struct clocksource*);
extern void clocksource_unregister(struct clocksource*);
extern void clocksource_touch_watchdog(void);
extern struct clocksource* clocksource_get_next(void);
extern void clocksource_change_rating(struct clocksource *cs, int rating);
extern void clocksource_resume(void);
+4 −0
Original line number Diff line number Diff line
@@ -28,6 +28,7 @@
 * kind, whether express or implied.
 */
#include <linux/pid_namespace.h>
#include <linux/clocksource.h>
#include <linux/interrupt.h>
#include <linux/spinlock.h>
#include <linux/console.h>
@@ -574,6 +575,7 @@ static void kgdb_wait(struct pt_regs *regs)

	/* Signal the primary CPU that we are done: */
	atomic_set(&cpu_in_kgdb[cpu], 0);
	clocksource_touch_watchdog();
	local_irq_restore(flags);
}
#endif
@@ -1396,6 +1398,7 @@ kgdb_handle_exception(int evector, int signo, int ecode, struct pt_regs *regs)
	    atomic_read(&kgdb_cpu_doing_single_step) != cpu) {

		atomic_set(&kgdb_active, -1);
		clocksource_touch_watchdog();
		local_irq_restore(flags);

		goto acquirelock;
@@ -1487,6 +1490,7 @@ kgdb_handle_exception(int evector, int signo, int ecode, struct pt_regs *regs)
kgdb_restore:
	/* Free kgdb_active */
	atomic_set(&kgdb_active, -1);
	clocksource_touch_watchdog();
	local_irq_restore(flags);

	return error;
+12 −0
Original line number Diff line number Diff line
@@ -221,6 +221,18 @@ void clocksource_resume(void)
	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
 *