xref: /openbmc/linux/arch/um/include/asm/mmu_context.h (revision d0034a7a4ac7fae708146ac0059b9c47a1543f0d)
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