|
@@ -471,6 +471,7 @@ static int kgdb_cpu_enter(struct kgdb_state *ks, struct pt_regs *regs,
|
|
|
int cpu;
|
|
|
int trace_on = 0;
|
|
|
int online_cpus = num_online_cpus();
|
|
|
+ u64 time_left;
|
|
|
|
|
|
kgdb_info[ks->cpu].enter_kgdb++;
|
|
|
kgdb_info[ks->cpu].exception_state |= exception_state;
|
|
@@ -595,9 +596,13 @@ return_normal:
|
|
|
/*
|
|
|
* Wait for the other CPUs to be notified and be waiting for us:
|
|
|
*/
|
|
|
- while (kgdb_do_roundup && (atomic_read(&masters_in_kgdb) +
|
|
|
- atomic_read(&slaves_in_kgdb)) != online_cpus)
|
|
|
+ time_left = loops_per_jiffy * HZ;
|
|
|
+ while (kgdb_do_roundup && --time_left &&
|
|
|
+ (atomic_read(&masters_in_kgdb) + atomic_read(&slaves_in_kgdb)) !=
|
|
|
+ online_cpus)
|
|
|
cpu_relax();
|
|
|
+ if (!time_left)
|
|
|
+ pr_crit("KGDB: Timed out waiting for secondary CPUs.\n");
|
|
|
|
|
|
/*
|
|
|
* At this point the primary processor is completely
|