Merge branch 'generic-ipi' into generic-ipi-for-linus
Conflicts: arch/powerpc/Kconfig arch/s390/kernel/time.c arch/x86/kernel/apic_32.c arch/x86/kernel/cpu/perfctr-watchdog.c arch/x86/kernel/i8259_64.c arch/x86/kernel/ldt.c arch/x86/kernel/nmi_64.c arch/x86/kernel/smpboot.c arch/x86/xen/smp.c include/asm-x86/hw_irq_32.h include/asm-x86/hw_irq_64.h include/asm-x86/mach-default/irq_vectors.h include/asm-x86/mach-voyager/irq_vectors.h include/asm-x86/smp.h kernel/Makefile Signed-off-by: Ingo Molnar <mingo@elte.hu>
This commit is contained in:
@@ -109,7 +109,7 @@ static void do_call_function(void)
|
||||
}
|
||||
|
||||
static void __smp_call_function_map(void (*func) (void *info), void *info,
|
||||
int nonatomic, int wait, cpumask_t map)
|
||||
int wait, cpumask_t map)
|
||||
{
|
||||
struct call_data_struct data;
|
||||
int cpu, local = 0;
|
||||
@@ -162,7 +162,6 @@ out:
|
||||
* smp_call_function:
|
||||
* @func: the function to run; this must be fast and non-blocking
|
||||
* @info: an arbitrary pointer to pass to the function
|
||||
* @nonatomic: unused
|
||||
* @wait: if true, wait (atomically) until function has completed on other CPUs
|
||||
*
|
||||
* Run a function on all other CPUs.
|
||||
@@ -170,15 +169,14 @@ out:
|
||||
* You must not call this function with disabled interrupts, from a
|
||||
* hardware interrupt handler or from a bottom half.
|
||||
*/
|
||||
int smp_call_function(void (*func) (void *info), void *info, int nonatomic,
|
||||
int wait)
|
||||
int smp_call_function(void (*func) (void *info), void *info, int wait)
|
||||
{
|
||||
cpumask_t map;
|
||||
|
||||
spin_lock(&call_lock);
|
||||
map = cpu_online_map;
|
||||
cpu_clear(smp_processor_id(), map);
|
||||
__smp_call_function_map(func, info, nonatomic, wait, map);
|
||||
__smp_call_function_map(func, info, wait, map);
|
||||
spin_unlock(&call_lock);
|
||||
return 0;
|
||||
}
|
||||
@@ -189,7 +187,6 @@ EXPORT_SYMBOL(smp_call_function);
|
||||
* @cpu: the CPU where func should run
|
||||
* @func: the function to run; this must be fast and non-blocking
|
||||
* @info: an arbitrary pointer to pass to the function
|
||||
* @nonatomic: unused
|
||||
* @wait: if true, wait (atomically) until function has completed on other CPUs
|
||||
*
|
||||
* Run a function on one processor.
|
||||
@@ -198,11 +195,10 @@ EXPORT_SYMBOL(smp_call_function);
|
||||
* hardware interrupt handler or from a bottom half.
|
||||
*/
|
||||
int smp_call_function_single(int cpu, void (*func) (void *info), void *info,
|
||||
int nonatomic, int wait)
|
||||
int wait)
|
||||
{
|
||||
spin_lock(&call_lock);
|
||||
__smp_call_function_map(func, info, nonatomic, wait,
|
||||
cpumask_of_cpu(cpu));
|
||||
__smp_call_function_map(func, info, wait, cpumask_of_cpu(cpu));
|
||||
spin_unlock(&call_lock);
|
||||
return 0;
|
||||
}
|
||||
@@ -228,7 +224,7 @@ int smp_call_function_mask(cpumask_t mask, void (*func)(void *), void *info,
|
||||
{
|
||||
spin_lock(&call_lock);
|
||||
cpu_clear(smp_processor_id(), mask);
|
||||
__smp_call_function_map(func, info, 0, wait, mask);
|
||||
__smp_call_function_map(func, info, wait, mask);
|
||||
spin_unlock(&call_lock);
|
||||
return 0;
|
||||
}
|
||||
@@ -303,7 +299,7 @@ static void smp_ptlb_callback(void *info)
|
||||
|
||||
void smp_ptlb_all(void)
|
||||
{
|
||||
on_each_cpu(smp_ptlb_callback, NULL, 0, 1);
|
||||
on_each_cpu(smp_ptlb_callback, NULL, 1);
|
||||
}
|
||||
EXPORT_SYMBOL(smp_ptlb_all);
|
||||
#endif /* ! CONFIG_64BIT */
|
||||
@@ -351,7 +347,7 @@ void smp_ctl_set_bit(int cr, int bit)
|
||||
memset(&parms.orvals, 0, sizeof(parms.orvals));
|
||||
memset(&parms.andvals, 0xff, sizeof(parms.andvals));
|
||||
parms.orvals[cr] = 1 << bit;
|
||||
on_each_cpu(smp_ctl_bit_callback, &parms, 0, 1);
|
||||
on_each_cpu(smp_ctl_bit_callback, &parms, 1);
|
||||
}
|
||||
EXPORT_SYMBOL(smp_ctl_set_bit);
|
||||
|
||||
@@ -365,7 +361,7 @@ void smp_ctl_clear_bit(int cr, int bit)
|
||||
memset(&parms.orvals, 0, sizeof(parms.orvals));
|
||||
memset(&parms.andvals, 0xff, sizeof(parms.andvals));
|
||||
parms.andvals[cr] = ~(1L << bit);
|
||||
on_each_cpu(smp_ctl_bit_callback, &parms, 0, 1);
|
||||
on_each_cpu(smp_ctl_bit_callback, &parms, 1);
|
||||
}
|
||||
EXPORT_SYMBOL(smp_ctl_clear_bit);
|
||||
|
||||
|
@@ -707,7 +707,7 @@ static int etr_sync_clock(struct etr_aib *aib, int port)
|
||||
*/
|
||||
memset(&etr_sync, 0, sizeof(etr_sync));
|
||||
preempt_disable();
|
||||
smp_call_function(clock_sync_cpu_start, &etr_sync, 0, 0);
|
||||
smp_call_function(clock_sync_cpu_start, &etr_sync, 0);
|
||||
local_irq_disable();
|
||||
enable_sync_clock();
|
||||
|
||||
@@ -746,7 +746,7 @@ static int etr_sync_clock(struct etr_aib *aib, int port)
|
||||
rc = -EAGAIN;
|
||||
}
|
||||
local_irq_enable();
|
||||
smp_call_function(clock_sync_cpu_end, NULL, 0, 0);
|
||||
smp_call_function(clock_sync_cpu_end, NULL, 0);
|
||||
preempt_enable();
|
||||
return rc;
|
||||
}
|
||||
@@ -926,7 +926,7 @@ static void etr_work_fn(struct work_struct *work)
|
||||
if (!eacr.ea) {
|
||||
/* Both ports offline. Reset everything. */
|
||||
eacr.dp = eacr.es = eacr.sl = 0;
|
||||
on_each_cpu(disable_sync_clock, NULL, 0, 1);
|
||||
on_each_cpu(disable_sync_clock, NULL, 1);
|
||||
del_timer_sync(&etr_timer);
|
||||
etr_update_eacr(eacr);
|
||||
clear_bit(CLOCK_SYNC_ETR, &clock_sync_flags);
|
||||
|
Reference in New Issue
Block a user