diff options
author | Carsten Otte <cotte@de.ibm.com> | 2008-01-26 08:11:27 -0500 |
---|---|---|
committer | Martin Schwidefsky <schwidefsky@de.ibm.com> | 2008-01-26 08:11:31 -0500 |
commit | dab5209cd878c146d9f6923f061d1c2725ff210f (patch) | |
tree | 4b6bae43bc7050c11efb526ad1f535deba95726c | |
parent | 7dc1da9ffae5a344f7115d019e2be069d3e1bb8d (diff) |
[S390] add smp_call_function_mask
This patch adds the s390 variant for smp_call_function_mask(). The
implementation is pretty straight forward using the wrapper
__smp_call_function_map() which already takes a cpumask_t argument.
Signed-off-by: Carsten Otte <cotte@de.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
-rw-r--r-- | arch/s390/kernel/smp.c | 27 | ||||
-rw-r--r-- | include/asm-s390/smp.h | 2 |
2 files changed, 29 insertions, 0 deletions
diff --git a/arch/s390/kernel/smp.c b/arch/s390/kernel/smp.c index 040406dbe9aa..f66db7185d85 100644 --- a/arch/s390/kernel/smp.c +++ b/arch/s390/kernel/smp.c | |||
@@ -210,6 +210,33 @@ int smp_call_function_single(int cpu, void (*func) (void *info), void *info, | |||
210 | } | 210 | } |
211 | EXPORT_SYMBOL(smp_call_function_single); | 211 | EXPORT_SYMBOL(smp_call_function_single); |
212 | 212 | ||
213 | /** | ||
214 | * smp_call_function_mask(): Run a function on a set of other CPUs. | ||
215 | * @mask: The set of cpus to run on. Must not include the current cpu. | ||
216 | * @func: The function to run. This must be fast and non-blocking. | ||
217 | * @info: An arbitrary pointer to pass to the function. | ||
218 | * @wait: If true, wait (atomically) until function has completed on other CPUs. | ||
219 | * | ||
220 | * Returns 0 on success, else a negative status code. | ||
221 | * | ||
222 | * If @wait is true, then returns once @func has returned; otherwise | ||
223 | * it returns just before the target cpu calls @func. | ||
224 | * | ||
225 | * You must not call this function with disabled interrupts or from a | ||
226 | * hardware interrupt handler or from a bottom half handler. | ||
227 | */ | ||
228 | int | ||
229 | smp_call_function_mask(cpumask_t mask, | ||
230 | void (*func)(void *), void *info, | ||
231 | int wait) | ||
232 | { | ||
233 | preempt_disable(); | ||
234 | __smp_call_function_map(func, info, 0, wait, mask); | ||
235 | preempt_enable(); | ||
236 | return 0; | ||
237 | } | ||
238 | EXPORT_SYMBOL(smp_call_function_mask); | ||
239 | |||
213 | void smp_send_stop(void) | 240 | void smp_send_stop(void) |
214 | { | 241 | { |
215 | int cpu, rc; | 242 | int cpu, rc; |
diff --git a/include/asm-s390/smp.h b/include/asm-s390/smp.h index 218454b91862..c7b74326a527 100644 --- a/include/asm-s390/smp.h +++ b/include/asm-s390/smp.h | |||
@@ -90,6 +90,8 @@ extern void __cpu_die (unsigned int cpu); | |||
90 | extern void cpu_die (void) __attribute__ ((noreturn)); | 90 | extern void cpu_die (void) __attribute__ ((noreturn)); |
91 | extern int __cpu_up (unsigned int cpu); | 91 | extern int __cpu_up (unsigned int cpu); |
92 | 92 | ||
93 | extern int smp_call_function_mask(cpumask_t mask, void (*func)(void *), | ||
94 | void *info, int wait); | ||
93 | #endif | 95 | #endif |
94 | 96 | ||
95 | #ifndef CONFIG_SMP | 97 | #ifndef CONFIG_SMP |