aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/sparc64/kernel/smp.c33
1 files changed, 10 insertions, 23 deletions
diff --git a/arch/sparc64/kernel/smp.c b/arch/sparc64/kernel/smp.c
index 868625e3b661..47b0738ea4be 100644
--- a/arch/sparc64/kernel/smp.c
+++ b/arch/sparc64/kernel/smp.c
@@ -792,16 +792,15 @@ extern unsigned long xcall_call_function;
792 792
793void arch_send_call_function_ipi(cpumask_t mask) 793void arch_send_call_function_ipi(cpumask_t mask)
794{ 794{
795 smp_cross_call_masked(&xcall_call_function, 0, 0, 0, mask); 795 xcall_deliver((u64) &xcall_call_function, 0, 0, &mask);
796} 796}
797 797
798extern unsigned long xcall_call_function_single; 798extern unsigned long xcall_call_function_single;
799 799
800void arch_send_call_function_single_ipi(int cpu) 800void arch_send_call_function_single_ipi(int cpu)
801{ 801{
802 cpumask_t mask = cpumask_of_cpu(cpu); 802 xcall_deliver((u64) &xcall_call_function_single, 0, 0,
803 803 &cpumask_of_cpu(cpu));
804 smp_cross_call_masked(&xcall_call_function_single, 0, 0, 0, mask);
805} 804}
806 805
807/* Send cross call to all processors except self. */ 806/* Send cross call to all processors except self. */
@@ -959,24 +958,6 @@ void flush_dcache_page_all(struct mm_struct *mm, struct page *page)
959 put_cpu(); 958 put_cpu();
960} 959}
961 960
962static void __smp_receive_signal_mask(cpumask_t mask)
963{
964 smp_cross_call_masked(&xcall_receive_signal, 0, 0, 0, mask);
965}
966
967void smp_receive_signal(int cpu)
968{
969 cpumask_t mask = cpumask_of_cpu(cpu);
970
971 if (cpu_online(cpu))
972 __smp_receive_signal_mask(mask);
973}
974
975void smp_receive_signal_client(int irq, struct pt_regs *regs)
976{
977 clear_softint(1 << irq);
978}
979
980void smp_new_mmu_context_version_client(int irq, struct pt_regs *regs) 961void smp_new_mmu_context_version_client(int irq, struct pt_regs *regs)
981{ 962{
982 struct mm_struct *mm; 963 struct mm_struct *mm;
@@ -1374,7 +1355,13 @@ void __init smp_cpus_done(unsigned int max_cpus)
1374 1355
1375void smp_send_reschedule(int cpu) 1356void smp_send_reschedule(int cpu)
1376{ 1357{
1377 smp_receive_signal(cpu); 1358 xcall_deliver((u64) &xcall_receive_signal, 0, 0,
1359 &cpumask_of_cpu(cpu));
1360}
1361
1362void smp_receive_signal_client(int irq, struct pt_regs *regs)
1363{
1364 clear_softint(1 << irq);
1378} 1365}
1379 1366
1380/* This is a nop because we capture all other cpus 1367/* This is a nop because we capture all other cpus