x86, voyager: fix smp generic helper voyager breakage

Impact: build/boot fix for x86/Voyager

This change:

| commit 3d4422332711ef48ef0f132f1fcbfcbd56c7f3d1
| Author: Jens Axboe <jens.axboe@oracle.com>
| Date: Thu Jun 26 11:21:34 2008 +0200
|
| Add generic helpers for arch IPI function calls

didn't wire up the voyager smp call function correctly, so do that
here. Also make CONFIG_USE_GENERIC_SMP_HELPERS a def_bool y again,
since we now use the generic helpers for every x86 architecture.

Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
Cc: Jens Axboe <Jens.Axboe@oracle.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>

authored by James Bottomley and committed by Ingo Molnar 6cd10f8d 30446461

+18 -3
+4 -1
arch/x86/Kconfig
··· 167 config X86_SMP 168 bool 169 depends on SMP && ((X86_32 && !X86_VOYAGER) || X86_64) 170 - select USE_GENERIC_SMP_HELPERS 171 default y 172 173 config X86_32_SMP 174 def_bool y
··· 167 config X86_SMP 168 bool 169 depends on SMP && ((X86_32 && !X86_VOYAGER) || X86_64) 170 default y 171 + 172 + config USE_GENERIC_SMP_HELPERS 173 + def_bool y 174 + depends on SMP 175 176 config X86_32_SMP 177 def_bool y
+14 -2
arch/x86/mach-voyager/voyager_smp.c
··· 7 * This file provides all the same external entries as smp.c but uses 8 * the voyager hal to provide the functionality 9 */ 10 #include <linux/module.h> 11 #include <linux/mm.h> 12 #include <linux/kernel_stat.h> ··· 1791 x86_write_percpu(cpu_number, hard_smp_processor_id()); 1792 } 1793 1794 struct smp_ops smp_ops = { 1795 .smp_prepare_boot_cpu = voyager_smp_prepare_boot_cpu, 1796 .smp_prepare_cpus = voyager_smp_prepare_cpus, ··· 1811 .smp_send_stop = voyager_smp_send_stop, 1812 .smp_send_reschedule = voyager_smp_send_reschedule, 1813 1814 - .send_call_func_ipi = native_send_call_func_ipi, 1815 - .send_call_func_single_ipi = native_send_call_func_single_ipi, 1816 };
··· 7 * This file provides all the same external entries as smp.c but uses 8 * the voyager hal to provide the functionality 9 */ 10 + #include <linux/cpu.h> 11 #include <linux/module.h> 12 #include <linux/mm.h> 13 #include <linux/kernel_stat.h> ··· 1790 x86_write_percpu(cpu_number, hard_smp_processor_id()); 1791 } 1792 1793 + static void voyager_send_call_func(cpumask_t callmask) 1794 + { 1795 + __u32 mask = cpus_addr(callmask)[0] & ~(1 << smp_processor_id()); 1796 + send_CPI(mask, VIC_CALL_FUNCTION_CPI); 1797 + } 1798 + 1799 + static void voyager_send_call_func_single(int cpu) 1800 + { 1801 + send_CPI(1 << cpu, VIC_CALL_FUNCTION_SINGLE_CPI); 1802 + } 1803 + 1804 struct smp_ops smp_ops = { 1805 .smp_prepare_boot_cpu = voyager_smp_prepare_boot_cpu, 1806 .smp_prepare_cpus = voyager_smp_prepare_cpus, ··· 1799 .smp_send_stop = voyager_smp_send_stop, 1800 .smp_send_reschedule = voyager_smp_send_reschedule, 1801 1802 + .send_call_func_ipi = voyager_send_call_func, 1803 + .send_call_func_single_ipi = voyager_send_call_func_single, 1804 };