Messages in this thread Patch in this message | | | From | Ming Wang <> | Subject | [PATCH v1] sched: there is no need to call switch_mm_irqs_off when sched between two user thread. | Date | Tue, 31 May 2022 19:56:41 +0800 |
| |
When condition (prev->active_mm == next->mm && !prev->mm) is met, the situation is as follows:
user thread -> user thread
There is not need switch_mm when sched between two user thread. Because they share the mm_struct. This can provide better performance when testing UnixBench.
Signed-off-by: Ming Wang <wangming01@loongson.cn> --- kernel/sched/core.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/kernel/sched/core.c b/kernel/sched/core.c index 696c649..9d7f6fb 100644 --- a/kernel/sched/core.c +++ b/kernel/sched/core.c @@ -5099,7 +5099,8 @@ asmlinkage __visible void schedule_tail(struct task_struct *prev) * case 'prev->active_mm == next->mm' through * finish_task_switch()'s mmdrop(). */ - switch_mm_irqs_off(prev->active_mm, next->mm, next); + if ((prev->active_mm != next->mm) || (!prev->mm)) + switch_mm_irqs_off(prev->active_mm, next->mm, next); if (!prev->mm) { // from kernel /* will mmdrop() in finish_task_switch(). */ -- 1.8.3.1
| |