From: Mike Christie <michael.christie@oracle.com> To: stefanha@redhat.com, jasowang@redhat.com, mst@redhat.com, sgarzare@redhat.com, virtualization@lists.linux-foundation.org, christian.brauner@ubuntu.com, axboe@kernel.dk, linux-kernel@vger.kernel.org Subject: [PATCH 4/8] fork: move PF_IO_WORKER's kernel frame setup to new flag Date: Thu, 16 Sep 2021 16:20:47 -0500 [thread overview] Message-ID: <20210916212051.6918-5-michael.christie@oracle.com> (raw) In-Reply-To: <20210916212051.6918-1-michael.christie@oracle.com> The vhost worker threads need the same frame setup as io_uring's worker threads, but do not handle signals and may not even be executing IO. This moves the setup part to a new flag. Signed-off-by: Mike Christie <michael.christie@oracle.com> --- arch/x86/kernel/process.c | 4 ++-- include/linux/sched.h | 1 + include/linux/sched/task.h | 1 + kernel/fork.c | 3 +++ 4 files changed, 7 insertions(+), 2 deletions(-) diff --git a/arch/x86/kernel/process.c b/arch/x86/kernel/process.c index 1d9463e3096b..ccdec11cd120 100644 --- a/arch/x86/kernel/process.c +++ b/arch/x86/kernel/process.c @@ -178,9 +178,9 @@ int copy_thread(unsigned long clone_flags, unsigned long sp, unsigned long arg, task_user_gs(p) = get_user_gs(current_pt_regs()); #endif - if (unlikely(p->flags & PF_IO_WORKER)) { + if (unlikely(p->flags & PF_USER_WORKER)) { /* - * An IO thread is a user space thread, but it doesn't + * An user worker thread is a user space thread, but it doesn't * return to ret_after_fork(). * * In order to indicate that to tools like gdb, diff --git a/include/linux/sched.h b/include/linux/sched.h index e12b524426b0..817d3a7bec77 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h @@ -1664,6 +1664,7 @@ extern struct pid *cad_pid; #define PF_VCPU 0x00000001 /* I'm a virtual CPU */ #define PF_IDLE 0x00000002 /* I am an IDLE thread */ #define PF_EXITING 0x00000004 /* Getting shut down */ +#define PF_USER_WORKER 0x00000008 /* Userspace kernel worker */ #define PF_IO_WORKER 0x00000010 /* Task is an IO worker */ #define PF_WQ_WORKER 0x00000020 /* I'm a workqueue worker */ #define PF_FORKNOEXEC 0x00000040 /* Forked but didn't exec */ diff --git a/include/linux/sched/task.h b/include/linux/sched/task.h index d0b0872f56cc..4a6100a24894 100644 --- a/include/linux/sched/task.h +++ b/include/linux/sched/task.h @@ -33,6 +33,7 @@ struct kernel_clone_args { int cgroup; int io_thread; int no_files; + int user_worker; struct cgroup *cgrp; struct css_set *cset; }; diff --git a/kernel/fork.c b/kernel/fork.c index a0468e30b27e..1dda1d4ea77b 100644 --- a/kernel/fork.c +++ b/kernel/fork.c @@ -2041,6 +2041,8 @@ static __latent_entropy struct task_struct *copy_process( siginitsetinv(&p->blocked, sigmask(SIGKILL)|sigmask(SIGSTOP)); } + if (args->user_worker) + p->flags |= PF_USER_WORKER; /* * This _must_ happen before we call free_task(), i.e. before we jump * to any of the bad_fork_* labels. This is to avoid freeing @@ -2563,6 +2565,7 @@ struct task_struct *kernel_copy_process(int (*fn)(void *), void *arg, int node, .stack_size = (unsigned long)arg, .io_thread = io_thread, .no_files = no_files, + .user_worker = 1, }; return copy_process(NULL, 0, node, &args); -- 2.25.1 _______________________________________________ Virtualization mailing list Virtualization@lists.linux-foundation.org https://lists.linuxfoundation.org/mailman/listinfo/virtualization
WARNING: multiple messages have this Message-ID (diff)
From: Mike Christie <michael.christie@oracle.com> To: stefanha@redhat.com, jasowang@redhat.com, mst@redhat.com, sgarzare@redhat.com, virtualization@lists.linux-foundation.org, christian.brauner@ubuntu.com, axboe@kernel.dk, linux-kernel@vger.kernel.org Cc: Mike Christie <michael.christie@oracle.com> Subject: [PATCH 4/8] fork: move PF_IO_WORKER's kernel frame setup to new flag Date: Thu, 16 Sep 2021 16:20:47 -0500 [thread overview] Message-ID: <20210916212051.6918-5-michael.christie@oracle.com> (raw) In-Reply-To: <20210916212051.6918-1-michael.christie@oracle.com> The vhost worker threads need the same frame setup as io_uring's worker threads, but do not handle signals and may not even be executing IO. This moves the setup part to a new flag. Signed-off-by: Mike Christie <michael.christie@oracle.com> --- arch/x86/kernel/process.c | 4 ++-- include/linux/sched.h | 1 + include/linux/sched/task.h | 1 + kernel/fork.c | 3 +++ 4 files changed, 7 insertions(+), 2 deletions(-) diff --git a/arch/x86/kernel/process.c b/arch/x86/kernel/process.c index 1d9463e3096b..ccdec11cd120 100644 --- a/arch/x86/kernel/process.c +++ b/arch/x86/kernel/process.c @@ -178,9 +178,9 @@ int copy_thread(unsigned long clone_flags, unsigned long sp, unsigned long arg, task_user_gs(p) = get_user_gs(current_pt_regs()); #endif - if (unlikely(p->flags & PF_IO_WORKER)) { + if (unlikely(p->flags & PF_USER_WORKER)) { /* - * An IO thread is a user space thread, but it doesn't + * An user worker thread is a user space thread, but it doesn't * return to ret_after_fork(). * * In order to indicate that to tools like gdb, diff --git a/include/linux/sched.h b/include/linux/sched.h index e12b524426b0..817d3a7bec77 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h @@ -1664,6 +1664,7 @@ extern struct pid *cad_pid; #define PF_VCPU 0x00000001 /* I'm a virtual CPU */ #define PF_IDLE 0x00000002 /* I am an IDLE thread */ #define PF_EXITING 0x00000004 /* Getting shut down */ +#define PF_USER_WORKER 0x00000008 /* Userspace kernel worker */ #define PF_IO_WORKER 0x00000010 /* Task is an IO worker */ #define PF_WQ_WORKER 0x00000020 /* I'm a workqueue worker */ #define PF_FORKNOEXEC 0x00000040 /* Forked but didn't exec */ diff --git a/include/linux/sched/task.h b/include/linux/sched/task.h index d0b0872f56cc..4a6100a24894 100644 --- a/include/linux/sched/task.h +++ b/include/linux/sched/task.h @@ -33,6 +33,7 @@ struct kernel_clone_args { int cgroup; int io_thread; int no_files; + int user_worker; struct cgroup *cgrp; struct css_set *cset; }; diff --git a/kernel/fork.c b/kernel/fork.c index a0468e30b27e..1dda1d4ea77b 100644 --- a/kernel/fork.c +++ b/kernel/fork.c @@ -2041,6 +2041,8 @@ static __latent_entropy struct task_struct *copy_process( siginitsetinv(&p->blocked, sigmask(SIGKILL)|sigmask(SIGSTOP)); } + if (args->user_worker) + p->flags |= PF_USER_WORKER; /* * This _must_ happen before we call free_task(), i.e. before we jump * to any of the bad_fork_* labels. This is to avoid freeing @@ -2563,6 +2565,7 @@ struct task_struct *kernel_copy_process(int (*fn)(void *), void *arg, int node, .stack_size = (unsigned long)arg, .io_thread = io_thread, .no_files = no_files, + .user_worker = 1, }; return copy_process(NULL, 0, node, &args); -- 2.25.1
next prev parent reply other threads:[~2021-09-16 21:21 UTC|newest] Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top 2021-09-16 21:20 [PATCH 0/8] Use copy_process/create_io_thread in vhost layer Mike Christie 2021-09-16 21:20 ` Mike Christie 2021-09-16 21:20 ` [PATCH 1/8] fork: add helper to clone a process Mike Christie 2021-09-16 21:20 ` Mike Christie 2021-09-17 6:00 ` Christoph Hellwig 2021-09-17 6:00 ` Christoph Hellwig 2021-09-17 7:44 ` Christian Brauner 2021-09-17 8:01 ` Christoph Hellwig 2021-09-17 8:01 ` Christoph Hellwig 2021-09-17 8:43 ` Christian Brauner 2021-09-17 8:48 ` Christian Brauner 2021-09-16 21:20 ` [PATCH 2/8] signal: Export ignore_signals Mike Christie 2021-09-16 21:20 ` Mike Christie 2021-09-16 21:20 ` [PATCH 3/8] fork: add option to not clone or dup files Mike Christie 2021-09-16 21:20 ` Mike Christie 2021-09-17 8:54 ` Christian Brauner 2021-09-16 21:20 ` Mike Christie [this message] 2021-09-16 21:20 ` [PATCH 4/8] fork: move PF_IO_WORKER's kernel frame setup to new flag Mike Christie 2021-09-16 21:20 ` [PATCH 5/8] io_uring: switch to kernel_copy_process Mike Christie 2021-09-16 21:20 ` Mike Christie 2021-09-16 21:20 ` [PATCH 6/8] vhost: move worker thread fields to new struct Mike Christie 2021-09-16 21:20 ` Mike Christie 2021-09-16 21:20 ` [PATCH 7/8] vhost: use kernel_copy_process to check RLIMITs and inherit cgroups Mike Christie 2021-09-16 21:20 ` Mike Christie 2021-09-19 8:24 ` Hillf Danton 2021-09-20 20:47 ` kernel test robot 2021-09-20 20:47 ` kernel test robot 2021-09-20 20:47 ` kernel test robot 2021-09-16 21:20 ` [PATCH 8/8] vhost: remove cgroup code Mike Christie 2021-09-16 21:20 ` Mike Christie
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=20210916212051.6918-5-michael.christie@oracle.com \ --to=michael.christie@oracle.com \ --cc=axboe@kernel.dk \ --cc=christian.brauner@ubuntu.com \ --cc=jasowang@redhat.com \ --cc=linux-kernel@vger.kernel.org \ --cc=mst@redhat.com \ --cc=sgarzare@redhat.com \ --cc=stefanha@redhat.com \ --cc=virtualization@lists.linux-foundation.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: linkBe 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.