Commit | Line | Data |
---|---|---|
1da177e4 LT |
1 | #ifndef __MMU_H |
2 | #define __MMU_H | |
3 | ||
1b948d6c | 4 | #include <linux/cpumask.h> |
1e3cab2f HC |
5 | #include <linux/errno.h> |
6 | ||
146e4b3c | 7 | typedef struct { |
1b948d6c | 8 | cpumask_t cpu_attach_mask; |
64f31d58 | 9 | atomic_t flush_count; |
050eef36 | 10 | unsigned int flush_mm; |
8ecb1a59 | 11 | spinlock_t pgtable_lock; |
146e4b3c | 12 | struct list_head pgtable_list; |
8ecb1a59 | 13 | spinlock_t gmap_lock; |
e5992f2e | 14 | struct list_head gmap_list; |
44b6cc81 | 15 | unsigned long gmap_asce; |
723cacbd | 16 | unsigned long asce; |
6252d702 | 17 | unsigned long asce_limit; |
b020632e | 18 | unsigned long vdso_base; |
0b46e0a3 MS |
19 | /* The mmu context allocates 4K page tables. */ |
20 | unsigned int alloc_pgste:1; | |
21 | /* The mmu context uses extended page tables. */ | |
b2fa47e6 | 22 | unsigned int has_pgste:1; |
65eef335 DD |
23 | /* The mmu context uses storage keys. */ |
24 | unsigned int use_skey:1; | |
146e4b3c | 25 | } mm_context_t; |
1da177e4 | 26 | |
8ecb1a59 MS |
27 | #define INIT_MM_CONTEXT(name) \ |
28 | .context.pgtable_lock = \ | |
29 | __SPIN_LOCK_UNLOCKED(name.context.pgtable_lock), \ | |
30 | .context.pgtable_list = LIST_HEAD_INIT(name.context.pgtable_list), \ | |
31 | .context.gmap_lock = __SPIN_LOCK_UNLOCKED(name.context.gmap_lock), \ | |
e5992f2e | 32 | .context.gmap_list = LIST_HEAD_INIT(name.context.gmap_list), |
a1b200e2 | 33 | |
a0616cde DH |
34 | static inline int tprot(unsigned long addr) |
35 | { | |
36 | int rc = -EFAULT; | |
37 | ||
38 | asm volatile( | |
39 | " tprot 0(%1),0\n" | |
40 | "0: ipm %0\n" | |
41 | " srl %0,28\n" | |
42 | "1:\n" | |
43 | EX_TABLE(0b,1b) | |
44 | : "+d" (rc) : "a" (addr) : "cc"); | |
45 | return rc; | |
46 | } | |
47 | ||
1da177e4 | 48 | #endif |