2 * include/asm-s390/mmu_context.h
6 * Derived from "include/asm-i386/mmu_context.h"
9 #ifndef __S390_MMU_CONTEXT_H
10 #define __S390_MMU_CONTEXT_H
12 #include <asm/pgalloc.h>
13 #include <asm/uaccess.h>
14 #include <asm-generic/mm_hooks.h>
16 static inline int init_new_context(struct task_struct
*tsk
,
19 mm
->context
.asce_bits
= _ASCE_TABLE_LENGTH
| _ASCE_USER_BITS
;
21 mm
->context
.asce_bits
|= _ASCE_TYPE_REGION3
;
23 mm
->context
.noexec
= s390_noexec
;
24 mm
->context
.asce_limit
= STACK_TOP_MAX
;
25 crst_table_init((unsigned long *) mm
->pgd
, pgd_entry_type(mm
));
29 #define destroy_context(mm) do { } while (0)
32 #define LCTL_OPCODE "lctl"
34 #define LCTL_OPCODE "lctlg"
37 static inline void update_mm(struct mm_struct
*mm
, struct task_struct
*tsk
)
41 S390_lowcore
.user_asce
= mm
->context
.asce_bits
| __pa(pgd
);
43 /* Load primary space page table origin. */
44 pgd
= mm
->context
.noexec
? get_shadow_table(pgd
) : pgd
;
45 S390_lowcore
.user_exec_asce
= mm
->context
.asce_bits
| __pa(pgd
);
46 asm volatile(LCTL_OPCODE
" 1,1,%0\n"
47 : : "m" (S390_lowcore
.user_exec_asce
) );
49 /* Load home space page table origin. */
50 asm volatile(LCTL_OPCODE
" 13,13,%0"
51 : : "m" (S390_lowcore
.user_asce
) );
52 set_fs(current
->thread
.mm_segment
);
55 static inline void switch_mm(struct mm_struct
*prev
, struct mm_struct
*next
,
56 struct task_struct
*tsk
)
58 cpu_set(smp_processor_id(), next
->cpu_vm_mask
);
62 #define enter_lazy_tlb(mm,tsk) do { } while (0)
63 #define deactivate_mm(tsk,mm) do { } while (0)
65 static inline void activate_mm(struct mm_struct
*prev
,
66 struct mm_struct
*next
)
68 switch_mm(prev
, next
, current
);
71 #endif /* __S390_MMU_CONTEXT_H */