All of lore.kernel.org
 help / color / mirror / Atom feed
From: Gerald Schaefer <gerald.schaefer@de.ibm.com>
To: Andrew Morton <akpm@linux-foundation.org>
Cc: Peter Zijlstra <peterz@infradead.org>,
	Ingo Molnar <mingo@elte.hu>,
	Martin Schwidefsky <schwidefsky@de.ibm.com>,
	LKML <linux-kernel@vger.kernel.org>,
	linux-s390 <linux-s390@vger.kernel.org>,
	Heiko Carstens <heiko.carstens@de.ibm.com>
Subject: [PATCH] mutex: Introduce arch_mutex_cpu_relax()
Date: Fri, 15 Oct 2010 13:07:35 +0200	[thread overview]
Message-ID: <1287140855.2547.18.camel@thinkpad> (raw)
In-Reply-To: <1287140101.2547.6.camel@thinkpad>

From: Gerald Schaefer <gerald.schaefer@de.ibm.com>

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 in
include/asm/mutex.h. The default is still cpu_relax(), so this should
not affect other architectures than System z for now.

Signed-off-by: Gerald Schaefer <gerald.schaefer@de.ibm.com>
---
 arch/s390/include/asm/mutex.h |    2 ++
 include/linux/mutex.h         |    9 +++++++++
 kernel/mutex.c                |    2 +-
 kernel/sched.c                |    2 +-
 4 files changed, 13 insertions(+), 2 deletions(-)

--- a/arch/s390/include/asm/mutex.h
+++ b/arch/s390/include/asm/mutex.h
@@ -7,3 +7,5 @@
  */
 
 #include <asm-generic/mutex-dec.h>
+
+#define arch_mutex_cpu_relax()	barrier()
--- a/include/linux/mutex.h
+++ b/include/linux/mutex.h
@@ -16,6 +16,7 @@
 #include <linux/lockdep.h>
 
 #include <asm/atomic.h>
+#include <asm/mutex.h>
 
 /*
  * Simple, straightforward mutexes with strict semantics:
@@ -160,4 +161,12 @@ 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);
 
+/*
+ * An architecture specific version of arch_mutex_cpu_relax() can be defined
+ * in include/asm/mutex.h.
+ */
+#ifndef arch_mutex_cpu_relax
+#define arch_mutex_cpu_relax()	cpu_relax()
+#endif
+
 #endif
--- a/kernel/mutex.c
+++ b/kernel/mutex.c
@@ -199,7 +199,7 @@ __mutex_lock_common(struct mutex *lock,
 		 * memory barriers as we'll eventually observe the right
 		 * values at the cost of a few extra spins.
 		 */
-		cpu_relax();
+		arch_mutex_cpu_relax();
 	}
 #endif
 	spin_lock_mutex(&lock->wait_lock, flags);
--- a/kernel/sched.c
+++ b/kernel/sched.c
@@ -3888,7 +3888,7 @@ int mutex_spin_on_owner(struct mutex *lo
 		if (task_thread_info(rq->curr) != owner || need_resched())
 			return 0;
 
-		cpu_relax();
+		arch_mutex_cpu_relax();
 	}
 
 	return 1;

  reply	other threads:[~2010-10-15 11:07 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-10-14 15:33 [PATCH] mutex: Introduce mutex_cpu_relax() Gerald Schaefer
2010-10-14 15:55 ` Peter Zijlstra
2010-10-14 15:59 ` Peter Zijlstra
2010-10-14 17:31   ` Gerald Schaefer
2010-10-14 17:40     ` Gerald Schaefer
2010-10-14 22:13       ` Andrew Morton
2010-10-15 10:55         ` Gerald Schaefer
2010-10-15 11:07           ` Gerald Schaefer [this message]
2010-10-18 18:54             ` [PATCH] mutex: Introduce arch_mutex_cpu_relax() Peter Zijlstra
2010-10-19 12:24               ` Gerald Schaefer
2010-10-19 15:18                 ` Gerald Schaefer
  -- strict thread matches above, loose matches on Subject: below --
2010-11-22 14:47 Gerald Schaefer
2010-11-22 20:10 ` Andrew Morton
2010-11-23 14:12   ` Gerald Schaefer
2010-11-23 14:20     ` Peter Zijlstra
2010-11-23 15:03       ` Gerald Schaefer

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1287140855.2547.18.camel@thinkpad \
    --to=gerald.schaefer@de.ibm.com \
    --cc=akpm@linux-foundation.org \
    --cc=heiko.carstens@de.ibm.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-s390@vger.kernel.org \
    --cc=mingo@elte.hu \
    --cc=peterz@infradead.org \
    --cc=schwidefsky@de.ibm.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.