mirror of
https://gitee.com/bianbu-linux/linux-6.6
synced 2025-04-24 14:07:52 -04:00
fork, IA64: Provide alloc_thread_stack_node() for IA64
Provide a generic alloc_thread_stack_node() for IA64 and CONFIG_ARCH_THREAD_STACK_ALLOCATOR which returns stack pointer and sets task_struct::stack so it behaves exactly like the other implementations. Rename IA64's alloc_thread_stack_node() and add the generic version to the fork code so it is in one place _and_ to drastically lower the chances of fat fingering the IA64 code. Do the same for free_thread_stack(). Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Acked-by: Andy Lutomirski <luto@kernel.org> Link: https://lore.kernel.org/r/20220217102406.3697941-4-bigeasy@linutronix.de
This commit is contained in:
parent
546c42b2c5
commit
2bb0529c0b
2 changed files with 20 additions and 3 deletions
|
@ -55,15 +55,15 @@ struct thread_info {
|
||||||
#ifndef ASM_OFFSETS_C
|
#ifndef ASM_OFFSETS_C
|
||||||
/* how to get the thread information struct from C */
|
/* how to get the thread information struct from C */
|
||||||
#define current_thread_info() ((struct thread_info *) ((char *) current + IA64_TASK_SIZE))
|
#define current_thread_info() ((struct thread_info *) ((char *) current + IA64_TASK_SIZE))
|
||||||
#define alloc_thread_stack_node(tsk, node) \
|
#define arch_alloc_thread_stack_node(tsk, node) \
|
||||||
((unsigned long *) ((char *) (tsk) + IA64_TASK_SIZE))
|
((unsigned long *) ((char *) (tsk) + IA64_TASK_SIZE))
|
||||||
#define task_thread_info(tsk) ((struct thread_info *) ((char *) (tsk) + IA64_TASK_SIZE))
|
#define task_thread_info(tsk) ((struct thread_info *) ((char *) (tsk) + IA64_TASK_SIZE))
|
||||||
#else
|
#else
|
||||||
#define current_thread_info() ((struct thread_info *) 0)
|
#define current_thread_info() ((struct thread_info *) 0)
|
||||||
#define alloc_thread_stack_node(tsk, node) ((unsigned long *) 0)
|
#define arch_alloc_thread_stack_node(tsk, node) ((unsigned long *) 0)
|
||||||
#define task_thread_info(tsk) ((struct thread_info *) 0)
|
#define task_thread_info(tsk) ((struct thread_info *) 0)
|
||||||
#endif
|
#endif
|
||||||
#define free_thread_stack(tsk) /* nothing */
|
#define arch_free_thread_stack(tsk) /* nothing */
|
||||||
#define task_stack_page(tsk) ((void *)(tsk))
|
#define task_stack_page(tsk) ((void *)(tsk))
|
||||||
|
|
||||||
#define __HAVE_THREAD_FUNCTIONS
|
#define __HAVE_THREAD_FUNCTIONS
|
||||||
|
|
|
@ -330,6 +330,23 @@ void thread_stack_cache_init(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
# endif /* THREAD_SIZE >= PAGE_SIZE || defined(CONFIG_VMAP_STACK) */
|
# endif /* THREAD_SIZE >= PAGE_SIZE || defined(CONFIG_VMAP_STACK) */
|
||||||
|
#else /* CONFIG_ARCH_THREAD_STACK_ALLOCATOR */
|
||||||
|
|
||||||
|
static unsigned long *alloc_thread_stack_node(struct task_struct *tsk, int node)
|
||||||
|
{
|
||||||
|
unsigned long *stack;
|
||||||
|
|
||||||
|
stack = arch_alloc_thread_stack_node(tsk, node);
|
||||||
|
tsk->stack = stack;
|
||||||
|
return stack;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void free_thread_stack(struct task_struct *tsk)
|
||||||
|
{
|
||||||
|
arch_free_thread_stack(tsk);
|
||||||
|
tsk->stack = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
#endif /* !CONFIG_ARCH_THREAD_STACK_ALLOCATOR */
|
#endif /* !CONFIG_ARCH_THREAD_STACK_ALLOCATOR */
|
||||||
|
|
||||||
/* SLAB cache for signal_struct structures (tsk->signal) */
|
/* SLAB cache for signal_struct structures (tsk->signal) */
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue