Messages in this thread Patch in this message | | | From | "zhaoyang.huang" <> | Subject | [RFC PATCH] kernel: locking: rwsem optimization for rtlinux | Date | Wed, 11 May 2022 16:21:21 +0800 |
| |
From: Zhaoyang Huang <zhaoyang.huang@unisoc.com>
With regard to rtlinux, releasing the lock to RT waiter could be helpful to increase its responding time even if cfs writer listed at the head of the wait_list.
Signed-off-by: Zhaoyang Huang <zhaoyang.huang@unisoc.com> --- kernel/locking/rwsem-xadd.c | 12 ++++++++++++ 1 file changed, 12 insertions(+)
diff --git a/kernel/locking/rwsem-xadd.c b/kernel/locking/rwsem-xadd.c index e795908..1b3f836 100644 --- a/kernel/locking/rwsem-xadd.c +++ b/kernel/locking/rwsem-xadd.c @@ -138,6 +138,18 @@ static void __rwsem_mark_wake(struct rw_semaphore *sem, waiter = list_first_entry(&sem->wait_list, struct rwsem_waiter, list); if (waiter->type == RWSEM_WAITING_FOR_WRITE) { + if ((waiter->task->policy != SCHED_NORMAL) + &&(waiter->task->policy != SCHED_BATCH)) + ; + else { + list_for_each_entry(tmp, sem->wait_list.next, list) { + if ((tmp->task->policy != SCHED_NORMAL) + &&(tmp->task->policy != SCHED_BATCH)) { + wake_q_add(wake_q, tmp->task); + return; + } + } + } if (wake_type == RWSEM_WAKE_ANY) { /* * Mark writer at the front of the queue for wakeup. -- 1.9.1
| |