Skip to content

Commit

Permalink
Revert "rcu: Permit rt_mutex_unlock() with irqs disabled"
Browse files Browse the repository at this point in the history
This reverts commit 5342e26.

The approach taken in this patch was deemed too abusive to mutexes,
and thus too likely to result in maintenance problems in the future.
Instead, we will disallow RCU read-side critical sections that partially
overlap with interrupt-disbled code segments.

Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
  • Loading branch information
Paul E. McKenney committed Dec 11, 2011
1 parent d493011 commit 70321d4
Show file tree
Hide file tree
Showing 2 changed files with 0 additions and 13 deletions.
5 changes: 0 additions & 5 deletions kernel/rcutree_plugin.h
Original file line number Diff line number Diff line change
Expand Up @@ -1165,8 +1165,6 @@ static void rcu_initiate_boost_trace(struct rcu_node *rnp)

#endif /* #else #ifdef CONFIG_RCU_TRACE */

static struct lock_class_key rcu_boost_class;

/*
* Carry out RCU priority boosting on the task indicated by ->exp_tasks
* or ->boost_tasks, advancing the pointer to the next task in the
Expand Down Expand Up @@ -1229,9 +1227,6 @@ static int rcu_boost(struct rcu_node *rnp)
*/
t = container_of(tb, struct task_struct, rcu_node_entry);
rt_mutex_init_proxy_locked(&mtx, t);
/* Avoid lockdep false positives. This rt_mutex is its own thing. */
lockdep_set_class_and_name(&mtx.wait_lock, &rcu_boost_class,
"rcu_boost_mutex");
t->rcu_boost_mutex = &mtx;
raw_spin_unlock_irqrestore(&rnp->lock, flags);
rt_mutex_lock(&mtx); /* Side effect: boosts task t's priority. */
Expand Down
8 changes: 0 additions & 8 deletions kernel/rtmutex.c
Original file line number Diff line number Diff line change
Expand Up @@ -579,7 +579,6 @@ __rt_mutex_slowlock(struct rt_mutex *lock, int state,
struct rt_mutex_waiter *waiter)
{
int ret = 0;
int was_disabled;

for (;;) {
/* Try to acquire the lock: */
Expand All @@ -602,17 +601,10 @@ __rt_mutex_slowlock(struct rt_mutex *lock, int state,

raw_spin_unlock(&lock->wait_lock);

was_disabled = irqs_disabled();
if (was_disabled)
local_irq_enable();

debug_rt_mutex_print_deadlock(waiter);

schedule_rt_mutex(lock);

if (was_disabled)
local_irq_disable();

raw_spin_lock(&lock->wait_lock);
set_current_state(state);
}
Expand Down

0 comments on commit 70321d4

Please sign in to comment.