On Sun, Mar 17, 2024 at 10:52 AM Christophe JAILLET <christophe.jaillet@xxxxxxxxxx> wrote: > > Le 11/03/2024 à 17:46, Pasha Tatashin a écrit : > > In preparation for the dynamic stacks, separate out the > > __vmalloc_node_range and vfree calls from the vmap based stack > > allocations. The dynamic stacks will use their own variants of these > > functions. > > > > Signed-off-by: Pasha Tatashin <pasha.tatashin@xxxxxxxxxx> > > --- > > kernel/fork.c | 53 ++++++++++++++++++++++++++++++--------------------- > > 1 file changed, 31 insertions(+), 22 deletions(-) > > > > diff --git a/kernel/fork.c b/kernel/fork.c > > index 3004e6ce6c65..bbae5f705773 100644 > > --- a/kernel/fork.c > > +++ b/kernel/fork.c > > @@ -204,6 +204,29 @@ static bool try_release_thread_stack_to_cache(struct vm_struct *vm_area) > > return false; > > } > > > > +static inline struct vm_struct *alloc_vmap_stack(int node) > > +{ > > + void *stack; > > + > > + /* > > + * Allocated stacks are cached and later reused by new threads, > > + * so memcg accounting is performed manually on assigning/releasing > > + * stacks to tasks. Drop __GFP_ACCOUNT. > > + */ > > + stack = __vmalloc_node_range(THREAD_SIZE, THREAD_ALIGN, > > + VMALLOC_START, VMALLOC_END, > > + THREADINFO_GFP & ~__GFP_ACCOUNT, > > + PAGE_KERNEL, > > + 0, node, __builtin_return_address(0)); > > + > > + return (stack) ? find_vm_area(stack) : NULL; > > Nit: superfluous () Thank you. > > > +} > > ... >