All of lore.kernel.org
 help / color / mirror / Atom feed
From: Steven Rostedt <rostedt@goodmis.org>
To: Ingo Molnar <mingo@elte.hu>
Cc: Karsten Wiese <annabellesgarden@yahoo.de>,
	dwalker@mvista.com, george anzinger <george@mvista.com>,
	Adrian Bunk <bunk@stusta.de>,
	Sven-Thorsten Dietrich <sven@mvista.com>,
	LKML <linux-kernel@vger.kernel.org>,
	Thomas Gleixner <tglx@linutronix.de>
Subject: Re: 2.6.13-rc6-rt6
Date: Mon, 22 Aug 2005 15:40:57 -0400	[thread overview]
Message-ID: <1124739657.5809.6.camel@localhost.localdomain> (raw)
In-Reply-To: <20050822183355.GB13888@elte.hu>

Here's a patch to move the pi_lock out of the "fast path".  Thus, only
threads that need to do PI will need to take it.

   Comments?

Please look for any race conditions or side effects that I might have
missed.

Thanks,

-- Steve

(Ingo and Thomas, this is what I already sent you)

Signed-off-by: Steven Rostedt <rostedt@goodmis.org>

Index: linux_realtime_goliath/kernel/fork.c
===================================================================
--- linux_realtime_goliath/kernel/fork.c	(revision 300)
+++ linux_realtime_goliath/kernel/fork.c	(working copy)
@@ -1011,6 +1011,7 @@
 	plist_init(&p->pi_waiters, MAX_PRIO);
 	preempt_enable();
 	p->blocked_on = NULL; /* not blocked yet */
+	spin_lock_init(&p->rt_lock);
 
 	p->tgid = p->pid;
 	if (clone_flags & CLONE_THREAD)
Index: linux_realtime_goliath/kernel/rt.c
===================================================================
--- linux_realtime_goliath/kernel/rt.c	(revision 301)
+++ linux_realtime_goliath/kernel/rt.c	(working copy)
@@ -759,6 +759,7 @@
 	 * If the task is blocked on some other task then boost that
 	 * other task (or tasks) too:
 	 */
+	__raw_spin_lock(&p->rt_lock);
 	for (;;) {
 		struct rt_mutex_waiter *w = p->blocked_on;
 #ifdef CONFIG_RT_DEADLOCK_DETECT
@@ -777,7 +778,6 @@
 		TRACE_BUG_ON_LOCKED(!lock);
 		TRACE_BUG_ON_LOCKED(!lock_owner(lock));
 		if (rt_task(p) && plist_empty(&w->pi_list)) {
-			TRACE_BUG_ON_LOCKED(was_rt);
 			plist_init(&w->pi_list, prio);
 			plist_add(&w->pi_list, &lock_owner(lock)->task->pi_waiters);
 
@@ -803,8 +803,10 @@
 
 		pi_walk++;
 
+		__raw_spin_unlock(&p->rt_lock);
 		p = lock_owner(lock)->task;
 		TRACE_BUG_ON_LOCKED(!p);
+		__raw_spin_lock(&p->rt_lock);
 		/*
 		 * If the dependee is already higher-prio then
 		 * no need to boost it, and all further tasks down
@@ -813,6 +815,7 @@
 		if (p->prio <= prio)
 			break;
 	}
+	__raw_spin_unlock(&p->rt_lock);
 }
 
 /*
@@ -869,7 +872,7 @@
 	/* mark the current thread as blocked on the lock */
 	waiter->eip = eip;
 #endif
-	__raw_spin_lock(&pi_lock);
+	__raw_spin_lock(&task->rt_lock);
 	task->blocked_on = waiter;
 	waiter->lock = lock;
 	waiter->ti = ti;
@@ -881,15 +884,23 @@
 	if (!rt_task(task)) {
 		plist_add(&waiter->list, &lock->wait_list);
 		set_lock_owner_pending(lock);
-		__raw_spin_unlock(&pi_lock);
+		__raw_spin_unlock(&task->rt_lock);
 		return;
 	}
 #endif
-	plist_add(&waiter->pi_list, &lock_owner(lock)->task->pi_waiters);
+	__raw_spin_unlock(&task->rt_lock);
+	__raw_spin_lock(&pi_lock);
 	/*
-	 * Add RT tasks to the head:
+	 * We could have been added to the pi list from another task 
+	 * doing a pi_setprio.
 	 */
-	plist_add(&waiter->list, &lock->wait_list);
+	if (likely(plist_empty(&waiter->pi_list))) {
+		plist_add(&waiter->pi_list, &lock_owner(lock)->task->pi_waiters);
+		/*
+		 * Add RT tasks to the head:
+		 */
+		plist_add(&waiter->list, &lock->wait_list);
+	}
 	set_lock_owner_pending(lock);
 	/*
 	 * If the waiter has higher priority than the owner
Index: linux_realtime_goliath/include/linux/init_task.h
===================================================================
--- linux_realtime_goliath/include/linux/init_task.h	(revision 300)
+++ linux_realtime_goliath/include/linux/init_task.h	(working copy)
@@ -112,6 +112,7 @@
 	.proc_lock	= SPIN_LOCK_UNLOCKED(tsk.proc_lock),		\
 	.delayed_put	= LIST_HEAD_INIT(tsk.delayed_put),		\
 	.pi_waiters	= PLIST_INIT(tsk.pi_waiters, MAX_PRIO),		\
+	.rt_lock	= RAW_SPIN_LOCK_UNLOCKED,			\
 	.journal_info	= NULL,						\
 	.cpu_timers	= INIT_CPU_TIMERS(tsk.cpu_timers),		\
 	.fs_excl	= ATOMIC_INIT(0),				\
Index: linux_realtime_goliath/include/linux/sched.h
===================================================================
--- linux_realtime_goliath/include/linux/sched.h	(revision 301)
+++ linux_realtime_goliath/include/linux/sched.h	(working copy)
@@ -950,6 +950,7 @@
 	/* RT deadlock detection and priority inheritance handling */
 	struct rt_mutex_waiter *blocked_on;
 	struct rt_mutex *pending_owner;
+	raw_spinlock_t rt_lock;
 	unsigned long rt_flags;
 
 



  parent reply	other threads:[~2005-08-22 19:42 UTC|newest]

Thread overview: 82+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-08-16 12:18 2.6.13-rc6-rt3 Ingo Molnar
2005-08-16 15:31 ` 2.6.13-rc6-rt5 Steven Rostedt
2005-08-16 15:44   ` 2.6.13-rc6-rt5 Steven Rostedt
2005-08-16 16:08     ` 2.6.13-rc6-rt5 Steven Rostedt
2005-08-16 16:16       ` 2.6.13-rc6-rt5 Ingo Molnar
2005-08-16 16:22       ` 2.6.13-rc6-rt5 Ingo Molnar
2005-08-16 16:32       ` 2.6.13-rc6-rt5 Ingo Molnar
2005-08-16 16:37         ` 2.6.13-rc6-rt5 Ingo Molnar
2005-08-16 16:52           ` 2.6.13-rc6-rt5 Ingo Molnar
2005-08-16 17:08             ` 2.6.13-rc6-rt6 Ingo Molnar
2005-08-16 17:50               ` 2.6.13-rc6-rt6 Steven Rostedt
2005-08-16 18:07                 ` 2.6.13-rc6-rt6 Steven Rostedt
2005-08-16 18:50                   ` 2.6.13-rc6-rt6 Steven Rostedt
2005-08-17  4:20                     ` 2.6.13-rc6-rt6 Steven Rostedt
2005-08-17  5:46                       ` 2.6.13-rc6-rt6 Steven Rostedt
2005-08-17  6:47                         ` 2.6.13-rc6-rt6 Ingo Molnar
2005-08-17 14:05                           ` 2.6.13-rc6-rt6 Steven Rostedt
2005-08-17 14:24                             ` 2.6.13-rc6-rt6 Steven Rostedt
2005-08-17 16:13                               ` 2.6.13-rc6-rt6 Steven Rostedt
2005-08-17 16:23                                 ` 2.6.13-rc6-rt6 Ingo Molnar
2005-08-17 17:10                                   ` 2.6.13-rc6-rt6 K.R. Foley
2005-08-17 18:31                                     ` 2.6.13-rc6-rt6 Steven Rostedt
2005-08-17 19:31                                       ` 2.6.13-rc6-rt6 Steven Rostedt
2005-08-18  0:02                                   ` 2.6.13-rc6-rt6 Steven Rostedt
2005-08-18  2:44                                     ` 2.6.13-rc6-rt6 Steven Rostedt
     [not found]                                       ` <20050822075012.GB19386@elte.hu>
     [not found]                                         ` <1124704837.5208.22.camel@localhost.localdomain>
     [not found]                                           ` <20050822101632.GA28803@elte.hu>
     [not found]                                             ` <1124710309.5208.30.camel@localhost.localdomain>
     [not found]                                               ` <20050822113858.GA1160@elte.hu>
     [not found]                                                 ` <1124715755.5647.4.camel@localhost.localdomain>
     [not found]                                                   ` <20050822183355.GB13888@elte.hu>
2005-08-22 19:40                                                     ` Steven Rostedt [this message]
2005-08-22 19:44                                                       ` [RFC] RT-patch update to remove the global pi_lock Steven Rostedt
2005-08-22 22:19                                                         ` Daniel Walker
2005-08-23  0:26                                                           ` Steven Rostedt
2005-08-23  0:51                                                             ` Daniel Walker
2005-08-23  1:32                                                               ` Steven Rostedt
2005-08-23  3:38                                                                 ` Steven Rostedt
     [not found]                                                                   ` <1124908080.5604.22.camel@localhost.localdomain>
     [not found]                                                                     ` <1124917003.5711.8.camel@localhost.localdomain>
2005-08-24 21:05                                                                       ` Thomas Gleixner
2005-08-25  1:13                                                                       ` Steven Rostedt
2005-08-25  1:38                                                                         ` Daniel Walker
2005-08-25  1:48                                                                           ` Steven Rostedt
2005-08-25  6:31                                                                         ` Ingo Molnar
2005-08-25  6:35                                                                         ` Ingo Molnar
2005-08-25 16:15                                                                           ` Steven Rostedt
2005-08-25 19:34                                                                             ` Ingo Molnar
2005-08-25 19:46                                                                               ` Steven Rostedt
2005-08-23  5:29                                                             ` Ingo Molnar
2005-08-25 14:47                                                         ` Steven Rostedt
2005-08-25 15:06                                                           ` Steven Rostedt
2005-08-25 17:47                                                             ` Ingo Molnar
2005-08-25 20:09                                                               ` Steven Rostedt
2005-08-25 21:32                                                                 ` Daniel Walker
2005-08-26  2:23                                                                 ` Steven Rostedt
2005-08-26 13:52                                                                   ` Steven Rostedt
2005-08-30 15:00                                                                     ` Steven Rostedt
2005-08-30 15:52                                                                       ` Steven Rostedt
2005-08-30 23:08                                                                         ` Steven Rostedt
2005-08-31 15:01                                                                         ` [FYI] 2.6.13-rt3 and a nanosleep jitter test Steven Rostedt
2005-08-31 15:12                                                                           ` Daniel Walker
2005-08-31 15:30                                                                             ` Steven Rostedt
2005-08-31 15:13                                                                           ` Daniel Walker
2005-08-31 15:19                                                                             ` Steven Rostedt
2005-08-31 15:30                                                                               ` Daniel Walker
2005-08-23  5:46                                                       ` 2.6.13-rc6-rt6 Ingo Molnar
2005-08-19 21:22                                   ` 2.6.13-rc6-rt6 Steven Rostedt
2005-08-19 22:47                                     ` 2.6.13-rc6-rt6 Paul E. McKenney
2005-08-19 23:02                                       ` 2.6.13-rc6-rt6 Steven Rostedt
2005-08-19 23:12                                         ` 2.6.13-rc6-rt6 Paul E. McKenney
2005-08-19 23:12                                         ` 2.6.13-rc6-rt6 Paul E. McKenney
2005-08-19 23:20                                           ` 2.6.13-rc6-rt6 Steven Rostedt
2005-08-19 23:20                                           ` 2.6.13-rc6-rt6 Steven Rostedt
2005-08-19 23:44                                             ` 2.6.13-rc6-rt6 Paul E. McKenney
2005-08-19 23:44                                             ` 2.6.13-rc6-rt6 Paul E. McKenney
2005-08-19 23:02                                       ` 2.6.13-rc6-rt6 Steven Rostedt
2005-08-19 22:47                                     ` 2.6.13-rc6-rt6 Paul E. McKenney
2005-08-22  7:53                                     ` 2.6.13-rc6-rt6 Ingo Molnar
2005-08-19 21:22                                   ` 2.6.13-rc6-rt6 Steven Rostedt
2005-08-17 19:27                                 ` 2.6.13-rc6-rt6 Ingo Molnar
2005-08-17 19:39                                   ` 2.6.13-rc6-rt6 Steven Rostedt
2005-08-17 17:32                           ` 2.6.13-rc6-rt6 Steven Rostedt
2005-08-17 19:34                             ` 2.6.13-rc6-rt6 Steven Rostedt
2005-08-17  5:59                     ` 2.6.13-rc6-rt6 Ingo Molnar
2005-08-17 20:01 ` 2.6.13-rc6-rt8 Peter Bortas
2005-08-23  6:14   ` 2.6.13-rc6-rt8 Ingo Molnar
2005-08-28 20:36     ` 2.6.13-rc6-rt8 Peter Bortas
2005-08-18  9:57 ` 2.6.13-rc6-rt3 Alistair John Strachan
2005-08-18 10:00   ` 2.6.13-rc6-rt3 Thomas Gleixner

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=1124739657.5809.6.camel@localhost.localdomain \
    --to=rostedt@goodmis.org \
    --cc=annabellesgarden@yahoo.de \
    --cc=bunk@stusta.de \
    --cc=dwalker@mvista.com \
    --cc=george@mvista.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@elte.hu \
    --cc=sven@mvista.com \
    --cc=tglx@linutronix.de \
    /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.