diff options
Diffstat (limited to 'kernel/locking/rtmutex.c')
| -rw-r--r-- | kernel/locking/rtmutex.c | 19 | 
1 files changed, 13 insertions, 6 deletions
| diff --git a/kernel/locking/rtmutex.c b/kernel/locking/rtmutex.c index 6bb116c559b4..0c6a48dfcecb 100644 --- a/kernel/locking/rtmutex.c +++ b/kernel/locking/rtmutex.c @@ -446,19 +446,26 @@ static __always_inline void rt_mutex_adjust_prio(struct task_struct *p)  }  /* RT mutex specific wake_q wrappers */ -static __always_inline void rt_mutex_wake_q_add(struct rt_wake_q_head *wqh, -						struct rt_mutex_waiter *w) +static __always_inline void rt_mutex_wake_q_add_task(struct rt_wake_q_head *wqh, +						     struct task_struct *task, +						     unsigned int wake_state)  { -	if (IS_ENABLED(CONFIG_PREEMPT_RT) && w->wake_state != TASK_NORMAL) { +	if (IS_ENABLED(CONFIG_PREEMPT_RT) && wake_state == TASK_RTLOCK_WAIT) {  		if (IS_ENABLED(CONFIG_PROVE_LOCKING))  			WARN_ON_ONCE(wqh->rtlock_task); -		get_task_struct(w->task); -		wqh->rtlock_task = w->task; +		get_task_struct(task); +		wqh->rtlock_task = task;  	} else { -		wake_q_add(&wqh->head, w->task); +		wake_q_add(&wqh->head, task);  	}  } +static __always_inline void rt_mutex_wake_q_add(struct rt_wake_q_head *wqh, +						struct rt_mutex_waiter *w) +{ +	rt_mutex_wake_q_add_task(wqh, w->task, w->wake_state); +} +  static __always_inline void rt_mutex_wake_up_q(struct rt_wake_q_head *wqh)  {  	if (IS_ENABLED(CONFIG_PREEMPT_RT) && wqh->rtlock_task) { |