Re: [RFC] RT-patch update to remove the global pi_lock

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Ingo,

The following code segment from pick_new_owner:


	waiter = plist_first_entry(&lock->wait_list, struct rt_mutex_waiter, list);

 try_again:
	trace_special_pid(waiter->ti->task->pid, waiter->ti->task->prio, 0);

#ifdef ALL_TASKS_PI
	check_pi_list_present(lock, waiter, old_owner);
#endif
	new_owner = waiter->ti;
	/*
	 * The new owner is still blocked on this lock, so we
	 * must release the lock->wait_lock before grabing 
	 * the new_owner lock.
	 */
	__raw_spin_unlock(&lock->wait_lock);
	__raw_spin_lock(&new_owner->task->pi_lock);
	__raw_spin_lock(&lock->wait_lock);
	/*
	 * In this split second of releasing the lock, a high priority 
	 * process could have come along and blocked as well.
	 */
	waiter = plist_first_entry(&lock->wait_list, struct rt_mutex_waiter, list);
	if (unlikely(waiter->ti != new_owner)) {
		__raw_spin_unlock(&new_owner->task->pi_lock);
		goto try_again;
	}


Is basically a waste on UP. Should the following patch be applied
instead?


--- linux_realtime_ernie/kernel/rt.c.orig	2005-08-26 09:46:34.000000000 -0400
+++ linux_realtime_ernie/kernel/rt.c	2005-08-26 09:48:17.000000000 -0400
@@ -1046,7 +1046,9 @@ pick_new_owner(struct rt_mutex *lock, st
 	 */
 	waiter = plist_first_entry(&lock->wait_list, struct rt_mutex_waiter, list);
 
+#ifdef CONFIG_SMP
  try_again:
+#endif
 	trace_special_pid(waiter->ti->task->pid, waiter->ti->task->prio, 0);
 
 #ifdef ALL_TASKS_PI
@@ -1065,11 +1067,13 @@ pick_new_owner(struct rt_mutex *lock, st
 	 * In this split second of releasing the lock, a high priority 
 	 * process could have come along and blocked as well.
 	 */
+#ifdef CONFIG_SMP
 	waiter = plist_first_entry(&lock->wait_list, struct rt_mutex_waiter, list);
 	if (unlikely(waiter->ti != new_owner)) {
 		__raw_spin_unlock(&new_owner->task->pi_lock);
 		goto try_again;
 	}
+#endif
 	plist_del_init(&waiter->list, &lock->wait_list);
 
 	__raw_spin_lock(&old_owner->task->pi_lock);



-- Steve


PS.  I notice I have a large CC on this thread.  If anyone wants me to
take them off, just send me a private email, and I'll do that.

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[Index of Archives]     [Kernel Newbies]     [Netfilter]     [Bugtraq]     [Photo]     [Gimp]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Video 4 Linux]     [Linux for the blind]
  Powered by Linux