From e33d2a9f612d0a64253eb105742961048a9c448c Mon Sep 17 00:00:00 2001 From: Steven Rostedt Date: Fri, 3 Jul 2009 13:16:26 -0500 Subject: [PATCH] rt-locks: implement rt_downgrade_write commit 86ed1c888ff040e26603e48ff56c163df9c2cd59 in tip. The current code of rt_downgrade_write simply does a BUG(). There are places in the kernel that uses this code, and will crash a runnning preempt-rt kernel. The rt_downgrade_write converts a rwsem held for write into a rwsem held for read without ever releasing the semaphore. In -rt, the rwsems are simply a mutex. There is nothing different between a rwsem held for write, and one held for read. The difference is that one held for read can nest. This patch changes the BUG_ON() to simply BUG if the caller is not the owner of the semaphore. This patch comes from my rt-git repo, and has been tested there. Signed-off-by: Steven Rostedt Cc: Peter Zijlstra Cc: Clark Williams Cc: "Luis Claudio R. Goncalves" LKML-Reference: Signed-off-by: Thomas Gleixner Signed-off-by: Paul Gortmaker --- kernel/rt.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/kernel/rt.c b/kernel/rt.c index df30930..6dd475a 100644 --- a/kernel/rt.c +++ b/kernel/rt.c @@ -315,7 +315,7 @@ EXPORT_SYMBOL(rt_up_read); */ void rt_downgrade_write(struct rw_semaphore *rwsem) { - BUG(); + BUG_ON(rt_mutex_real_owner(&rwsem->lock) != current); } EXPORT_SYMBOL(rt_downgrade_write); -- 1.7.0.4