• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 #ifndef _ASM_X86_MMU_H
2 #define _ASM_X86_MMU_H
3 
4 #include <linux/spinlock.h>
5 #include <linux/mutex.h>
6 #include <linux/atomic.h>
7 
8 /*
9  * x86 has arch-specific MMU state beyond what lives in mm_struct.
10  */
11 typedef struct {
12 	/*
13 	 * ctx_id uniquely identifies this mm_struct.  A ctx_id will never
14 	 * be reused, and zero is not a valid ctx_id.
15 	 */
16 	u64 ctx_id;
17 
18 #ifdef CONFIG_MODIFY_LDT_SYSCALL
19 	struct ldt_struct *ldt;
20 #endif
21 
22 #ifdef CONFIG_X86_64
23 	/* True if mm supports a task running in 32 bit compatibility mode. */
24 	unsigned short ia32_compat;
25 #endif
26 
27 	struct mutex lock;
28 	void __user *vdso;			/* vdso base address */
29 	const struct vdso_image *vdso_image;	/* vdso image in use */
30 
31 	atomic_t perf_rdpmc_allowed;	/* nonzero if rdpmc is allowed */
32 #ifdef CONFIG_X86_INTEL_MEMORY_PROTECTION_KEYS
33 	/*
34 	 * One bit per protection key says whether userspace can
35 	 * use it or not.  protected by mmap_sem.
36 	 */
37 	u16 pkey_allocation_map;
38 	s16 execute_only_pkey;
39 #endif
40 } mm_context_t;
41 
42 #define INIT_MM_CONTEXT(mm)						\
43 	.context = {							\
44 		.ctx_id = 1,						\
45 	}
46 
47 void leave_mm(int cpu);
48 
49 #endif /* _ASM_X86_MMU_H */
50