Contributors: 12
Author |
Tokens |
Token Proportion |
Commits |
Commit Proportion |
Jeff Dike |
135 |
48.56% |
5 |
23.81% |
Dave Hansen |
67 |
24.10% |
2 |
9.52% |
Benjamin LaHaise |
18 |
6.47% |
2 |
9.52% |
Nicholas Piggin |
15 |
5.40% |
1 |
4.76% |
Rusty Russell |
14 |
5.04% |
2 |
9.52% |
Al Viro |
12 |
4.32% |
2 |
9.52% |
Michel Lespinasse |
6 |
2.16% |
2 |
9.52% |
Thomas Gleixner |
4 |
1.44% |
1 |
4.76% |
Ingo Molnar |
3 |
1.08% |
1 |
4.76% |
Alex Dewar |
2 |
0.72% |
1 |
4.76% |
Oleg Nesterov |
1 |
0.36% |
1 |
4.76% |
Johannes Berg |
1 |
0.36% |
1 |
4.76% |
Total |
278 |
|
21 |
|
/* SPDX-License-Identifier: GPL-2.0 */
/*
* Copyright (C) 2002 - 2007 Jeff Dike (jdike@{addtoit,linux.intel}.com)
*/
#ifndef __UM_MMU_CONTEXT_H
#define __UM_MMU_CONTEXT_H
#include <linux/sched.h>
#include <linux/mm_types.h>
#include <linux/mmap_lock.h>
#include <asm/mmu.h>
extern void uml_setup_stubs(struct mm_struct *mm);
/*
* Needed since we do not use the asm-generic/mm_hooks.h:
*/
static inline int arch_dup_mmap(struct mm_struct *oldmm, struct mm_struct *mm)
{
uml_setup_stubs(mm);
return 0;
}
extern void arch_exit_mmap(struct mm_struct *mm);
static inline void arch_unmap(struct mm_struct *mm,
unsigned long start, unsigned long end)
{
}
static inline bool arch_vma_access_permitted(struct vm_area_struct *vma,
bool write, bool execute, bool foreign)
{
/* by default, allow everything */
return true;
}
/*
* end asm-generic/mm_hooks.h functions
*/
extern void force_flush_all(void);
#define activate_mm activate_mm
static inline void activate_mm(struct mm_struct *old, struct mm_struct *new)
{
/*
* This is called by fs/exec.c and sys_unshare()
* when the new ->mm is used for the first time.
*/
__switch_mm(&new->context.id);
mmap_write_lock_nested(new, SINGLE_DEPTH_NESTING);
uml_setup_stubs(new);
mmap_write_unlock(new);
}
static inline void switch_mm(struct mm_struct *prev, struct mm_struct *next,
struct task_struct *tsk)
{
unsigned cpu = smp_processor_id();
if(prev != next){
cpumask_clear_cpu(cpu, mm_cpumask(prev));
cpumask_set_cpu(cpu, mm_cpumask(next));
if(next != &init_mm)
__switch_mm(&next->context.id);
}
}
#define init_new_context init_new_context
extern int init_new_context(struct task_struct *task, struct mm_struct *mm);
#define destroy_context destroy_context
extern void destroy_context(struct mm_struct *mm);
#include <asm-generic/mmu_context.h>
#endif