1f2f4bf5aSAlex Dewar /* SPDX-License-Identifier: GPL-2.0 */
28ede0bdbSAl Viro /*
38ede0bdbSAl Viro * Copyright (C) 2002 - 2007 Jeff Dike (jdike@{addtoit,linux.intel}.com)
48ede0bdbSAl Viro */
58ede0bdbSAl Viro
68ede0bdbSAl Viro #ifndef __UM_MMU_CONTEXT_H
78ede0bdbSAl Viro #define __UM_MMU_CONTEXT_H
88ede0bdbSAl Viro
94dc706c2SAl Viro #include <linux/sched.h>
10589ee628SIngo Molnar #include <linux/mm_types.h>
11aaa2cc56SMichel Lespinasse #include <linux/mmap_lock.h>
12589ee628SIngo Molnar
13*bfc58e2bSJohannes Berg #include <asm/mm_hooks.h>
144dc706c2SAl Viro #include <asm/mmu.h>
158ede0bdbSAl Viro
168ede0bdbSAl Viro extern void force_flush_all(void);
178ede0bdbSAl Viro
189431da33SNicholas Piggin #define activate_mm activate_mm
activate_mm(struct mm_struct * old,struct mm_struct * new)198ede0bdbSAl Viro static inline void activate_mm(struct mm_struct *old, struct mm_struct *new)
208ede0bdbSAl Viro {
218ede0bdbSAl Viro /*
228ede0bdbSAl Viro * This is called by fs/exec.c and sys_unshare()
238ede0bdbSAl Viro * when the new ->mm is used for the first time.
248ede0bdbSAl Viro */
258ede0bdbSAl Viro __switch_mm(&new->context.id);
268ede0bdbSAl Viro }
278ede0bdbSAl Viro
switch_mm(struct mm_struct * prev,struct mm_struct * next,struct task_struct * tsk)288ede0bdbSAl Viro static inline void switch_mm(struct mm_struct *prev, struct mm_struct *next,
298ede0bdbSAl Viro struct task_struct *tsk)
308ede0bdbSAl Viro {
318ede0bdbSAl Viro unsigned cpu = smp_processor_id();
328ede0bdbSAl Viro
338ede0bdbSAl Viro if(prev != next){
34fa40699bSRusty Russell cpumask_clear_cpu(cpu, mm_cpumask(prev));
35fa40699bSRusty Russell cpumask_set_cpu(cpu, mm_cpumask(next));
368ede0bdbSAl Viro if(next != &init_mm)
378ede0bdbSAl Viro __switch_mm(&next->context.id);
388ede0bdbSAl Viro }
398ede0bdbSAl Viro }
408ede0bdbSAl Viro
419431da33SNicholas Piggin #define init_new_context init_new_context
428ede0bdbSAl Viro extern int init_new_context(struct task_struct *task, struct mm_struct *mm);
438ede0bdbSAl Viro
449431da33SNicholas Piggin #define destroy_context destroy_context
458ede0bdbSAl Viro extern void destroy_context(struct mm_struct *mm);
468ede0bdbSAl Viro
479431da33SNicholas Piggin #include <asm-generic/mmu_context.h>
489431da33SNicholas Piggin
498ede0bdbSAl Viro #endif
50