From: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
To: akpm@linux-foundation.org, linux-kernel@vger.kernel.org
Cc: Mike Mason <mmlnx@us.ibm.com>, David Wilder <dwilder@us.ibm.com>,
Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
Subject: [RFC 7/7] Add Markers Into Semaphore Primitives
Date: Tue, 13 Nov 2007 14:33:56 -0500 [thread overview]
Message-ID: <20071113194025.807441753@polymtl.ca> (raw)
In-Reply-To: 20071113193349.214098508@polymtl.ca
[-- Attachment #1: add-markers-into-semaphore-primitives.patch --]
[-- Type: text/plain, Size: 3111 bytes --]
This patch adds several markers around semaphore primitives.
Along with a tracing application this patch can be useful for measuring
kernel semaphore usage and contention.
Signed-off-by: Mike Mason <mmlnx@us.ibm.com>
Signed-off-by: David Wilder <dwilder@us.ibm.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
---
lib/semaphore-sleepers.c | 9 +++++++++
1 files changed, 9 insertions(+), 0 deletions(-)
diff --git a/lib/semaphore-sleepers.c b/lib/semaphore-sleepers.c
index 1281805..5343a96 100644
--- a/lib/semaphore-sleepers.c
+++ b/lib/semaphore-sleepers.c
@@ -15,6 +15,7 @@
#include <linux/sched.h>
#include <linux/err.h>
#include <linux/init.h>
+#include <linux/marker.h>
#include <asm/semaphore.h>
/*
@@ -50,6 +51,7 @@
fastcall void __up(struct semaphore *sem)
{
+ trace_mark(sem_up, "%p", sem);
wake_up(&sem->wait);
}
@@ -59,6 +61,7 @@ fastcall void __sched __down(struct semaphore * sem)
DECLARE_WAITQUEUE(wait, tsk);
unsigned long flags;
+ trace_mark(sem_down, "%p", sem);
tsk->state = TASK_UNINTERRUPTIBLE;
spin_lock_irqsave(&sem->wait.lock, flags);
add_wait_queue_exclusive_locked(&sem->wait, &wait);
@@ -73,12 +76,14 @@ fastcall void __sched __down(struct semaphore * sem)
* the wait_queue_head.
*/
if (!atomic_add_negative(sleepers - 1, &sem->count)) {
+ trace_mark(sem_down_resume, "%p", sem);
sem->sleepers = 0;
break;
}
sem->sleepers = 1; /* us - see -1 above */
spin_unlock_irqrestore(&sem->wait.lock, flags);
+ trace_mark(sem_down_sched, "%p", sem);
schedule();
spin_lock_irqsave(&sem->wait.lock, flags);
@@ -97,6 +102,7 @@ fastcall int __sched __down_interruptible(struct semaphore * sem)
DECLARE_WAITQUEUE(wait, tsk);
unsigned long flags;
+ trace_mark(sem_down_intr, "%p", sem);
tsk->state = TASK_INTERRUPTIBLE;
spin_lock_irqsave(&sem->wait.lock, flags);
add_wait_queue_exclusive_locked(&sem->wait, &wait);
@@ -113,6 +119,7 @@ fastcall int __sched __down_interruptible(struct semaphore * sem)
* and exit.
*/
if (signal_pending(current)) {
+ trace_mark(sem_down_intr_fail, "%p", sem);
retval = -EINTR;
sem->sleepers = 0;
atomic_add(sleepers, &sem->count);
@@ -126,12 +133,14 @@ fastcall int __sched __down_interruptible(struct semaphore * sem)
* still hoping to get the semaphore.
*/
if (!atomic_add_negative(sleepers - 1, &sem->count)) {
+ trace_mark(sem_down_intr_resume, "%p", sem);
sem->sleepers = 0;
break;
}
sem->sleepers = 1; /* us - see -1 above */
spin_unlock_irqrestore(&sem->wait.lock, flags);
+ trace_mark(sem_down_intr_sched, "%p", sem);
schedule();
spin_lock_irqsave(&sem->wait.lock, flags);
-
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/
--
Mathieu Desnoyers
Computer Engineering Ph.D. Student, Ecole Polytechnique de Montreal
OpenPGP key fingerprint: 8CD5 52C3 8E3C 4140 715F BA06 3F25 A8FE 3BAE 9A68
prev parent reply other threads:[~2007-11-13 19:43 UTC|newest]
Thread overview: 46+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-11-13 19:33 [RFC 0/7] LTTng Kernel Instrumentation (Architecture Independent) Mathieu Desnoyers
2007-11-13 19:33 ` [RFC 1/7] Include marker.h in kernel.h -- temporary, for code readability Mathieu Desnoyers
2007-11-13 19:33 ` [RFC 2/7] LTTng instrumentation fs Mathieu Desnoyers
2007-11-13 19:33 ` [RFC 3/7] LTTng instrumentation ipc Mathieu Desnoyers
2007-11-13 19:33 ` [RFC 4/7] LTTng instrumentation kernel Mathieu Desnoyers
2007-11-15 23:30 ` Mike Mason
2007-11-15 23:54 ` Mike Mason
2007-11-16 2:42 ` Mathieu Desnoyers
2007-11-16 2:22 ` Mathieu Desnoyers
2007-11-13 19:33 ` [RFC 5/7] LTTng instrumentation mm Mathieu Desnoyers
2007-11-15 21:06 ` Dave Hansen
2007-11-15 21:51 ` Mathieu Desnoyers
2007-11-15 22:16 ` Dave Hansen
2007-11-16 14:30 ` Mathieu Desnoyers
2007-11-19 18:04 ` Dave Hansen
2007-11-28 14:09 ` [RFC PATCH] LTTng instrumentation mm (using page_to_pfn) Mathieu Desnoyers
2007-11-28 16:54 ` Dave Hansen
2007-11-29 2:34 ` Mathieu Desnoyers
2007-11-29 6:25 ` Dave Hansen
2007-11-30 16:11 ` [RFC PATCH] LTTng instrumentation mm (updated) Mathieu Desnoyers
2007-11-30 17:46 ` Dave Hansen
2007-11-30 17:05 ` Mathieu Desnoyers
2007-11-30 18:42 ` Dave Hansen
2007-11-30 19:10 ` Mathieu Desnoyers
2007-12-04 19:15 ` Frank Ch. Eigler
2007-12-04 19:25 ` Mathieu Desnoyers
2007-12-04 19:40 ` Dave Hansen
2007-12-04 20:05 ` Mathieu Desnoyers
2007-12-04 20:24 ` Dave Hansen
2007-12-04 20:28 ` Dave Hansen
2007-11-16 14:47 ` [RFC 5/7] LTTng instrumentation mm Mathieu Desnoyers
2007-11-19 18:07 ` Dave Hansen
2007-11-19 18:52 ` Mathieu Desnoyers
2007-11-19 19:00 ` Mathieu Desnoyers
2007-11-19 19:43 ` Dave Hansen
2007-11-19 19:43 ` Dave Hansen
2007-11-19 19:52 ` [PATCH] Cast __page_to_pfn to unsigned long in CONFIG_SPARSEMEM Mathieu Desnoyers
2007-11-19 20:09 ` Dave Hansen
2007-11-19 20:20 ` [PATCH] Cast page_to_pfn " Mathieu Desnoyers
2007-11-19 21:08 ` Andrew Morton
2007-11-19 21:19 ` Dave Hansen
2007-11-19 21:26 ` Dave Hansen
2007-11-21 20:12 ` Christoph Lameter
2007-11-20 17:34 ` Mathieu Desnoyers
2007-11-13 19:33 ` [RFC 6/7] LTTng instrumentation net Mathieu Desnoyers
2007-11-13 19:33 ` Mathieu Desnoyers [this message]
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=20071113194025.807441753@polymtl.ca \
--to=mathieu.desnoyers@polymtl.ca \
--cc=akpm@linux-foundation.org \
--cc=dwilder@us.ibm.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mmlnx@us.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).