Patch "kernel/fork.c: virtually mapped stacks: do not disable interrupts" has been added to the 4.12-stable tree
Subsystems (4)
This is a note to let you know that I've just added the patch titled
kernel/fork.c: virtually mapped stacks: do not disable interrupts
to the 4.12-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
kernel-fork.c-virtually-mapped-stacks-do-not-disable-interrupts.patch
and it can be found in the queue-4.12 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
112166f88cf83dd11486cf1818672d42b540865bMon Sep 17 00:00:00 2001
From: Christoph Lameter <[email protected]>
Date: Wed, 12 Jul 2017 14:33:11 -0700
Subject: kernel/fork.c: virtually mapped stacks: do not disable interrupts
From: Christoph Lameter <[email protected]>
commit 112166f88cf83dd11486cf1818672d42b540865b upstream.
The reason to disable interrupts seems to be to avoid switching to a different processor while handling per cpu data using individual loads and stores. If we use per cpu RMV primitives we will not have to disable interrupts.
--- kernel/fork.c | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-)
kernel/fork.c +5 -11
@@ -205,19 +205,17 @@ static unsigned long *alloc_thread_stackvoid *stack;int i; -local_irq_disable ();for (i =0 ; i <NR_CACHED_STACKS ; i++) { -struct vm_struct *s =this_cpu_read (cached_stacks[i]); +struct vm_struct *s; + + s =this_cpu_xchg (cached_stacks[i],NULL );if (!s)continue ; -this_cpu_write (cached_stacks[i],NULL ); tsk->stack_vm_area = s; -local_irq_enable ();return s->addr; } -local_irq_enable (); stack = __vmalloc_node_range(THREAD_SIZE, THREAD_SIZE, VMALLOC_START, VMALLOC_END,
@@ -245,19 +243,15 @@ static inline void free_thread_stack(str {#ifdef CONFIG_VMAP_STACK if (task_stack_vm_area (tsk)) { -unsigned long flags;int i; -local_irq_save (flags);for (i =0 ; i <NR_CACHED_STACKS ; i++) { -if (this_cpu_read (cached_stacks[i])) +if (this_cpu_cmpxchg (cached_stacks[i], +NULL , tsk->stack_vm_area) !=NULL )continue ; -this_cpu_write (cached_stacks[i], tsk->stack_vm_area); -local_irq_restore (flags);return ; } -local_irq_restore (flags);vfree_atomic (tsk->stack);return ;
Patches currently in stable-queue which might be from [email protected] are
queue-4.12/kernel-fork.c-virtually-mapped-stacks-do-not-disable-interrupts.patch