From: Sebastian Andrzej Siewior <bigeasy@linutronix.de> To: linux-kernel@vger.kernel.org, linux-ia64@vger.kernel.org Cc: Andy Lutomirski <luto@kernel.org>, Ben Segall <bsegall@google.com>, Daniel Bristot de Oliveira <bristot@redhat.com>, Dietmar Eggemann <dietmar.eggemann@arm.com>, Ingo Molnar <mingo@redhat.com>, Juri Lelli <juri.lelli@redhat.com>, Peter Zijlstra <peterz@infradead.org>, Steven Rostedt <rostedt@goodmis.org>, Thomas Gleixner <tglx@linutronix.de>, Vincent Guittot <vincent.guittot@linaro.org>, Sebastian Andrzej Siewior <bigeasy@linutronix.de> Subject: [PATCH v2 2/8] kernel/fork: Duplicate task_struct before stack allocation. Date: Thu, 17 Feb 2022 11:24:00 +0100 [thread overview] Message-ID: <20220217102406.3697941-3-bigeasy@linutronix.de> (raw) In-Reply-To: <20220217102406.3697941-1-bigeasy@linutronix.de> alloc_thread_stack_node() already populates the task_struct::stack member except on IA64. The stack pointer is saved and populated again because IA64 needs it and arch_dup_task_struct() overwrites it. Allocate thread's stack after task_struct has been duplicated as a preparation. Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> --- kernel/fork.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/kernel/fork.c b/kernel/fork.c index f63c0af6002da..c47dcba5d66d2 100644 --- a/kernel/fork.c +++ b/kernel/fork.c @@ -888,6 +888,10 @@ static struct task_struct *dup_task_struct(struct task_struct *orig, int node) if (!tsk) return NULL; + err = arch_dup_task_struct(tsk, orig); + if (err) + goto free_tsk; + stack = alloc_thread_stack_node(tsk, node); if (!stack) goto free_tsk; @@ -897,8 +901,6 @@ static struct task_struct *dup_task_struct(struct task_struct *orig, int node) stack_vm_area = task_stack_vm_area(tsk); - err = arch_dup_task_struct(tsk, orig); - /* * arch_dup_task_struct() clobbers the stack-related fields. Make * sure they're properly initialized before using any stack-related @@ -912,9 +914,6 @@ static struct task_struct *dup_task_struct(struct task_struct *orig, int node) refcount_set(&tsk->stack_refcount, 1); #endif - if (err) - goto free_stack; - err = scs_prepare(tsk, node); if (err) goto free_stack; -- 2.34.1
WARNING: multiple messages have this Message-ID (diff)
From: Sebastian Andrzej Siewior <bigeasy@linutronix.de> To: linux-kernel@vger.kernel.org, linux-ia64@vger.kernel.org Cc: Andy Lutomirski <luto@kernel.org>, Ben Segall <bsegall@google.com>, Daniel Bristot de Oliveira <bristot@redhat.com>, Dietmar Eggemann <dietmar.eggemann@arm.com>, Ingo Molnar <mingo@redhat.com>, Juri Lelli <juri.lelli@redhat.com>, Peter Zijlstra <peterz@infradead.org>, Steven Rostedt <rostedt@goodmis.org>, Thomas Gleixner <tglx@linutronix.de>, Vincent Guittot <vincent.guittot@linaro.org>, Sebastian Andrzej Siewior <bigeasy@linutronix.de> Subject: [PATCH v2 2/8] kernel/fork: Duplicate task_struct before stack allocation. Date: Thu, 17 Feb 2022 10:24:00 +0000 [thread overview] Message-ID: <20220217102406.3697941-3-bigeasy@linutronix.de> (raw) In-Reply-To: <20220217102406.3697941-1-bigeasy@linutronix.de> alloc_thread_stack_node() already populates the task_struct::stack member except on IA64. The stack pointer is saved and populated again because IA64 needs it and arch_dup_task_struct() overwrites it. Allocate thread's stack after task_struct has been duplicated as a preparation. Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> --- kernel/fork.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/kernel/fork.c b/kernel/fork.c index f63c0af6002da..c47dcba5d66d2 100644 --- a/kernel/fork.c +++ b/kernel/fork.c @@ -888,6 +888,10 @@ static struct task_struct *dup_task_struct(struct task_struct *orig, int node) if (!tsk) return NULL; + err = arch_dup_task_struct(tsk, orig); + if (err) + goto free_tsk; + stack = alloc_thread_stack_node(tsk, node); if (!stack) goto free_tsk; @@ -897,8 +901,6 @@ static struct task_struct *dup_task_struct(struct task_struct *orig, int node) stack_vm_area = task_stack_vm_area(tsk); - err = arch_dup_task_struct(tsk, orig); - /* * arch_dup_task_struct() clobbers the stack-related fields. Make * sure they're properly initialized before using any stack-related @@ -912,9 +914,6 @@ static struct task_struct *dup_task_struct(struct task_struct *orig, int node) refcount_set(&tsk->stack_refcount, 1); #endif - if (err) - goto free_stack; - err = scs_prepare(tsk, node); if (err) goto free_stack; -- 2.34.1
next prev parent reply other threads:[~2022-02-17 10:24 UTC|newest] Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top 2022-02-17 10:23 [PATCH v2 0/8] kernel/fork: Move thread stack free otu of the scheduler path Sebastian Andrzej Siewior 2022-02-17 10:23 ` Sebastian Andrzej Siewior 2022-02-17 10:23 ` [PATCH v2 1/8] kernel/fork: Redo ifdefs around task's handling Sebastian Andrzej Siewior 2022-02-17 10:23 ` Sebastian Andrzej Siewior 2022-02-22 21:27 ` [tip: core/core] fork: Redo ifdefs around task stack handling tip-bot2 for Sebastian Andrzej Siewior 2022-02-17 10:24 ` Sebastian Andrzej Siewior [this message] 2022-02-17 10:24 ` [PATCH v2 2/8] kernel/fork: Duplicate task_struct before stack allocation Sebastian Andrzej Siewior 2022-02-22 21:27 ` [tip: core/core] fork: " tip-bot2 for Sebastian Andrzej Siewior 2022-02-17 10:24 ` [PATCH v2 3/8] kernel/fork, IA64: Provide a alloc_thread_stack_node() for IA64 Sebastian Andrzej Siewior 2022-02-17 10:24 ` Sebastian Andrzej Siewior 2022-02-22 21:27 ` [tip: core/core] fork, IA64: Provide " tip-bot2 for Sebastian Andrzej Siewior 2022-02-17 10:24 ` [PATCH v2 4/8] kernel/fork: Don't assign the stack pointer in dup_task_struct() Sebastian Andrzej Siewior 2022-02-17 10:24 ` Sebastian Andrzej Siewior 2022-02-22 21:27 ` [tip: core/core] fork: " tip-bot2 for Sebastian Andrzej Siewior 2022-02-17 10:24 ` [PATCH v2 5/8] kernel/fork: Move memcg_charge_kernel_stack() into CONFIG_VMAP_STACK Sebastian Andrzej Siewior 2022-02-17 10:24 ` Sebastian Andrzej Siewior 2022-02-22 21:26 ` [tip: core/core] fork: " tip-bot2 for Sebastian Andrzej Siewior 2022-02-17 10:24 ` [PATCH v2 6/8] kernel/fork: Move task stack account to do_exit() Sebastian Andrzej Siewior 2022-02-17 10:24 ` Sebastian Andrzej Siewior 2022-02-22 21:26 ` [tip: core/core] fork: Move task stack accounting " tip-bot2 for Sebastian Andrzej Siewior 2022-02-17 10:24 ` [PATCH v2 7/8] kernel/fork: Only cache the VMAP stack in finish_task_switch() Sebastian Andrzej Siewior 2022-02-17 10:24 ` Sebastian Andrzej Siewior 2022-02-22 21:26 ` [tip: core/core] fork: " tip-bot2 for Sebastian Andrzej Siewior 2022-02-17 10:24 ` [PATCH v2 8/8] kernel/fork: Use IS_ENABLED() in account_kernel_stack() Sebastian Andrzej Siewior 2022-02-17 10:24 ` Sebastian Andrzej Siewior 2022-02-22 21:26 ` [tip: core/core] fork: " tip-bot2 for Sebastian Andrzej Siewior 2022-02-21 18:36 ` [PATCH v2 0/8] kernel/fork: Move thread stack free otu of the scheduler path Andy Lutomirski 2022-02-21 18:36 ` Andy Lutomirski 2022-02-21 18:44 ` Andy Lutomirski 2022-02-21 18:44 ` Andy Lutomirski
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=20220217102406.3697941-3-bigeasy@linutronix.de \ --to=bigeasy@linutronix.de \ --cc=bristot@redhat.com \ --cc=bsegall@google.com \ --cc=dietmar.eggemann@arm.com \ --cc=juri.lelli@redhat.com \ --cc=linux-ia64@vger.kernel.org \ --cc=linux-kernel@vger.kernel.org \ --cc=luto@kernel.org \ --cc=mingo@redhat.com \ --cc=peterz@infradead.org \ --cc=rostedt@goodmis.org \ --cc=tglx@linutronix.de \ --cc=vincent.guittot@linaro.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.