On Mon, 22 Nov 2010 15:47:36 +0100 Gerald Schaefer <gerald.schaefer@xxxxxxxxxx> wrote: > From: Gerald Schaefer <gerald.schaefer@xxxxxxxxxx> > > The spinning mutex implementation uses cpu_relax() in busy loops as a > compiler barrier. Depending on the architecture, cpu_relax() may do more > than needed in this specific mutex spin loops. On System z we also give > up the time slice of the virtual cpu in cpu_relax(), which prevents > effective spinning on the mutex. > > This patch replaces cpu_relax() in the spinning mutex code with > arch_mutex_cpu_relax(), which can be defined by each architecture that > selects HAVE_ARCH_MUTEX_CPU_RELAX. The default is still cpu_relax(), so > this patch should not affect other architectures than System z for now. > > ... > > --- a/include/linux/mutex.h > +++ b/include/linux/mutex.h > @@ -160,4 +160,8 @@ extern int mutex_trylock(struct mutex *l > extern void mutex_unlock(struct mutex *lock); > extern int atomic_dec_and_mutex_lock(atomic_t *cnt, struct mutex *lock); > > +#ifndef CONFIG_HAVE_ARCH_MUTEX_CPU_RELAX > +#define arch_mutex_cpu_relax() cpu_relax() > +#endif A simpler way of doing this is to remove the CONFIG_ variable altogether and do #ifndef arch_mutex_cpu_relax #define arch_mutex_cpu_relax() cpu_relax() #endif When doing this, one should be clear about _which_ arch file has the responsibility of defining arch_mutex_cpu_relax, and make sure that this arch file is reliably included in the .c file. -- To unsubscribe from this list: send the line "unsubscribe linux-s390" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html