Patch "sched/core: Add switch_mm_irqs_off() and use it in the scheduler" has been added to the 4.4-stable tree
Subsystems (2)
This is a note to let you know that I've just added the patch titled
sched/core: Add switch_mm_irqs_off() and use it in the scheduler
to the 4.4-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:
sched-core-add-switch_mm_irqs_off-and-use-it-in-the-scheduler.patch
and it can be found in the queue-4.4 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
f98db6013c557c216da5038d9c52045be55cd039Mon Sep 17 00:00:00 2001
From: Andy Lutomirski <[email protected]>
Date: Tue, 26 Apr 2016 09:39:06 -0700
Subject: sched/core: Add switch_mm_irqs_off() and use it in the scheduler
From: Andy Lutomirski <[email protected]>
commit f98db6013c557c216da5038d9c52045be55cd039 upstream.
By default, this is the same thing as switch_mm().
x86 will override it as an optimization.
--- include/linux/mmu_context.h | 7 +++++++ kernel/sched/core.c | 6 +++--- 2 files changed, 10 insertions(+), 3 deletions(-)
include/linux/mmu_context.h +7 -0
@@ -1,9 +1,16 @@#ifndef _LINUX_MMU_CONTEXT_H#define _LINUX_MMU_CONTEXT_H +#include <asm/mmu_context.h> +struct mm_struct ;void use_mm (struct mm_struct *mm);void unuse_mm (struct mm_struct *mm); +/* Architectures that care about IRQ state in switch_mm can override this. */ +#ifndef switch_mm_irqs_off +# define switch_mm_irqs_off switch_mm +#endif +#endif
kernel/sched/core.c +3 -3
@@ -32,7 +32,7 @@#include <linux/init.h> #include <linux/uaccess.h> #include <linux/highmem.h> -#include <asm/mmu_context.h> +#include <linux/mmu_context.h> #include <linux/interrupt.h> #include <linux/capability.h> #include <linux/completion.h>
@@ -2708,7 +2708,7 @@ context_switch(struct rq *rq, struct tasatomic_inc (&oldmm->mm_count);enter_lazy_tlb (oldmm, next); }else -switch_mm (oldmm, mm, next); +switch_mm_irqs_off (oldmm, mm, next);if (!prev->mm) { prev->active_mm =NULL ;
@@ -5206,7 +5206,7 @@ void idle_task_exit(void)BUG_ON (cpu_online (smp_processor_id ()));if (mm != &init_mm) { -switch_mm (mm, &init_mm, current); +switch_mm_irqs_off (mm, &init_mm, current);finish_arch_post_lock_switch (); }mmdrop (mm);
Patches currently in stable-queue which might be from [email protected] are
queue-4.4/x86-mm-sched-core-uninline-switch_mm.patch queue-4.4/x86-mm-add-a-noinvpcid-boot-option-to-turn-off-invpcid.patch queue-4.4/x86-irq-do-not-substract-irq_tlb_count-from-irq_call_count.patch queue-4.4/x86-mm-if-invpcid-is-available-use-it-to-flush-global-mappings.patch queue-4.4/x86-mm-add-invpcid-helpers.patch queue-4.4/sched-core-add-switch_mm_irqs_off-and-use-it-in-the-scheduler.patch queue-4.4/arm-hide-finish_arch_post_lock_switch-from-modules.patch queue-4.4/x86-mm-sched-core-turn-off-irqs-in-switch_mm.patch queue-4.4/mm-mmu_context-sched-core-fix-mmu_context.h-assumption.patch queue-4.4/x86-mm-build-arch-x86-mm-tlb.c-even-on-smp.patch queue-4.4/sched-core-idle_task_exit-shouldn-t-use-switch_mm_irqs_off.patch