diff for duplicates of <1295262433.30950.53.camel@laptop> diff --git a/a/1.txt b/N1/1.txt index 98f6b9d..c962990 100644 --- a/a/1.txt +++ b/N1/1.txt @@ -48,25 +48,28 @@ index 42aa078..c4a570b 100644 is done by the interrupt return path. */ + scheduler_ipi(); break; - +=20 case IPI_CALL_FUNC: diff --git a/arch/arm/kernel/smp.c b/arch/arm/kernel/smp.c index 9066473..ffde790 100644 --- a/arch/arm/kernel/smp.c +++ b/arch/arm/kernel/smp.c -@@ -579,6 +579,7 @@ asmlinkage void __exception do_IPI(struct pt_regs *regs) +@@ -579,6 +579,7 @@ asmlinkage void __exception do_IPI(struct pt_regs *regs= +) * nothing more to do - eveything is * done on the interrupt return path */ + scheduler_ipi(); break; - +=20 case IPI_CALL_FUNC: -diff --git a/arch/blackfin/mach-common/smp.c b/arch/blackfin/mach-common/smp.c +diff --git a/arch/blackfin/mach-common/smp.c b/arch/blackfin/mach-common/sm= +p.c index a17107a..e210f8a 100644 --- a/arch/blackfin/mach-common/smp.c +++ b/arch/blackfin/mach-common/smp.c -@@ -156,6 +156,7 @@ static irqreturn_t ipi_handler(int irq, void *dev_instance) +@@ -156,6 +156,7 @@ static irqreturn_t ipi_handler(int irq, void *dev_insta= +nce) case BFIN_IPI_RESCHEDULE: /* That's the easiest one; leave it to * return_from_int. */ @@ -75,22 +78,24 @@ index a17107a..e210f8a 100644 break; case BFIN_IPI_CALL_FUNC: @@ -301,7 +302,7 @@ void smp_send_reschedule(int cpu) - - msg = kzalloc(sizeof(*msg), GFP_ATOMIC); +=20 + msg =3D kzalloc(sizeof(*msg), GFP_ATOMIC); if (!msg) - return; + return; /* XXX unreliable needs fixing ! */ INIT_LIST_HEAD(&msg->list); - msg->type = BFIN_IPI_RESCHEDULE; - -diff --git a/arch/cris/arch-v32/kernel/smp.c b/arch/cris/arch-v32/kernel/smp.c + msg->type =3D BFIN_IPI_RESCHEDULE; +=20 +diff --git a/arch/cris/arch-v32/kernel/smp.c b/arch/cris/arch-v32/kernel/sm= +p.c index 84fed3b..86e3c76 100644 --- a/arch/cris/arch-v32/kernel/smp.c +++ b/arch/cris/arch-v32/kernel/smp.c -@@ -340,15 +340,18 @@ irqreturn_t crisv32_ipi_interrupt(int irq, void *dev_id) - - ipi = REG_RD(intr_vect, irq_regs[smp_processor_id()], rw_ipi); - +@@ -340,15 +340,18 @@ irqreturn_t crisv32_ipi_interrupt(int irq, void *dev_= +id) +=20 + ipi =3D REG_RD(intr_vect, irq_regs[smp_processor_id()], rw_ipi); +=20 + if (ipi.vector & IPI_SCHEDULE) { + scheduler_ipi(); + } @@ -99,18 +104,18 @@ index 84fed3b..86e3c76 100644 + func(info); } if (ipi.vector & IPI_FLUSH_TLB) { -- if (flush_mm == FLUSH_ALL) +- if (flush_mm =3D=3D FLUSH_ALL) - __flush_tlb_all(); -- else if (flush_vma == FLUSH_ALL) -+ if (flush_mm == FLUSH_ALL) +- else if (flush_vma =3D=3D FLUSH_ALL) ++ if (flush_mm =3D=3D FLUSH_ALL) + __flush_tlb_all(); -+ else if (flush_vma == FLUSH_ALL) ++ else if (flush_vma =3D=3D FLUSH_ALL) __flush_tlb_mm(flush_mm); - else + else __flush_tlb_page(flush_vma, flush_addr); } - +=20 diff --git a/arch/ia64/kernel/irq_ia64.c b/arch/ia64/kernel/irq_ia64.c index 9a26015..a580230 100644 --- a/arch/ia64/kernel/irq_ia64.c @@ -120,10 +125,11 @@ index 9a26015..a580230 100644 #include <linux/ratelimit.h> #include <linux/acpi.h> +#include <linux/sched.h> - +=20 #include <asm/delay.h> #include <asm/intrinsics.h> -@@ -496,6 +497,7 @@ ia64_handle_irq (ia64_vector vector, struct pt_regs *regs) +@@ -496,6 +497,7 @@ ia64_handle_irq (ia64_vector vector, struct pt_regs *re= +gs) smp_local_flush_tlb(); kstat_incr_irqs_this_cpu(irq, desc); } else if (unlikely(IS_RESCHEDULE(vector))) { @@ -137,7 +143,7 @@ index a3fb7cf..2f235a3 100644 +++ b/arch/ia64/xen/irq_xen.c @@ -92,6 +92,8 @@ static unsigned short saved_irq_cnt; static int xen_slab_ready; - +=20 #ifdef CONFIG_SMP +#include <linux/sched.h> + @@ -150,49 +156,57 @@ index a3fb7cf..2f235a3 100644 { + return IRQ_HANDLED; +} - +=20 +static irqreturn_t +xen_resched_handler(int irq, void *dev_id) +{ + scheduler_ipi(); return IRQ_HANDLED; } - -@@ -110,7 +118,7 @@ static struct irqaction xen_ipi_irqaction = { +=20 +@@ -110,7 +118,7 @@ static struct irqaction xen_ipi_irqaction =3D { }; - - static struct irqaction xen_resched_irqaction = { -- .handler = xen_dummy_handler, -+ .handler = xen_resched_handler, - .flags = IRQF_DISABLED, - .name = "resched" +=20 + static struct irqaction xen_resched_irqaction =3D { +- .handler =3D xen_dummy_handler, ++ .handler =3D xen_resched_handler, + .flags =3D IRQF_DISABLED, + .name =3D "resched" }; diff --git a/arch/m32r/kernel/smp.c b/arch/m32r/kernel/smp.c index 31cef20..f0ecc3f 100644 --- a/arch/m32r/kernel/smp.c +++ b/arch/m32r/kernel/smp.c @@ -138,7 +138,7 @@ void smp_send_reschedule(int cpu_id) - *==========================================================================*/ + *=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= +*/ void smp_reschedule_interrupt(void) { - /* nothing to do */ + scheduler_ipi(); } - - /*==========================================================================* +=20 + /*=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= +* diff --git a/arch/mips/kernel/smtc.c b/arch/mips/kernel/smtc.c index 39c0825..0443e91 100644 --- a/arch/mips/kernel/smtc.c +++ b/arch/mips/kernel/smtc.c -@@ -931,6 +931,7 @@ static void post_direct_ipi(int cpu, struct smtc_ipi *pipi) +@@ -931,6 +931,7 @@ static void post_direct_ipi(int cpu, struct smtc_ipi *p= +ipi) static void ipi_resched_interrupt(void) { /* Return from interrupt should be enough to cause scheduler check */ + scheduler_ipi(); } - +=20 static void ipi_call_interrupt(void) -diff --git a/arch/mips/sibyte/bcm1480/smp.c b/arch/mips/sibyte/bcm1480/smp.c +diff --git a/arch/mips/sibyte/bcm1480/smp.c b/arch/mips/sibyte/bcm1480/smp.= +c index 47b347c..513a301 100644 --- a/arch/mips/sibyte/bcm1480/smp.c +++ b/arch/mips/sibyte/bcm1480/smp.c @@ -201,20 +215,20 @@ index 47b347c..513a301 100644 #include <linux/smp.h> #include <linux/kernel_stat.h> +#include <linux/sched.h> - +=20 #include <asm/mmu_context.h> #include <asm/io.h> @@ -189,10 +190,8 @@ void bcm1480_mailbox_interrupt(void) /* Clear the mailbox to clear the interrupt */ __raw_writeq(((u64)action)<<48, mailbox_0_clear_regs[cpu]); - +=20 - /* - * Nothing to do for SMP_RESCHEDULE_YOURSELF; returning from the - * interrupt will do the reschedule for us - */ + if (actione & SMP_RESCHEDULE_YOURSELF) + scheduler_ipi(); - +=20 if (action & SMP_CALL_FUNCTION) smp_call_function_interrupt(); diff --git a/arch/mips/sibyte/sb1250/smp.c b/arch/mips/sibyte/sb1250/smp.c @@ -226,20 +240,20 @@ index c00a5cb..38e7f6b 100644 #include <linux/smp.h> #include <linux/kernel_stat.h> +#include <linux/sched.h> - +=20 #include <asm/mmu_context.h> #include <asm/io.h> @@ -177,10 +178,8 @@ void sb1250_mailbox_interrupt(void) /* Clear the mailbox to clear the interrupt */ ____raw_writeq(((u64)action) << 48, mailbox_clear_regs[cpu]); - +=20 - /* - * Nothing to do for SMP_RESCHEDULE_YOURSELF; returning from the - * interrupt will do the reschedule for us - */ + if (action & SMP_RESCHEDULE_YOURSELF) + scheduler_ipi(); - +=20 if (action & SMP_CALL_FUNCTION) smp_call_function_interrupt(); diff --git a/arch/mn10300/kernel/smp.c b/arch/mn10300/kernel/smp.c @@ -254,13 +268,13 @@ index 0dcd1c6..17f16ca 100644 + scheduler_ipi(); return IRQ_HANDLED; } - +=20 diff --git a/arch/parisc/kernel/smp.c b/arch/parisc/kernel/smp.c index 69d63d3..f8f7970 100644 --- a/arch/parisc/kernel/smp.c +++ b/arch/parisc/kernel/smp.c @@ -155,6 +155,7 @@ ipi_interrupt(int irq, void *dev_id) - + =09 case IPI_RESCHEDULE: smp_debug(100, KERN_DEBUG "CPU%d IPI_RESCHEDULE\n", this_cpu); + scheduler_ipi(); @@ -271,34 +285,36 @@ diff --git a/arch/powerpc/kernel/smp.c b/arch/powerpc/kernel/smp.c index 68034bb..7ee0fc3 100644 --- a/arch/powerpc/kernel/smp.c +++ b/arch/powerpc/kernel/smp.c -@@ -128,6 +128,7 @@ static irqreturn_t call_function_action(int irq, void *data) +@@ -128,6 +128,7 @@ static irqreturn_t call_function_action(int irq, void *= +data) static irqreturn_t reschedule_action(int irq, void *data) { /* we just need the return path side effect of checking need_resched */ + scheduler_ipi(); return IRQ_HANDLED; } - +=20 diff --git a/arch/s390/kernel/smp.c b/arch/s390/kernel/smp.c index 94cf510..61789e8 100644 --- a/arch/s390/kernel/smp.c +++ b/arch/s390/kernel/smp.c -@@ -163,12 +163,12 @@ static void do_ext_call_interrupt(unsigned int ext_int_code, - +@@ -163,12 +163,12 @@ static void do_ext_call_interrupt(unsigned int ext_in= +t_code, +=20 /* * handle bit signal external calls - * - * For the ec_schedule signal we have to do nothing. All the work - * is done automatically when we return from the interrupt. */ - bits = xchg(&S390_lowcore.ext_call_fast, 0); - + bits =3D xchg(&S390_lowcore.ext_call_fast, 0); +=20 + if (test_bit(ec_schedule, &bits)) + scheduler_ipi(); + if (test_bit(ec_call_function, &bits)) generic_smp_call_function_interrupt(); - +=20 diff --git a/arch/sh/kernel/smp.c b/arch/sh/kernel/smp.c index 509b36b..6207561 100644 --- a/arch/sh/kernel/smp.c @@ -323,14 +339,15 @@ diff --git a/arch/sparc/kernel/smp_32.c b/arch/sparc/kernel/smp_32.c index 91c10fb..042d8c9 100644 --- a/arch/sparc/kernel/smp_32.c +++ b/arch/sparc/kernel/smp_32.c -@@ -125,7 +125,7 @@ struct linux_prom_registers smp_penguin_ctable __cpuinitdata = { 0 }; - +@@ -125,7 +125,7 @@ struct linux_prom_registers smp_penguin_ctable __cpuini= +tdata =3D { 0 }; +=20 void smp_send_reschedule(int cpu) { - /* See sparc64 */ + scheduler_ipi(); } - +=20 void smp_send_stop(void) diff --git a/arch/sparc/kernel/smp_64.c b/arch/sparc/kernel/smp_64.c index b6a2b8f..68e26e2 100644 @@ -342,18 +359,19 @@ index b6a2b8f..68e26e2 100644 clear_softint(1 << irq); + scheduler_ipi(); } - +=20 /* This is a nop because we capture all other cpus diff --git a/arch/tile/kernel/smp.c b/arch/tile/kernel/smp.c index 9575b37..91a1ddf 100644 --- a/arch/tile/kernel/smp.c +++ b/arch/tile/kernel/smp.c -@@ -190,6 +190,7 @@ static irqreturn_t handle_reschedule_ipi(int irq, void *token) +@@ -190,6 +190,7 @@ static irqreturn_t handle_reschedule_ipi(int irq, void = +*token) * profiler count in the meantime. */ __get_cpu_var(irq_stat).irq_resched_count++; + scheduler_ipi(); - +=20 return IRQ_HANDLED; } diff --git a/arch/um/kernel/smp.c b/arch/um/kernel/smp.c @@ -362,12 +380,12 @@ index 106bf27..eefb107 100644 +++ b/arch/um/kernel/smp.c @@ -173,7 +173,7 @@ void IPI_handler(int cpu) break; - +=20 case 'R': - set_tsk_need_resched(current); + scheduler_ipi(); break; - +=20 case 'S': diff --git a/arch/x86/kernel/smp.c b/arch/x86/kernel/smp.c index 513deac..e38c2d8 100644 @@ -385,23 +403,26 @@ diff --git a/arch/x86/xen/smp.c b/arch/x86/xen/smp.c index 72a4c79..6196fb1 100644 --- a/arch/x86/xen/smp.c +++ b/arch/x86/xen/smp.c -@@ -53,6 +53,7 @@ static irqreturn_t xen_call_function_single_interrupt(int irq, void *dev_id); +@@ -53,6 +53,7 @@ static irqreturn_t xen_call_function_single_interrupt(int= + irq, void *dev_id); static irqreturn_t xen_reschedule_interrupt(int irq, void *dev_id) { inc_irq_stat(irq_resched_count); + scheduler_ipi(); - +=20 return IRQ_HANDLED; } diff --git a/include/linux/sched.h b/include/linux/sched.h index 341acbb..aa458dc 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h -@@ -2183,6 +2183,7 @@ extern void set_task_comm(struct task_struct *tsk, char *from); +@@ -2183,6 +2183,7 @@ extern void set_task_comm(struct task_struct *tsk, ch= +ar *from); extern char *get_task_comm(char *to, struct task_struct *tsk); - +=20 #ifdef CONFIG_SMP +static inline void scheduler_ipi(void) { } - extern unsigned long wait_task_inactive(struct task_struct *, long match_state); + extern unsigned long wait_task_inactive(struct task_struct *, long match_s= +tate); #else static inline unsigned long wait_task_inactive(struct task_struct *p, diff --git a/a/content_digest b/N1/content_digest index a442436..ad4366f 100644 --- a/a/content_digest +++ b/N1/content_digest @@ -104,25 +104,28 @@ " \t\t\t is done by the interrupt return path. */\n" "+\t\t\tscheduler_ipi();\n" " \t\t\tbreak;\n" - " \n" + "=20\n" " \t\tcase IPI_CALL_FUNC:\n" "diff --git a/arch/arm/kernel/smp.c b/arch/arm/kernel/smp.c\n" "index 9066473..ffde790 100644\n" "--- a/arch/arm/kernel/smp.c\n" "+++ b/arch/arm/kernel/smp.c\n" - "@@ -579,6 +579,7 @@ asmlinkage void __exception do_IPI(struct pt_regs *regs)\n" + "@@ -579,6 +579,7 @@ asmlinkage void __exception do_IPI(struct pt_regs *regs=\n" + ")\n" " \t\t\t\t * nothing more to do - eveything is\n" " \t\t\t\t * done on the interrupt return path\n" " \t\t\t\t */\n" "+\t\t\t\tscheduler_ipi();\n" " \t\t\t\tbreak;\n" - " \n" + "=20\n" " \t\t\tcase IPI_CALL_FUNC:\n" - "diff --git a/arch/blackfin/mach-common/smp.c b/arch/blackfin/mach-common/smp.c\n" + "diff --git a/arch/blackfin/mach-common/smp.c b/arch/blackfin/mach-common/sm=\n" + "p.c\n" "index a17107a..e210f8a 100644\n" "--- a/arch/blackfin/mach-common/smp.c\n" "+++ b/arch/blackfin/mach-common/smp.c\n" - "@@ -156,6 +156,7 @@ static irqreturn_t ipi_handler(int irq, void *dev_instance)\n" + "@@ -156,6 +156,7 @@ static irqreturn_t ipi_handler(int irq, void *dev_insta=\n" + "nce)\n" " \t\tcase BFIN_IPI_RESCHEDULE:\n" " \t\t\t/* That's the easiest one; leave it to\n" " \t\t\t * return_from_int. */\n" @@ -131,22 +134,24 @@ " \t\t\tbreak;\n" " \t\tcase BFIN_IPI_CALL_FUNC:\n" "@@ -301,7 +302,7 @@ void smp_send_reschedule(int cpu)\n" - " \n" - " \tmsg = kzalloc(sizeof(*msg), GFP_ATOMIC);\n" + "=20\n" + " \tmsg =3D kzalloc(sizeof(*msg), GFP_ATOMIC);\n" " \tif (!msg)\n" "-\t\treturn;\n" "+\t\treturn; /* XXX unreliable needs fixing ! */\n" " \tINIT_LIST_HEAD(&msg->list);\n" - " \tmsg->type = BFIN_IPI_RESCHEDULE;\n" - " \n" - "diff --git a/arch/cris/arch-v32/kernel/smp.c b/arch/cris/arch-v32/kernel/smp.c\n" + " \tmsg->type =3D BFIN_IPI_RESCHEDULE;\n" + "=20\n" + "diff --git a/arch/cris/arch-v32/kernel/smp.c b/arch/cris/arch-v32/kernel/sm=\n" + "p.c\n" "index 84fed3b..86e3c76 100644\n" "--- a/arch/cris/arch-v32/kernel/smp.c\n" "+++ b/arch/cris/arch-v32/kernel/smp.c\n" - "@@ -340,15 +340,18 @@ irqreturn_t crisv32_ipi_interrupt(int irq, void *dev_id)\n" - " \n" - " \tipi = REG_RD(intr_vect, irq_regs[smp_processor_id()], rw_ipi);\n" - " \n" + "@@ -340,15 +340,18 @@ irqreturn_t crisv32_ipi_interrupt(int irq, void *dev_=\n" + "id)\n" + "=20\n" + " \tipi =3D REG_RD(intr_vect, irq_regs[smp_processor_id()], rw_ipi);\n" + "=20\n" "+\tif (ipi.vector & IPI_SCHEDULE) {\n" "+\t\tscheduler_ipi();\n" "+\t}\n" @@ -155,18 +160,18 @@ "+\t\tfunc(info);\n" " \t}\n" " \tif (ipi.vector & IPI_FLUSH_TLB) {\n" - "-\t\t if (flush_mm == FLUSH_ALL)\n" + "-\t\t if (flush_mm =3D=3D FLUSH_ALL)\n" "-\t\t\t __flush_tlb_all();\n" - "-\t\t else if (flush_vma == FLUSH_ALL)\n" - "+\t\tif (flush_mm == FLUSH_ALL)\n" + "-\t\t else if (flush_vma =3D=3D FLUSH_ALL)\n" + "+\t\tif (flush_mm =3D=3D FLUSH_ALL)\n" "+\t\t\t__flush_tlb_all();\n" - "+\t\telse if (flush_vma == FLUSH_ALL)\n" + "+\t\telse if (flush_vma =3D=3D FLUSH_ALL)\n" " \t\t\t__flush_tlb_mm(flush_mm);\n" "-\t\t else\n" "+\t\telse\n" " \t\t\t__flush_tlb_page(flush_vma, flush_addr);\n" " \t}\n" - " \n" + "=20\n" "diff --git a/arch/ia64/kernel/irq_ia64.c b/arch/ia64/kernel/irq_ia64.c\n" "index 9a26015..a580230 100644\n" "--- a/arch/ia64/kernel/irq_ia64.c\n" @@ -176,10 +181,11 @@ " #include <linux/ratelimit.h>\n" " #include <linux/acpi.h>\n" "+#include <linux/sched.h>\n" - " \n" + "=20\n" " #include <asm/delay.h>\n" " #include <asm/intrinsics.h>\n" - "@@ -496,6 +497,7 @@ ia64_handle_irq (ia64_vector vector, struct pt_regs *regs)\n" + "@@ -496,6 +497,7 @@ ia64_handle_irq (ia64_vector vector, struct pt_regs *re=\n" + "gs)\n" " \t\t\tsmp_local_flush_tlb();\n" " \t\t\tkstat_incr_irqs_this_cpu(irq, desc);\n" " \t\t} else if (unlikely(IS_RESCHEDULE(vector))) {\n" @@ -193,7 +199,7 @@ "+++ b/arch/ia64/xen/irq_xen.c\n" "@@ -92,6 +92,8 @@ static unsigned short saved_irq_cnt;\n" " static int xen_slab_ready;\n" - " \n" + "=20\n" " #ifdef CONFIG_SMP\n" "+#include <linux/sched.h>\n" "+\n" @@ -206,49 +212,57 @@ " {\n" "+\treturn IRQ_HANDLED;\n" "+}\n" - " \n" + "=20\n" "+static irqreturn_t\n" "+xen_resched_handler(int irq, void *dev_id)\n" "+{\n" "+\tscheduler_ipi();\n" " \treturn IRQ_HANDLED;\n" " }\n" - " \n" - "@@ -110,7 +118,7 @@ static struct irqaction xen_ipi_irqaction = {\n" + "=20\n" + "@@ -110,7 +118,7 @@ static struct irqaction xen_ipi_irqaction =3D {\n" " };\n" - " \n" - " static struct irqaction xen_resched_irqaction = {\n" - "-\t.handler =\txen_dummy_handler,\n" - "+\t.handler =\txen_resched_handler,\n" - " \t.flags =\tIRQF_DISABLED,\n" - " \t.name =\t\t\"resched\"\n" + "=20\n" + " static struct irqaction xen_resched_irqaction =3D {\n" + "-\t.handler =3D\txen_dummy_handler,\n" + "+\t.handler =3D\txen_resched_handler,\n" + " \t.flags =3D\tIRQF_DISABLED,\n" + " \t.name =3D\t\t\"resched\"\n" " };\n" "diff --git a/arch/m32r/kernel/smp.c b/arch/m32r/kernel/smp.c\n" "index 31cef20..f0ecc3f 100644\n" "--- a/arch/m32r/kernel/smp.c\n" "+++ b/arch/m32r/kernel/smp.c\n" "@@ -138,7 +138,7 @@ void smp_send_reschedule(int cpu_id)\n" - " *==========================================================================*/\n" + " *=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=\n" + "=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=\n" + "=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=\n" + "*/\n" " void smp_reschedule_interrupt(void)\n" " {\n" "-\t/* nothing to do */\n" "+\tscheduler_ipi();\n" " }\n" - " \n" - " /*==========================================================================*\n" + "=20\n" + " /*=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=\n" + "=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=\n" + "=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=\n" + "*\n" "diff --git a/arch/mips/kernel/smtc.c b/arch/mips/kernel/smtc.c\n" "index 39c0825..0443e91 100644\n" "--- a/arch/mips/kernel/smtc.c\n" "+++ b/arch/mips/kernel/smtc.c\n" - "@@ -931,6 +931,7 @@ static void post_direct_ipi(int cpu, struct smtc_ipi *pipi)\n" + "@@ -931,6 +931,7 @@ static void post_direct_ipi(int cpu, struct smtc_ipi *p=\n" + "ipi)\n" " static void ipi_resched_interrupt(void)\n" " {\n" " \t/* Return from interrupt should be enough to cause scheduler check */\n" "+\tscheduler_ipi();\n" " }\n" - " \n" + "=20\n" " static void ipi_call_interrupt(void)\n" - "diff --git a/arch/mips/sibyte/bcm1480/smp.c b/arch/mips/sibyte/bcm1480/smp.c\n" + "diff --git a/arch/mips/sibyte/bcm1480/smp.c b/arch/mips/sibyte/bcm1480/smp.=\n" + "c\n" "index 47b347c..513a301 100644\n" "--- a/arch/mips/sibyte/bcm1480/smp.c\n" "+++ b/arch/mips/sibyte/bcm1480/smp.c\n" @@ -257,20 +271,20 @@ " #include <linux/smp.h>\n" " #include <linux/kernel_stat.h>\n" "+#include <linux/sched.h>\n" - " \n" + "=20\n" " #include <asm/mmu_context.h>\n" " #include <asm/io.h>\n" "@@ -189,10 +190,8 @@ void bcm1480_mailbox_interrupt(void)\n" " \t/* Clear the mailbox to clear the interrupt */\n" " \t__raw_writeq(((u64)action)<<48, mailbox_0_clear_regs[cpu]);\n" - " \n" + "=20\n" "-\t/*\n" "-\t * Nothing to do for SMP_RESCHEDULE_YOURSELF; returning from the\n" "-\t * interrupt will do the reschedule for us\n" "-\t */\n" "+\tif (actione & SMP_RESCHEDULE_YOURSELF)\n" "+\t\tscheduler_ipi();\n" - " \n" + "=20\n" " \tif (action & SMP_CALL_FUNCTION)\n" " \t\tsmp_call_function_interrupt();\n" "diff --git a/arch/mips/sibyte/sb1250/smp.c b/arch/mips/sibyte/sb1250/smp.c\n" @@ -282,20 +296,20 @@ " #include <linux/smp.h>\n" " #include <linux/kernel_stat.h>\n" "+#include <linux/sched.h>\n" - " \n" + "=20\n" " #include <asm/mmu_context.h>\n" " #include <asm/io.h>\n" "@@ -177,10 +178,8 @@ void sb1250_mailbox_interrupt(void)\n" " \t/* Clear the mailbox to clear the interrupt */\n" " \t____raw_writeq(((u64)action) << 48, mailbox_clear_regs[cpu]);\n" - " \n" + "=20\n" "-\t/*\n" "-\t * Nothing to do for SMP_RESCHEDULE_YOURSELF; returning from the\n" "-\t * interrupt will do the reschedule for us\n" "-\t */\n" "+\tif (action & SMP_RESCHEDULE_YOURSELF)\n" "+\t\tscheduler_ipi();\n" - " \n" + "=20\n" " \tif (action & SMP_CALL_FUNCTION)\n" " \t\tsmp_call_function_interrupt();\n" "diff --git a/arch/mn10300/kernel/smp.c b/arch/mn10300/kernel/smp.c\n" @@ -310,13 +324,13 @@ "+\tscheduler_ipi();\n" " \treturn IRQ_HANDLED;\n" " }\n" - " \n" + "=20\n" "diff --git a/arch/parisc/kernel/smp.c b/arch/parisc/kernel/smp.c\n" "index 69d63d3..f8f7970 100644\n" "--- a/arch/parisc/kernel/smp.c\n" "+++ b/arch/parisc/kernel/smp.c\n" "@@ -155,6 +155,7 @@ ipi_interrupt(int irq, void *dev_id)\n" - " \t\t\t\t\n" + " \t\t\t=09\n" " \t\t\tcase IPI_RESCHEDULE:\n" " \t\t\t\tsmp_debug(100, KERN_DEBUG \"CPU%d IPI_RESCHEDULE\\n\", this_cpu);\n" "+\t\t\t\tscheduler_ipi();\n" @@ -327,34 +341,36 @@ "index 68034bb..7ee0fc3 100644\n" "--- a/arch/powerpc/kernel/smp.c\n" "+++ b/arch/powerpc/kernel/smp.c\n" - "@@ -128,6 +128,7 @@ static irqreturn_t call_function_action(int irq, void *data)\n" + "@@ -128,6 +128,7 @@ static irqreturn_t call_function_action(int irq, void *=\n" + "data)\n" " static irqreturn_t reschedule_action(int irq, void *data)\n" " {\n" " \t/* we just need the return path side effect of checking need_resched */\n" "+\tscheduler_ipi();\n" " \treturn IRQ_HANDLED;\n" " }\n" - " \n" + "=20\n" "diff --git a/arch/s390/kernel/smp.c b/arch/s390/kernel/smp.c\n" "index 94cf510..61789e8 100644\n" "--- a/arch/s390/kernel/smp.c\n" "+++ b/arch/s390/kernel/smp.c\n" - "@@ -163,12 +163,12 @@ static void do_ext_call_interrupt(unsigned int ext_int_code,\n" - " \n" + "@@ -163,12 +163,12 @@ static void do_ext_call_interrupt(unsigned int ext_in=\n" + "t_code,\n" + "=20\n" " \t/*\n" " \t * handle bit signal external calls\n" "-\t *\n" "-\t * For the ec_schedule signal we have to do nothing. All the work\n" "-\t * is done automatically when we return from the interrupt.\n" " \t */\n" - " \tbits = xchg(&S390_lowcore.ext_call_fast, 0);\n" - " \n" + " \tbits =3D xchg(&S390_lowcore.ext_call_fast, 0);\n" + "=20\n" "+\tif (test_bit(ec_schedule, &bits))\n" "+\t\tscheduler_ipi();\n" "+\n" " \tif (test_bit(ec_call_function, &bits))\n" " \t\tgeneric_smp_call_function_interrupt();\n" - " \n" + "=20\n" "diff --git a/arch/sh/kernel/smp.c b/arch/sh/kernel/smp.c\n" "index 509b36b..6207561 100644\n" "--- a/arch/sh/kernel/smp.c\n" @@ -379,14 +395,15 @@ "index 91c10fb..042d8c9 100644\n" "--- a/arch/sparc/kernel/smp_32.c\n" "+++ b/arch/sparc/kernel/smp_32.c\n" - "@@ -125,7 +125,7 @@ struct linux_prom_registers smp_penguin_ctable __cpuinitdata = { 0 };\n" - " \n" + "@@ -125,7 +125,7 @@ struct linux_prom_registers smp_penguin_ctable __cpuini=\n" + "tdata =3D { 0 };\n" + "=20\n" " void smp_send_reschedule(int cpu)\n" " {\n" "-\t/* See sparc64 */\n" "+\tscheduler_ipi();\n" " }\n" - " \n" + "=20\n" " void smp_send_stop(void)\n" "diff --git a/arch/sparc/kernel/smp_64.c b/arch/sparc/kernel/smp_64.c\n" "index b6a2b8f..68e26e2 100644\n" @@ -398,18 +415,19 @@ " \tclear_softint(1 << irq);\n" "+\tscheduler_ipi();\n" " }\n" - " \n" + "=20\n" " /* This is a nop because we capture all other cpus\n" "diff --git a/arch/tile/kernel/smp.c b/arch/tile/kernel/smp.c\n" "index 9575b37..91a1ddf 100644\n" "--- a/arch/tile/kernel/smp.c\n" "+++ b/arch/tile/kernel/smp.c\n" - "@@ -190,6 +190,7 @@ static irqreturn_t handle_reschedule_ipi(int irq, void *token)\n" + "@@ -190,6 +190,7 @@ static irqreturn_t handle_reschedule_ipi(int irq, void =\n" + "*token)\n" " \t * profiler count in the meantime.\n" " \t */\n" " \t__get_cpu_var(irq_stat).irq_resched_count++;\n" "+\tscheduler_ipi();\n" - " \n" + "=20\n" " \treturn IRQ_HANDLED;\n" " }\n" "diff --git a/arch/um/kernel/smp.c b/arch/um/kernel/smp.c\n" @@ -418,12 +436,12 @@ "+++ b/arch/um/kernel/smp.c\n" "@@ -173,7 +173,7 @@ void IPI_handler(int cpu)\n" " \t\t\tbreak;\n" - " \n" + "=20\n" " \t\tcase 'R':\n" "-\t\t\tset_tsk_need_resched(current);\n" "+\t\t\tscheduler_ipi();\n" " \t\t\tbreak;\n" - " \n" + "=20\n" " \t\tcase 'S':\n" "diff --git a/arch/x86/kernel/smp.c b/arch/x86/kernel/smp.c\n" "index 513deac..e38c2d8 100644\n" @@ -441,25 +459,28 @@ "index 72a4c79..6196fb1 100644\n" "--- a/arch/x86/xen/smp.c\n" "+++ b/arch/x86/xen/smp.c\n" - "@@ -53,6 +53,7 @@ static irqreturn_t xen_call_function_single_interrupt(int irq, void *dev_id);\n" + "@@ -53,6 +53,7 @@ static irqreturn_t xen_call_function_single_interrupt(int=\n" + " irq, void *dev_id);\n" " static irqreturn_t xen_reschedule_interrupt(int irq, void *dev_id)\n" " {\n" " \tinc_irq_stat(irq_resched_count);\n" "+\tscheduler_ipi();\n" - " \n" + "=20\n" " \treturn IRQ_HANDLED;\n" " }\n" "diff --git a/include/linux/sched.h b/include/linux/sched.h\n" "index 341acbb..aa458dc 100644\n" "--- a/include/linux/sched.h\n" "+++ b/include/linux/sched.h\n" - "@@ -2183,6 +2183,7 @@ extern void set_task_comm(struct task_struct *tsk, char *from);\n" + "@@ -2183,6 +2183,7 @@ extern void set_task_comm(struct task_struct *tsk, ch=\n" + "ar *from);\n" " extern char *get_task_comm(char *to, struct task_struct *tsk);\n" - " \n" + "=20\n" " #ifdef CONFIG_SMP\n" "+static inline void scheduler_ipi(void) { }\n" - " extern unsigned long wait_task_inactive(struct task_struct *, long match_state);\n" + " extern unsigned long wait_task_inactive(struct task_struct *, long match_s=\n" + "tate);\n" " #else\n" static inline unsigned long wait_task_inactive(struct task_struct *p, -f712cdf56760ab5c09ad8e87cf634196c6728205625acba3e7afcec35f7127f7 +115cf9e9dff5bbedb918f3055def81f2d9f431ca5d8a569021dae136a658cf85
diff --git a/a/content_digest b/N2/content_digest index a442436..91c0664 100644 --- a/a/content_digest +++ b/N2/content_digest @@ -1,57 +1,7 @@ - "From\0Peter Zijlstra <peterz@infradead.org>\0" + "From\0peterz@infradead.org (Peter Zijlstra)\0" "Subject\0[PATCH] sched: provide scheduler_ipi() callback in response to smp_send_reschedule()\0" "Date\0Mon, 17 Jan 2011 12:07:13 +0100\0" - "To\0Richard Henderson <rth@twiddle.net>" - Ivan Kokshaysky <ink@jurassic.park.msu.ru> - Matt Turner <mattst88@gmail.com> - Russell King <linux@arm.linux.org.uk> - Mike Frysinger <vapier@gentoo.org> - Mikael Starvik <starvik@axis.com> - Jesper Nilsson <jesper.nilsson@axis.com> - Tony Luck <tony.luck@intel.com> - Fenghua Yu <fenghua.yu@intel.com> - Hirokazu Takata <takata@linux-m32r.org> - Ralf Baechle <ralf@linux-mips.org> - David Howells <dhowells@redhat.com> - Koichi Yasutake <yasutake.koichi@jp.panasonic.com> - Kyle McMartin <kyle@mcmartin.ca> - Helge Deller <deller@gmx.de> - James E.J. Bottomley <jejb@parisc-linux.org> - Benjamin Herrenschmidt <benh@kernel.crashing.org> - Paul Mackerras <paulus@samba.org> - Martin Schwidefsky <schwidefsky@de.ibm.com> - Heiko Carstens <heiko.carstens@de.ibm.com> - linux390@de.ibm.com - Paul Mundt <lethal@linux-sh.org> - David S. Miller <davem@davemloft.net> - Chris Metcalf <cmetcalf@tilera.com> - Jeff Dike <jdike@addtoit.com> - Thomas Gleixner <tglx@linutronix.de> - Ingo Molnar <mingo@redhat.com> - H. Peter Anvin <hpa@zytor.com> - x86@kernel.org - Jeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com> - Konrad Rzeszutek Wilk <konrad.wilk@oracle.com> - linux-alpha@vger.kernel.org - linux-kernel@vger.kernel.org - linux-arm-kernel@lists.infradead.org - uclinux-dist-devel@blackfin.uclinux.org - linux-cris-kernel@axis.com - linux-ia64@vger.kernel.org - linux-m32r@ml.linux-m32r.org - linux-m32r-ja@ml.linux-m32r.org - linux-mips@linux-mips.org - linux-am33-list@redhat.com - linux-parisc@vger.kernel.org - linuxppc-dev@lists.ozlabs.org - linux-s390@vger.kernel.org - linux-sh@vger.kernel.org - sparclinux@vger.kernel.org - user-mode-linux-devel@lists.sourceforge.net - user-mode-linux-user@lists.sourceforge.net - xen-devel@lists.xensource.com - virtualization@lists.osdl.org - " Linux-Arch <linux-arch@vger.kernel.org>\0" + "To\0linux-arm-kernel@lists.infradead.org\0" "\00:1\0" "b\0" "For future rework of try_to_wake_up() we'd like to push part of that\n" @@ -462,4 +412,4 @@ " #else\n" static inline unsigned long wait_task_inactive(struct task_struct *p, -f712cdf56760ab5c09ad8e87cf634196c6728205625acba3e7afcec35f7127f7 +659a40f94b512152384da6e5abab1b45751448582204238470bfc7d3c7aafef2
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.