diff options
Diffstat (limited to 'arch/s390')
-rw-r--r-- | arch/s390/appldata/appldata_base.c | 12 | ||||
-rw-r--r-- | arch/s390/kernel/smp.c | 16 | ||||
-rw-r--r-- | arch/s390/kernel/vtime.c | 2 |
3 files changed, 14 insertions, 16 deletions
diff --git a/arch/s390/appldata/appldata_base.c b/arch/s390/appldata/appldata_base.c index 6ffbab77ae4d..62391fb1f61f 100644 --- a/arch/s390/appldata/appldata_base.c +++ b/arch/s390/appldata/appldata_base.c | |||
@@ -173,7 +173,7 @@ int appldata_diag(char record_nr, u16 function, unsigned long buffer, | |||
173 | /* | 173 | /* |
174 | * appldata_mod_vtimer_wrap() | 174 | * appldata_mod_vtimer_wrap() |
175 | * | 175 | * |
176 | * wrapper function for mod_virt_timer(), because smp_call_function_on() | 176 | * wrapper function for mod_virt_timer(), because smp_call_function_single() |
177 | * accepts only one parameter. | 177 | * accepts only one parameter. |
178 | */ | 178 | */ |
179 | static void __appldata_mod_vtimer_wrap(void *p) { | 179 | static void __appldata_mod_vtimer_wrap(void *p) { |
@@ -208,9 +208,9 @@ __appldata_vtimer_setup(int cmd) | |||
208 | num_online_cpus()) * TOD_MICRO; | 208 | num_online_cpus()) * TOD_MICRO; |
209 | for_each_online_cpu(i) { | 209 | for_each_online_cpu(i) { |
210 | per_cpu(appldata_timer, i).expires = per_cpu_interval; | 210 | per_cpu(appldata_timer, i).expires = per_cpu_interval; |
211 | smp_call_function_on(add_virt_timer_periodic, | 211 | smp_call_function_single(i, add_virt_timer_periodic, |
212 | &per_cpu(appldata_timer, i), | 212 | &per_cpu(appldata_timer, i), |
213 | 0, 1, i); | 213 | 0, 1); |
214 | } | 214 | } |
215 | appldata_timer_active = 1; | 215 | appldata_timer_active = 1; |
216 | P_INFO("Monitoring timer started.\n"); | 216 | P_INFO("Monitoring timer started.\n"); |
@@ -236,8 +236,8 @@ __appldata_vtimer_setup(int cmd) | |||
236 | } args; | 236 | } args; |
237 | args.timer = &per_cpu(appldata_timer, i); | 237 | args.timer = &per_cpu(appldata_timer, i); |
238 | args.expires = per_cpu_interval; | 238 | args.expires = per_cpu_interval; |
239 | smp_call_function_on(__appldata_mod_vtimer_wrap, | 239 | smp_call_function_single(i, __appldata_mod_vtimer_wrap, |
240 | &args, 0, 1, i); | 240 | &args, 0, 1); |
241 | } | 241 | } |
242 | } | 242 | } |
243 | } | 243 | } |
diff --git a/arch/s390/kernel/smp.c b/arch/s390/kernel/smp.c index 182c085ae4dd..aff9f853fc30 100644 --- a/arch/s390/kernel/smp.c +++ b/arch/s390/kernel/smp.c | |||
@@ -170,30 +170,28 @@ int smp_call_function(void (*func) (void *info), void *info, int nonatomic, | |||
170 | EXPORT_SYMBOL(smp_call_function); | 170 | EXPORT_SYMBOL(smp_call_function); |
171 | 171 | ||
172 | /* | 172 | /* |
173 | * smp_call_function_on: | 173 | * smp_call_function_single: |
174 | * @cpu: the CPU where func should run | ||
174 | * @func: the function to run; this must be fast and non-blocking | 175 | * @func: the function to run; this must be fast and non-blocking |
175 | * @info: an arbitrary pointer to pass to the function | 176 | * @info: an arbitrary pointer to pass to the function |
176 | * @nonatomic: unused | 177 | * @nonatomic: unused |
177 | * @wait: if true, wait (atomically) until function has completed on other CPUs | 178 | * @wait: if true, wait (atomically) until function has completed on other CPUs |
178 | * @cpu: the CPU where func should run | ||
179 | * | 179 | * |
180 | * Run a function on one processor. | 180 | * Run a function on one processor. |
181 | * | 181 | * |
182 | * You must not call this function with disabled interrupts, from a | 182 | * You must not call this function with disabled interrupts, from a |
183 | * hardware interrupt handler or from a bottom half. | 183 | * hardware interrupt handler or from a bottom half. |
184 | */ | 184 | */ |
185 | int smp_call_function_on(void (*func) (void *info), void *info, int nonatomic, | 185 | int smp_call_function_single(int cpu, void (*func) (void *info), void *info, |
186 | int wait, int cpu) | 186 | int nonatomic, int wait) |
187 | { | 187 | { |
188 | cpumask_t map = CPU_MASK_NONE; | ||
189 | |||
190 | preempt_disable(); | 188 | preempt_disable(); |
191 | cpu_set(cpu, map); | 189 | __smp_call_function_map(func, info, nonatomic, wait, |
192 | __smp_call_function_map(func, info, nonatomic, wait, map); | 190 | cpumask_of_cpu(cpu)); |
193 | preempt_enable(); | 191 | preempt_enable(); |
194 | return 0; | 192 | return 0; |
195 | } | 193 | } |
196 | EXPORT_SYMBOL(smp_call_function_on); | 194 | EXPORT_SYMBOL(smp_call_function_single); |
197 | 195 | ||
198 | static void do_send_stop(void) | 196 | static void do_send_stop(void) |
199 | { | 197 | { |
diff --git a/arch/s390/kernel/vtime.c b/arch/s390/kernel/vtime.c index b6ed143e8597..84ff78de6bac 100644 --- a/arch/s390/kernel/vtime.c +++ b/arch/s390/kernel/vtime.c | |||
@@ -415,7 +415,7 @@ EXPORT_SYMBOL(add_virt_timer_periodic); | |||
415 | 415 | ||
416 | /* | 416 | /* |
417 | * If we change a pending timer the function must be called on the CPU | 417 | * If we change a pending timer the function must be called on the CPU |
418 | * where the timer is running on, e.g. by smp_call_function_on() | 418 | * where the timer is running on, e.g. by smp_call_function_single() |
419 | * | 419 | * |
420 | * The original mod_timer adds the timer if it is not pending. For compatibility | 420 | * The original mod_timer adds the timer if it is not pending. For compatibility |
421 | * we do the same. The timer will be added on the current CPU as a oneshot timer. | 421 | * we do the same. The timer will be added on the current CPU as a oneshot timer. |