Patch "io_uring: unlock sqd->lock before sq thread release CPU" has been added to the 6.3-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    io_uring: unlock sqd->lock before sq thread release CPU

to the 6.3-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     io_uring-unlock-sqd-lock-before-sq-thread-release-cp.patch
and it can be found in the queue-6.3 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit 4cc8094dd4c58d5029fc98e197ecd9ff82b7aee2
Author: Wenwen Chen <wenwen.chen@xxxxxxxxxxx>
Date:   Thu May 25 16:26:26 2023 +0800

    io_uring: unlock sqd->lock before sq thread release CPU
    
    [ Upstream commit 533ab73f5b5c95dcb4152b52d5482abcc824c690 ]
    
    The sq thread actively releases CPU resources by calling the
    cond_resched() and schedule() interfaces when it is idle. Therefore,
    more resources are available for other threads to run.
    
    There exists a problem in sq thread: it does not unlock sqd->lock before
    releasing CPU resources every time. This makes other threads pending on
    sqd->lock for a long time. For example, the following interfaces all
    require sqd->lock: io_sq_offload_create(), io_register_iowq_max_workers()
    and io_ring_exit_work().
    
    Before the sq thread releases CPU resources, unlocking sqd->lock will
    provide the user a better experience because it can respond quickly to
    user requests.
    
    Signed-off-by: Kanchan Joshi<joshi.k@xxxxxxxxxxx>
    Signed-off-by: Wenwen Chen<wenwen.chen@xxxxxxxxxxx>
    Link: https://lore.kernel.org/r/20230525082626.577862-1-wenwen.chen@xxxxxxxxxxx
    Signed-off-by: Jens Axboe <axboe@xxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/io_uring/sqpoll.c b/io_uring/sqpoll.c
index 9db4bc1f521a3..5e329e3cd4706 100644
--- a/io_uring/sqpoll.c
+++ b/io_uring/sqpoll.c
@@ -255,9 +255,13 @@ static int io_sq_thread(void *data)
 			sqt_spin = true;
 
 		if (sqt_spin || !time_after(jiffies, timeout)) {
-			cond_resched();
 			if (sqt_spin)
 				timeout = jiffies + sqd->sq_thread_idle;
+			if (unlikely(need_resched())) {
+				mutex_unlock(&sqd->lock);
+				cond_resched();
+				mutex_lock(&sqd->lock);
+			}
 			continue;
 		}
 



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux