]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
Fixes for 5.8
authorSasha Levin <sashal@kernel.org>
Tue, 11 Aug 2020 16:50:30 +0000 (12:50 -0400)
committerSasha Levin <sashal@kernel.org>
Tue, 11 Aug 2020 16:50:30 +0000 (12:50 -0400)
Signed-off-by: Sasha Levin <sashal@kernel.org>
queue-5.8/io_uring-abstract-out-task-work-running.patch [new file with mode: 0644]
queue-5.8/kunit-capture-stderr-on-all-make-subprocess-calls.patch [new file with mode: 0644]
queue-5.8/series

diff --git a/queue-5.8/io_uring-abstract-out-task-work-running.patch b/queue-5.8/io_uring-abstract-out-task-work-running.patch
new file mode 100644 (file)
index 0000000..fe1cffc
--- /dev/null
@@ -0,0 +1,125 @@
+From 66696b15634af1d0cbfec1f3ee27388ea5ad3151 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 11 Aug 2020 12:48:13 -0400
+Subject: io_uring: abstract out task work running
+
+From: Jens Axboe <axboe@kernel.dk>
+
+[ Upstream commit 4c6e277c4cc4a6b3b2b9c66a7b014787ae757cc1 ]
+
+Provide a helper to run task_work instead of checking and running
+manually in a bunch of different spots. While doing so, also move the
+task run state setting where we run the task work. Then we can move it
+out of the callback helpers. This also helps ensure we only do this once
+per task_work list run, not per task_work item.
+
+Suggested-by: Oleg Nesterov <oleg@redhat.com>
+Signed-off-by: Jens Axboe <axboe@kernel.dk>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ fs/io_uring.c | 32 +++++++++++++++++++-------------
+ 1 file changed, 19 insertions(+), 13 deletions(-)
+
+diff --git a/fs/io_uring.c b/fs/io_uring.c
+index 493e5047e67c9..95bacab047ddb 100644
+--- a/fs/io_uring.c
++++ b/fs/io_uring.c
+@@ -1747,6 +1747,17 @@ static int io_put_kbuf(struct io_kiocb *req)
+       return cflags;
+ }
++static inline bool io_run_task_work(void)
++{
++      if (current->task_works) {
++              __set_current_state(TASK_RUNNING);
++              task_work_run();
++              return true;
++      }
++
++      return false;
++}
++
+ static void io_iopoll_queue(struct list_head *again)
+ {
+       struct io_kiocb *req;
+@@ -1936,6 +1947,7 @@ static int io_iopoll_check(struct io_ring_ctx *ctx, unsigned *nr_events,
+                */
+               if (!(++iters & 7)) {
+                       mutex_unlock(&ctx->uring_lock);
++                      io_run_task_work();
+                       mutex_lock(&ctx->uring_lock);
+               }
+@@ -4356,7 +4368,6 @@ static void io_async_task_func(struct callback_head *cb)
+       kfree(apoll);
+       if (!canceled) {
+-              __set_current_state(TASK_RUNNING);
+               if (io_sq_thread_acquire_mm(ctx, req)) {
+                       io_cqring_add_event(req, -EFAULT);
+                       goto end_req;
+@@ -6082,8 +6093,7 @@ static int io_sq_thread(void *data)
+                       if (!list_empty(&ctx->poll_list) || need_resched() ||
+                           (!time_after(jiffies, timeout) && ret != -EBUSY &&
+                           !percpu_ref_is_dying(&ctx->refs))) {
+-                              if (current->task_works)
+-                                      task_work_run();
++                              io_run_task_work();
+                               cond_resched();
+                               continue;
+                       }
+@@ -6115,8 +6125,7 @@ static int io_sq_thread(void *data)
+                                       finish_wait(&ctx->sqo_wait, &wait);
+                                       break;
+                               }
+-                              if (current->task_works) {
+-                                      task_work_run();
++                              if (io_run_task_work()) {
+                                       finish_wait(&ctx->sqo_wait, &wait);
+                                       continue;
+                               }
+@@ -6145,8 +6154,7 @@ static int io_sq_thread(void *data)
+               timeout = jiffies + ctx->sq_thread_idle;
+       }
+-      if (current->task_works)
+-              task_work_run();
++      io_run_task_work();
+       io_sq_thread_drop_mm(ctx);
+       revert_creds(old_cred);
+@@ -6211,9 +6219,8 @@ static int io_cqring_wait(struct io_ring_ctx *ctx, int min_events,
+       do {
+               if (io_cqring_events(ctx, false) >= min_events)
+                       return 0;
+-              if (!current->task_works)
++              if (!io_run_task_work())
+                       break;
+-              task_work_run();
+       } while (1);
+       if (sig) {
+@@ -6235,8 +6242,8 @@ static int io_cqring_wait(struct io_ring_ctx *ctx, int min_events,
+               prepare_to_wait_exclusive(&ctx->wait, &iowq.wq,
+                                               TASK_INTERRUPTIBLE);
+               /* make sure we run task_work before checking for signals */
+-              if (current->task_works)
+-                      task_work_run();
++              if (io_run_task_work())
++                      continue;
+               if (signal_pending(current)) {
+                       if (current->jobctl & JOBCTL_TASK_WORK) {
+                               spin_lock_irq(&current->sighand->siglock);
+@@ -7655,8 +7662,7 @@ SYSCALL_DEFINE6(io_uring_enter, unsigned int, fd, u32, to_submit,
+       int submitted = 0;
+       struct fd f;
+-      if (current->task_works)
+-              task_work_run();
++      io_run_task_work();
+       if (flags & ~(IORING_ENTER_GETEVENTS | IORING_ENTER_SQ_WAKEUP))
+               return -EINVAL;
+-- 
+2.25.1
+
diff --git a/queue-5.8/kunit-capture-stderr-on-all-make-subprocess-calls.patch b/queue-5.8/kunit-capture-stderr-on-all-make-subprocess-calls.patch
new file mode 100644 (file)
index 0000000..3bfeaa5
--- /dev/null
@@ -0,0 +1,65 @@
+From 477b86610e58a7a0406253b19ab8d6578666892f Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 8 Jul 2020 14:35:43 -0700
+Subject: kunit: capture stderr on all make subprocess calls
+
+From: Will Chen <chenwi@google.com>
+
+[ Upstream commit 5a9fcad71caa970f30aef99134a1cd19bc4b8eea ]
+
+Direct stderr to subprocess.STDOUT so error messages get included in the
+subprocess.CalledProcessError exceptions output field. This results in
+more meaningful error messages for the user.
+
+This is already being done in the make_allyesconfig method. Do the same
+for make_mrproper, make_olddefconfig, and make methods.
+
+With this, failures on unclean trees [1] will give users an error
+message that includes:
+"The source tree is not clean, please run 'make ARCH=um mrproper'"
+
+[1] https://bugzilla.kernel.org/show_bug.cgi?id=205219
+
+Signed-off-by: Will Chen <chenwi@google.com>
+Reviewed-by: Brendan Higgins <brendanhiggins@google.com>
+Tested-by: Brendan Higgins <brendanhiggins@google.com>
+Signed-off-by: Shuah Khan <skhan@linuxfoundation.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ tools/testing/kunit/kunit_kernel.py | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/tools/testing/kunit/kunit_kernel.py b/tools/testing/kunit/kunit_kernel.py
+index 63dbda2d029f6..e20e2056cb380 100644
+--- a/tools/testing/kunit/kunit_kernel.py
++++ b/tools/testing/kunit/kunit_kernel.py
+@@ -34,7 +34,7 @@ class LinuxSourceTreeOperations(object):
+       def make_mrproper(self):
+               try:
+-                      subprocess.check_output(['make', 'mrproper'])
++                      subprocess.check_output(['make', 'mrproper'], stderr=subprocess.STDOUT)
+               except OSError as e:
+                       raise ConfigError('Could not call make command: ' + e)
+               except subprocess.CalledProcessError as e:
+@@ -47,7 +47,7 @@ class LinuxSourceTreeOperations(object):
+               if build_dir:
+                       command += ['O=' + build_dir]
+               try:
+-                      subprocess.check_output(command, stderr=subprocess.PIPE)
++                      subprocess.check_output(command, stderr=subprocess.STDOUT)
+               except OSError as e:
+                       raise ConfigError('Could not call make command: ' + e)
+               except subprocess.CalledProcessError as e:
+@@ -77,7 +77,7 @@ class LinuxSourceTreeOperations(object):
+               if build_dir:
+                       command += ['O=' + build_dir]
+               try:
+-                      subprocess.check_output(command)
++                      subprocess.check_output(command, stderr=subprocess.STDOUT)
+               except OSError as e:
+                       raise BuildError('Could not call execute make: ' + e)
+               except subprocess.CalledProcessError as e:
+-- 
+2.25.1
+
index 1c44f8a6f0abaaf85ece424e483fb77bf8e62578..d7b4b50df3a59caa78343a779bae202c9650e6a1 100644 (file)
@@ -1 +1,3 @@
 tracepoint-mark-__tracepoint_string-s-__used.patch
+kunit-capture-stderr-on-all-make-subprocess-calls.patch
+io_uring-abstract-out-task-work-running.patch