Signed-off-by: Andrew Morton --- include/linux/kgdb.h | 1 + kernel/kgdb.c | 4 ++++ kernel/softlockup.c | 4 ++++ kernel/timer.c | 4 ++++ 4 files changed, 13 insertions(+) diff -puN include/linux/kgdb.h~kgdb-core include/linux/kgdb.h --- devel/include/linux/kgdb.h~kgdb-core 2006-05-19 16:01:51.000000000 -0700 +++ devel-akpm/include/linux/kgdb.h 2006-05-19 16:01:51.000000000 -0700 @@ -38,6 +38,7 @@ extern struct tasklet_struct kgdb_taskle extern atomic_t kgdb_setting_breakpoint; extern atomic_t cpu_doing_single_step; +extern atomic_t kgdb_sync_softlockup[NR_CPUS]; extern struct task_struct *kgdb_usethread, *kgdb_contthread; diff -puN kernel/kgdb.c~kgdb-core kernel/kgdb.c --- devel/kernel/kgdb.c~kgdb-core 2006-05-19 16:01:51.000000000 -0700 +++ devel-akpm/kernel/kgdb.c 2006-05-19 16:01:51.000000000 -0700 @@ -123,6 +123,8 @@ struct debuggerinfo_struct { /* to keep track of the CPU which is doing the single stepping*/ atomic_t cpu_doing_single_step = ATOMIC_INIT(-1); +atomic_t kgdb_sync_softlockup[NR_CPUS] = {ATOMIC_INIT(0)}; + /* reboot notifier block */ static struct notifier_block kgdb_reboot_notifier = { .notifier_call = kgdb_notify_reboot, @@ -1058,6 +1060,8 @@ int kgdb_handle_exception(int ex_vector, goto acquirelock; } + atomic_set(&kgdb_sync_softlockup[smp_processor_id()], 1); + /* * Don't enter if we have hit a removed breakpoint. */ diff -puN kernel/softlockup.c~kgdb-core kernel/softlockup.c --- devel/kernel/softlockup.c~kgdb-core 2006-05-19 16:01:51.000000000 -0700 +++ devel-akpm/kernel/softlockup.c 2006-05-19 16:01:51.000000000 -0700 @@ -13,6 +13,7 @@ #include #include #include +#include static DEFINE_SPINLOCK(print_lock); @@ -37,6 +38,9 @@ static struct notifier_block panic_block void touch_softlockup_watchdog(void) { __raw_get_cpu_var(touch_timestamp) = jiffies; +#ifdef CONFIG_KGDB + atomic_set(&kgdb_sync_softlockup[raw_smp_processor_id()], 0); +#endif } EXPORT_SYMBOL(touch_softlockup_watchdog); diff -puN kernel/timer.c~kgdb-core kernel/timer.c --- devel/kernel/timer.c~kgdb-core 2006-05-19 16:01:51.000000000 -0700 +++ devel-akpm/kernel/timer.c 2006-05-19 16:01:51.000000000 -0700 @@ -33,6 +33,7 @@ #include #include #include +#include #include #include @@ -1164,6 +1165,9 @@ static void run_timer_softirq(struct sof void run_local_timers(void) { raise_softirq(TIMER_SOFTIRQ); +#ifdef CONFIG_KGDB + if(!atomic_read(&kgdb_sync_softlockup[smp_processor_id()])) +#endif softlockup_tick(); } _