diff options
Diffstat (limited to 'kernel/debug/debug_core.c')
| -rw-r--r-- | kernel/debug/debug_core.c | 9 | 
1 files changed, 7 insertions, 2 deletions
| diff --git a/kernel/debug/debug_core.c b/kernel/debug/debug_core.c index 1adf62b39b96..acd749736822 100644 --- a/kernel/debug/debug_core.c +++ b/kernel/debug/debug_core.c @@ -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 | 
