From 762dbe67a6da08bdffa6db1bccfd2cd229fbb02e Mon Sep 17 00:00:00 2001 From: Sonic Zhang Date: Thu, 1 Nov 2012 17:07:09 +0800 Subject: [PATCH] --- yaml --- r: 346859 b: refs/heads/master c: 1439d030b9032261f1111a2dd16b9a8ca11112ef h: refs/heads/master i: 346857: bb26f7d56d51b96fac290abcdbe890c9accda8a4 346855: 950425af281a543035c63cc5af799b074125973d v: v3 --- [refs] | 2 +- trunk/arch/blackfin/kernel/kgdb.c | 13 +++++++++++-- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/[refs] b/[refs] index 67ccb9e5c954..4e651e8341f2 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: f1a1d52508bd29c68a7f77412c0a9cf5e1b51154 +refs/heads/master: 1439d030b9032261f1111a2dd16b9a8ca11112ef diff --git a/trunk/arch/blackfin/kernel/kgdb.c b/trunk/arch/blackfin/kernel/kgdb.c index 9b80b152435e..b882ce22c347 100644 --- a/trunk/arch/blackfin/kernel/kgdb.c +++ b/trunk/arch/blackfin/kernel/kgdb.c @@ -329,6 +329,9 @@ static void bfin_disable_hw_debug(struct pt_regs *regs) } #ifdef CONFIG_SMP +extern void generic_exec_single(int cpu, struct call_single_data *data, int wait); +static struct call_single_data kgdb_smp_ipi_data[NR_CPUS]; + void kgdb_passive_cpu_callback(void *info) { kgdb_nmicallback(raw_smp_processor_id(), get_irq_regs()); @@ -336,12 +339,18 @@ void kgdb_passive_cpu_callback(void *info) void kgdb_roundup_cpus(unsigned long flags) { - smp_call_function(kgdb_passive_cpu_callback, NULL, 0); + unsigned int cpu; + + for (cpu = cpumask_first(cpu_online_mask); cpu < nr_cpu_ids; + cpu = cpumask_next(cpu, cpu_online_mask)) { + kgdb_smp_ipi_data[cpu].func = kgdb_passive_cpu_callback; + generic_exec_single(cpu, &kgdb_smp_ipi_data[cpu], 0); + } } void kgdb_roundup_cpu(int cpu, unsigned long flags) { - smp_call_function_single(cpu, kgdb_passive_cpu_callback, NULL, 0); + generic_exec_single(cpu, &kgdb_smp_ipi_data[cpu], 0); } #endif