rtmutex: enable deadlock detection in ww_mutex_lock functions
PATCH 1/1 rtmutex: enable deadlock detection in ww_mutex_lock functions
According the ww-mutex-design.txt documentation, the ww_mutex_lock_interruptible and ww_mutex_lock functions should return -EDEADLK when faced with a deadlock. To do so, the detect_deadlock flag in the rt_mutex_slowlock calls should be enabled. This patch corrects potential deadlocks when running PREEMPT_RT with nouveau driver.
PS: Sorry to post again, CC'ing -rt maintainers now.
Signed-off-by Gustavo Bittencourt <[email protected]>
--- kernel/locking/rtmutex.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
kernel/locking/rtmutex.c +2 -2
@@ -1965,7 +1965,7 @@ __ww_mutex_lock_interruptible(struct ww_mutex *lock, struct ww_acquire_ctx *ww_cmight_sleep ();mutex_acquire (&lock->base.dep_map,0 ,0 , _RET_IP_); - ret =rt_mutex_slowlock (&lock->base.lock,TASK_INTERRUPTIBLE ,NULL ,0 , ww_ctx); + ret =rt_mutex_slowlock (&lock->base.lock,TASK_INTERRUPTIBLE ,NULL ,1 , ww_ctx);if (ret)mutex_release (&lock->base.dep_map,1 , _RET_IP_);else if (!ret && ww_ctx->acquired >1 )
@@ -1984,7 +1984,7 @@ __ww_mutex_lock(struct ww_mutex *lock, struct ww_acquire_ctx *ww_ctx)mutex_acquire_nest (&lock->base.dep_map,0 ,0 , &ww_ctx->dep_map, _RET_IP_); - ret =rt_mutex_slowlock (&lock->base.lock,TASK_UNINTERRUPTIBLE ,NULL ,0 , ww_ctx); + ret =rt_mutex_slowlock (&lock->base.lock,TASK_UNINTERRUPTIBLE ,NULL ,1 , ww_ctx);if (ret)mutex_release (&lock->base.dep_map,1 , _RET_IP_);else if (!ret && ww_ctx->acquired >1 )
Signature · 1 line
1.9.1