Messages in this thread | | | From | Nick Piggin <> | Subject | Re: [PATCH, RFC] improved hacks to allow -rt to run kernbench on POWER | Date | Sat, 10 Nov 2007 12:18:47 +1100 |
| |
On Saturday 10 November 2007 07:52, Benjamin Herrenschmidt wrote: > > diff -urpNa -X dontdiff linux-2.6.23.1-rt4/arch/powerpc/kernel/process.c > > linux-2.6.23.1-rt4-fix/arch/powerpc/kernel/process.c --- > > linux-2.6.23.1-rt4/arch/powerpc/kernel/process.c 2007-10-12 > > 09:43:44.000000000 -0700 +++ > > linux-2.6.23.1-rt4-fix/arch/powerpc/kernel/process.c 2007-11-08 > > 20:33:59.000000000 -0800 @@ -245,6 +245,8 @@ struct task_struct > > *__switch_to(struct t > > struct thread_struct *new_thread, *old_thread; > > unsigned long flags; > > struct task_struct *last; > > + struct ppc64_tlb_batch *batch; > > + int hadbatch; > > > > #ifdef CONFIG_SMP > > /* avoid complexity of lazy save/restore of fpu > > @@ -325,6 +327,16 @@ struct task_struct *__switch_to(struct t > > } > > #endif > > > > + batch = &get_cpu_var(ppc64_tlb_batch); > > + if (batch->active) { > > + hadbatch = 1; > > + if (batch->index) { > > + __flush_tlb_pending(batch); > > + } > > + batch->active = 0; > > + } > > + put_cpu_var(ppc64_tlb_batch); > > + > > local_irq_save(flags); > > > > account_system_vtime(current); > > @@ -335,6 +347,12 @@ struct task_struct *__switch_to(struct t > > > > local_irq_restore(flags); > > > > + if (hadbatch) { > > + batch = &get_cpu_var(ppc64_tlb_batch); > > + batch->active = 1; > > + put_cpu_var(ppc64_tlb_batch); > > + } > > + > > return last; > > } > > I doubt we can schedule within __switch_to() (can somebody confirm > this ?), in which case, you can just use __get_cpu_var() and avoid > the put, thus saving a handful of cycles in the code above.
Preempt is always turned off over switch_to() call. - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |