All of lore.kernel.org
 help / color / mirror / Atom feed
From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: stable@vger.kernel.org
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	patches@lists.linux.dev, Jens Axboe <axboe@kernel.dk>
Subject: [PATCH 5.10 01/63] kernel: provide create_io_thread() helper
Date: Tue,  3 Jan 2023 09:13:31 +0100	[thread overview]
Message-ID: <20230103081308.640079585@linuxfoundation.org> (raw)
In-Reply-To: <20230103081308.548338576@linuxfoundation.org>

From: Jens Axboe <axboe@kernel.dk>

[ Upstream commit cc440e8738e5c875297ac0e90316745093be7e28 ]

Provide a generic helper for setting up an io_uring worker. Returns a
task_struct so that the caller can do whatever setup is needed, then call
wake_up_new_task() to kick it into gear.

Add a kernel_clone_args member, io_thread, which tells copy_process() to
mark the task with PF_IO_WORKER.

Signed-off-by: Jens Axboe <axboe@kernel.dk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 include/linux/sched/task.h |    2 ++
 kernel/fork.c              |   30 ++++++++++++++++++++++++++++++
 2 files changed, 32 insertions(+)

--- a/include/linux/sched/task.h
+++ b/include/linux/sched/task.h
@@ -31,6 +31,7 @@ struct kernel_clone_args {
 	/* Number of elements in *set_tid */
 	size_t set_tid_size;
 	int cgroup;
+	int io_thread;
 	struct cgroup *cgrp;
 	struct css_set *cset;
 };
@@ -85,6 +86,7 @@ extern void exit_files(struct task_struc
 extern void exit_itimers(struct task_struct *);
 
 extern pid_t kernel_clone(struct kernel_clone_args *kargs);
+struct task_struct *create_io_thread(int (*fn)(void *), void *arg, int node);
 struct task_struct *fork_idle(int);
 struct mm_struct *copy_init_mm(void);
 extern pid_t kernel_thread(int (*fn)(void *), void *arg, unsigned long flags);
--- a/kernel/fork.c
+++ b/kernel/fork.c
@@ -1949,6 +1949,8 @@ static __latent_entropy struct task_stru
 	p = dup_task_struct(current, node);
 	if (!p)
 		goto fork_out;
+	if (args->io_thread)
+		p->flags |= PF_IO_WORKER;
 
 	/*
 	 * This _must_ happen before we call free_task(), i.e. before we jump
@@ -2416,6 +2418,34 @@ struct mm_struct *copy_init_mm(void)
 }
 
 /*
+ * This is like kernel_clone(), but shaved down and tailored to just
+ * creating io_uring workers. It returns a created task, or an error pointer.
+ * The returned task is inactive, and the caller must fire it up through
+ * wake_up_new_task(p). All signals are blocked in the created task.
+ */
+struct task_struct *create_io_thread(int (*fn)(void *), void *arg, int node)
+{
+	unsigned long flags = CLONE_FS|CLONE_FILES|CLONE_SIGHAND|CLONE_THREAD|
+				CLONE_IO;
+	struct kernel_clone_args args = {
+		.flags		= ((lower_32_bits(flags) | CLONE_VM |
+				    CLONE_UNTRACED) & ~CSIGNAL),
+		.exit_signal	= (lower_32_bits(flags) & CSIGNAL),
+		.stack		= (unsigned long)fn,
+		.stack_size	= (unsigned long)arg,
+		.io_thread	= 1,
+	};
+	struct task_struct *tsk;
+
+	tsk = copy_process(NULL, 0, node, &args);
+	if (!IS_ERR(tsk)) {
+		sigfillset(&tsk->blocked);
+		sigdelsetmask(&tsk->blocked, sigmask(SIGKILL));
+	}
+	return tsk;
+}
+
+/*
  *  Ok, this is the main fork-routine.
  *
  * It copies the process, and if successful kick-starts



  reply	other threads:[~2023-01-03  8:14 UTC|newest]

Thread overview: 82+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-01-03  8:13 [PATCH 5.10 00/63] 5.10.162-rc1 review Greg Kroah-Hartman
2023-01-03  8:13 ` Greg Kroah-Hartman [this message]
2023-01-03  8:13 ` [PATCH 5.10 02/63] iov_iter: add helper to save iov_iter state Greg Kroah-Hartman
2023-01-03  8:13 ` [PATCH 5.10 03/63] saner calling conventions for unlazy_child() Greg Kroah-Hartman
2023-01-03  8:13 ` [PATCH 5.10 04/63] fs: add support for LOOKUP_CACHED Greg Kroah-Hartman
2023-01-03  8:13 ` [PATCH 5.10 05/63] fix handling of nd->depth on LOOKUP_CACHED failures in try_to_unlazy* Greg Kroah-Hartman
2023-01-03  8:13 ` [PATCH 5.10 06/63] Make sure nd->path.mnt and nd->path.dentry are always valid pointers Greg Kroah-Hartman
2023-01-03  8:13 ` [PATCH 5.10 07/63] fs: expose LOOKUP_CACHED through openat2() RESOLVE_CACHED Greg Kroah-Hartman
2023-01-03  8:13 ` [PATCH 5.10 08/63] tools headers UAPI: Sync openat2.h with the kernel sources Greg Kroah-Hartman
2023-01-03  8:13 ` [PATCH 5.10 09/63] net: provide __sys_shutdown_sock() that takes a socket Greg Kroah-Hartman
2023-01-03  8:13 ` [PATCH 5.10 10/63] net: add accept helper not installing fd Greg Kroah-Hartman
2023-01-03  8:13 ` [PATCH 5.10 11/63] signal: Add task_sigpending() helper Greg Kroah-Hartman
2023-01-03  8:13 ` [PATCH 5.10 12/63] fs: make do_renameat2() take struct filename Greg Kroah-Hartman
2023-01-03  8:13 ` [PATCH 5.10 13/63] file: Rename __close_fd_get_file close_fd_get_file Greg Kroah-Hartman
2023-01-03  8:13 ` [PATCH 5.10 14/63] fs: provide locked helper variant of close_fd_get_file() Greg Kroah-Hartman
2023-01-03  8:13 ` [PATCH 5.10 15/63] entry: Add support for TIF_NOTIFY_SIGNAL Greg Kroah-Hartman
2023-01-03  8:13 ` [PATCH 5.10 16/63] task_work: Use TIF_NOTIFY_SIGNAL if available Greg Kroah-Hartman
2023-01-03  8:13 ` [PATCH 5.10 17/63] x86: Wire up TIF_NOTIFY_SIGNAL Greg Kroah-Hartman
2023-01-03  8:13 ` [PATCH 5.10 18/63] arc: add support for TIF_NOTIFY_SIGNAL Greg Kroah-Hartman
2023-01-03  8:13   ` Greg Kroah-Hartman
2023-01-03  8:13 ` [PATCH 5.10 19/63] arm64: " Greg Kroah-Hartman
2023-01-03  8:13   ` Greg Kroah-Hartman
2023-01-03  8:13 ` [PATCH 5.10 20/63] m68k: " Greg Kroah-Hartman
2023-01-03  8:13 ` [PATCH 5.10 21/63] nios32: " Greg Kroah-Hartman
2023-01-03  8:13 ` [PATCH 5.10 22/63] parisc: " Greg Kroah-Hartman
2023-01-03  8:13 ` [PATCH 5.10 23/63] powerpc: " Greg Kroah-Hartman
2023-01-03  8:13   ` Greg Kroah-Hartman
2023-01-03  8:13 ` [PATCH 5.10 24/63] mips: " Greg Kroah-Hartman
2023-01-03  8:13 ` [PATCH 5.10 25/63] s390: " Greg Kroah-Hartman
2023-01-03  8:13 ` [PATCH 5.10 26/63] um: " Greg Kroah-Hartman
2023-01-03  8:13   ` Greg Kroah-Hartman
2023-01-03  8:13 ` [PATCH 5.10 27/63] sh: " Greg Kroah-Hartman
2023-01-03  8:13 ` [PATCH 5.10 28/63] openrisc: " Greg Kroah-Hartman
2023-01-03  8:13   ` Greg Kroah-Hartman
2023-01-03  8:13 ` [PATCH 5.10 29/63] csky: " Greg Kroah-Hartman
2023-01-03  8:14 ` [PATCH 5.10 30/63] hexagon: " Greg Kroah-Hartman
2023-01-03  8:14 ` [PATCH 5.10 31/63] microblaze: " Greg Kroah-Hartman
2023-01-03  8:14 ` [PATCH 5.10 32/63] arm: " Greg Kroah-Hartman
2023-01-03  8:14   ` Greg Kroah-Hartman
2023-01-03  8:14 ` [PATCH 5.10 33/63] xtensa: " Greg Kroah-Hartman
2023-01-03  8:14 ` [PATCH 5.10 34/63] alpha: " Greg Kroah-Hartman
2023-01-03  8:14 ` [PATCH 5.10 35/63] c6x: " Greg Kroah-Hartman
2023-01-03  8:14 ` [PATCH 5.10 36/63] h8300: " Greg Kroah-Hartman
2023-01-03  8:14 ` [PATCH 5.10 37/63] ia64: " Greg Kroah-Hartman
2023-01-03  8:14   ` Greg Kroah-Hartman
2023-01-03  8:14 ` [PATCH 5.10 38/63] nds32: " Greg Kroah-Hartman
2023-01-03  8:14 ` [PATCH 5.10 39/63] riscv: " Greg Kroah-Hartman
2023-01-03  8:14   ` Greg Kroah-Hartman
2023-01-03  8:14 ` [PATCH 5.10 40/63] sparc: " Greg Kroah-Hartman
2023-01-03  8:14 ` [PATCH 5.10 41/63] ia64: dont call handle_signal() unless theres actually a signal queued Greg Kroah-Hartman
2023-01-03  8:14 ` [PATCH 5.10 42/63] ARC: unbork 5.11 bootup: fix snafu in _TIF_NOTIFY_SIGNAL handling Greg Kroah-Hartman
2023-01-03  8:14 ` [PATCH 5.10 43/63] alpha: fix TIF_NOTIFY_SIGNAL handling Greg Kroah-Hartman
2023-01-03  8:14 ` [PATCH 5.10 44/63] task_work: remove legacy TWA_SIGNAL path Greg Kroah-Hartman
2023-01-03  8:14 ` [PATCH 5.10 45/63] kernel: remove checking for TIF_NOTIFY_SIGNAL Greg Kroah-Hartman
2023-01-03  8:14 ` [PATCH 5.10 46/63] coredump: Limit what can interrupt coredumps Greg Kroah-Hartman
2023-01-03  8:14 ` [PATCH 5.10 47/63] kernel: allow fork with TIF_NOTIFY_SIGNAL pending Greg Kroah-Hartman
2023-01-03  8:14 ` [PATCH 5.10 48/63] entry/kvm: Exit to user mode when TIF_NOTIFY_SIGNAL is set Greg Kroah-Hartman
2023-01-03  8:14 ` [PATCH 5.10 49/63] arch: setup PF_IO_WORKER threads like PF_KTHREAD Greg Kroah-Hartman
2023-01-03  8:14 ` [PATCH 5.10 50/63] arch: ensure parisc/powerpc handle PF_IO_WORKER in copy_thread() Greg Kroah-Hartman
2023-01-03  8:14 ` [PATCH 5.10 51/63] x86/process: setup io_threads more like normal user space threads Greg Kroah-Hartman
2023-01-03  8:14 ` [PATCH 5.10 52/63] kernel: stop masking signals in create_io_thread() Greg Kroah-Hartman
2023-01-03  8:14 ` [PATCH 5.10 53/63] kernel: dont call do_exit() for PF_IO_WORKER threads Greg Kroah-Hartman
2023-01-03  8:14 ` [PATCH 5.10 54/63] task_work: add helper for more targeted task_work canceling Greg Kroah-Hartman
2023-01-03  8:14 ` [PATCH 5.10 55/63] io_uring: import 5.15-stable io_uring Greg Kroah-Hartman
2023-01-03  8:14 ` [PATCH 5.10 56/63] signal: kill JOBCTL_TASK_WORK Greg Kroah-Hartman
2023-01-03  8:14 ` [PATCH 5.10 57/63] task_work: unconditionally run task_work from get_signal() Greg Kroah-Hartman
2023-01-03  8:14 ` [PATCH 5.10 58/63] net: remove cmsg restriction from io_uring based send/recvmsg calls Greg Kroah-Hartman
2023-01-03  8:14 ` [PATCH 5.10 59/63] Revert "proc: dont allow async path resolution of /proc/thread-self components" Greg Kroah-Hartman
2023-01-03  8:14 ` [PATCH 5.10 60/63] Revert "proc: dont allow async path resolution of /proc/self components" Greg Kroah-Hartman
2023-01-03  8:14 ` [PATCH 5.10 61/63] eventpoll: add EPOLL_URING_WAKE poll wakeup flag Greg Kroah-Hartman
2023-01-03  8:14 ` [PATCH 5.10 62/63] eventfd: provide a eventfd_signal_mask() helper Greg Kroah-Hartman
2023-01-03  8:14 ` [PATCH 5.10 63/63] io_uring: pass in EPOLL_URING_WAKE for eventfd signaling and wakeups Greg Kroah-Hartman
2023-01-03 13:44 ` [PATCH 5.10 00/63] 5.10.162-rc1 review Pavel Machek
2023-01-03 14:51 ` Guenter Roeck
2023-01-03 15:32 ` Jon Hunter
2023-01-03 16:16 ` Joel Fernandes
2023-01-04  5:29   ` Greg Kroah-Hartman
2023-01-04 21:56     ` Joel Fernandes
2023-01-05 11:43       ` Greg Kroah-Hartman
2023-01-03 18:16 ` Naresh Kamboju
2023-01-03 18:27 ` Florian Fainelli
2023-01-03 18:59 ` Allen Pais

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20230103081308.640079585@linuxfoundation.org \
    --to=gregkh@linuxfoundation.org \
    --cc=axboe@kernel.dk \
    --cc=patches@lists.linux.dev \
    --cc=stable@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.