[PATCH RT] rwlocks fix for non PREEMPT_RT

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

 



Seems that the addition of RT_RW_READER broke the non PREEMPT_RT case.
This patch fixes it.

Signed-off-by: Steven Rostedt <srostedt@xxxxxxxxxx>
---
 kernel/rtmutex.c |   16 +++++++++++-----
 1 file changed, 11 insertions(+), 5 deletions(-)

Index: linux-2.6.24.7-rt9/kernel/rtmutex.c
===================================================================
--- linux-2.6.24.7-rt9.orig/kernel/rtmutex.c	2008-05-20 23:38:08.000000000 -0400
+++ linux-2.6.24.7-rt9/kernel/rtmutex.c	2008-05-21 15:16:18.000000000 -0400
@@ -123,6 +123,12 @@ static inline void mark_rt_rwlock_check(
 #endif /* CONFIG_PREEMPT_RT */
 #endif

+#ifdef CONFIG_PREEMPT_RT
+#define task_is_reader(task) ((task) == RT_RW_READER)
+#else
+#define task_is_reader(task) (0)
+#endif
+
 int pi_initialized;

 /*
@@ -315,7 +321,7 @@ static int rt_mutex_adjust_prio_chain(st
 	/*
 	 * Readers are special. We may need to boost more than one owner.
 	 */
-	if (task == RT_RW_READER) {
+	if (task_is_reader(task)) {
 		ret = rt_mutex_adjust_readers(orig_lock, orig_waiter,
 					      top_task, lock,
 					      recursion_depth);
@@ -376,7 +382,7 @@ static inline int try_to_steal_lock(stru
 	if (pendowner == current)
 		return 1;

-	WARN_ON(rt_mutex_owner(lock) == RT_RW_READER);
+	WARN_ON(task_is_reader(rt_mutex_owner(lock)));

 	spin_lock(&pendowner->pi_lock);
 	if (!lock_is_stealable(pendowner, mode)) {
@@ -506,7 +512,7 @@ static int task_blocks_on_rt_mutex(struc

 	if (waiter == rt_mutex_top_waiter(lock)) {
 		/* readers are handled differently */
-		if (owner == RT_RW_READER) {
+		if (task_is_reader(owner)) {
 			res = rt_mutex_adjust_readers(lock, waiter,
 						      current, lock, 0);
 			return res;
@@ -524,7 +530,7 @@ static int task_blocks_on_rt_mutex(struc
 	else if (debug_rt_mutex_detect_deadlock(waiter, detect_deadlock))
 		chain_walk = 1;

-	if (!chain_walk || owner == RT_RW_READER)
+	if (!chain_walk || task_is_reader(owner))
 		return 0;

 	/*
@@ -624,7 +630,7 @@ static void remove_waiter(struct rt_mute
 	current->pi_blocked_on = NULL;
 	spin_unlock(&current->pi_lock);

-	if (first && owner != current && owner != RT_RW_READER) {
+	if (first && owner != current && !task_is_reader(owner)) {

 		spin_lock(&owner->pi_lock);


--
To unsubscribe from this list: send the line "unsubscribe linux-rt-users" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [RT Stable]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Samba]     [Video 4 Linux]     [Device Mapper]

  Powered by Linux