From: Ingo Molnar Date: Tue, 15 Jul 2008 22:29:07 +0000 (+0200) Subject: Merge branch 'linus' into cpus4096 X-Git-Tag: v2.6.27-rc1~848^2~19 X-Git-Url: https://err.no/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=82638844d9a8581bbf33201cc209a14876eca167;p=linux-2.6 Merge branch 'linus' into cpus4096 Conflicts: arch/x86/xen/smp.c kernel/sched_rt.c net/iucv/iucv.c Signed-off-by: Ingo Molnar --- 82638844d9a8581bbf33201cc209a14876eca167 diff --cc arch/x86/xen/smp.c index 7a70638797,233156f39b..463adecc5c --- a/arch/x86/xen/smp.c +++ b/arch/x86/xen/smp.c @@@ -349,23 -355,30 +355,30 @@@ static void xen_send_IPI_mask(cpumask_ xen_send_IPI_one(cpu, vector); } + void xen_smp_send_call_function_ipi(cpumask_t mask) + { + int cpu; + + xen_send_IPI_mask(mask, XEN_CALL_FUNCTION_VECTOR); + + /* Make sure other vcpus get a chance to run if they need to. */ - for_each_cpu_mask(cpu, mask) { ++ for_each_cpu_mask_nr(cpu, mask) { + if (xen_vcpu_stolen(cpu)) { + HYPERVISOR_sched_op(SCHEDOP_yield, 0); + break; + } + } + } + + void xen_smp_send_call_function_single_ipi(int cpu) + { + xen_send_IPI_mask(cpumask_of_cpu(cpu), XEN_CALL_FUNCTION_SINGLE_VECTOR); + } + static irqreturn_t xen_call_function_interrupt(int irq, void *dev_id) { - void (*func) (void *info) = call_data->func; - void *info = call_data->info; - int wait = call_data->wait; - - /* - * Notify initiating CPU that I've grabbed the data and am - * about to execute the function - */ - mb(); - atomic_inc(&call_data->started); - /* - * At this point the info structure may be out of scope unless wait==1 - */ irq_enter(); - (*func)(info); + generic_smp_call_function_interrupt(); __get_cpu_var(irq_stat).irq_call_count++; irq_exit(); diff --cc net/iucv/iucv.c index 8de5110705,cc34ac769a..411b339a0c --- a/net/iucv/iucv.c +++ b/net/iucv/iucv.c @@@ -497,8 -497,8 +497,8 @@@ static void iucv_setmask_up(void /* Disable all cpu but the first in cpu_irq_cpumask. */ cpumask = iucv_irq_cpumask; cpu_clear(first_cpu(iucv_irq_cpumask), cpumask); - for_each_cpu_mask(cpu, cpumask) + for_each_cpu_mask_nr(cpu, cpumask) - smp_call_function_single(cpu, iucv_block_cpu, NULL, 0, 1); + smp_call_function_single(cpu, iucv_block_cpu, NULL, 1); } /**