aboutsummaryrefslogtreecommitdiffstats
path: root/arch/s390/include
diff options
context:
space:
mode:
Diffstat (limited to 'arch/s390/include')
-rw-r--r--arch/s390/include/asm/atomic.h7
-rw-r--r--arch/s390/include/asm/bitops.h5
-rw-r--r--arch/s390/include/asm/elf.h3
-rw-r--r--arch/s390/include/asm/ipl.h1
-rw-r--r--arch/s390/include/asm/irqflags.h16
-rw-r--r--arch/s390/include/asm/kvm_host.h14
-rw-r--r--arch/s390/include/asm/linkage.h5
-rw-r--r--arch/s390/include/asm/lowcore.h13
-rw-r--r--arch/s390/include/asm/mmu.h4
-rw-r--r--arch/s390/include/asm/pgalloc.h7
-rw-r--r--arch/s390/include/asm/pgtable.h44
-rw-r--r--arch/s390/include/asm/processor.h3
-rw-r--r--arch/s390/include/asm/ptrace.h1
-rw-r--r--arch/s390/include/asm/system.h1
-rw-r--r--arch/s390/include/asm/thread_info.h2
-rw-r--r--arch/s390/include/asm/tlbflush.h2
16 files changed, 94 insertions, 34 deletions
diff --git a/arch/s390/include/asm/atomic.h b/arch/s390/include/asm/atomic.h
index d9db13810d1..8517d2ae3b5 100644
--- a/arch/s390/include/asm/atomic.h
+++ b/arch/s390/include/asm/atomic.h
@@ -93,7 +93,7 @@ static inline int atomic_cmpxchg(atomic_t *v, int old, int new)
93 return old; 93 return old;
94} 94}
95 95
96static inline int atomic_add_unless(atomic_t *v, int a, int u) 96static inline int __atomic_add_unless(atomic_t *v, int a, int u)
97{ 97{
98 int c, old; 98 int c, old;
99 c = atomic_read(v); 99 c = atomic_read(v);
@@ -105,10 +105,9 @@ static inline int atomic_add_unless(atomic_t *v, int a, int u)
105 break; 105 break;
106 c = old; 106 c = old;
107 } 107 }
108 return c != u; 108 return c;
109} 109}
110 110
111#define atomic_inc_not_zero(v) atomic_add_unless((v), 1, 0)
112 111
113#undef __CS_LOOP 112#undef __CS_LOOP
114 113
@@ -332,6 +331,4 @@ static inline long long atomic64_dec_if_positive(atomic64_t *v)
332#define smp_mb__before_atomic_inc() smp_mb() 331#define smp_mb__before_atomic_inc() smp_mb()
333#define smp_mb__after_atomic_inc() smp_mb() 332#define smp_mb__after_atomic_inc() smp_mb()
334 333
335#include <asm-generic/atomic-long.h>
336
337#endif /* __ARCH_S390_ATOMIC__ */ 334#endif /* __ARCH_S390_ATOMIC__ */
diff --git a/arch/s390/include/asm/bitops.h b/arch/s390/include/asm/bitops.h
index 667c6e9f6a3..e5beb490959 100644
--- a/arch/s390/include/asm/bitops.h
+++ b/arch/s390/include/asm/bitops.h
@@ -832,10 +832,7 @@ static inline int find_next_bit_le(void *vaddr, unsigned long size,
832 832
833#include <asm-generic/bitops/le.h> 833#include <asm-generic/bitops/le.h>
834 834
835#define ext2_set_bit_atomic(lock, nr, addr) \ 835#include <asm-generic/bitops/ext2-atomic-setbit.h>
836 test_and_set_bit_le(nr, addr)
837#define ext2_clear_bit_atomic(lock, nr, addr) \
838 test_and_clear_bit_le(nr, addr)
839 836
840 837
841#endif /* __KERNEL__ */ 838#endif /* __KERNEL__ */
diff --git a/arch/s390/include/asm/elf.h b/arch/s390/include/asm/elf.h
index 64b61bf72e9..547f1a6a35d 100644
--- a/arch/s390/include/asm/elf.h
+++ b/arch/s390/include/asm/elf.h
@@ -188,7 +188,8 @@ extern char elf_platform[];
188#define SET_PERSONALITY(ex) \ 188#define SET_PERSONALITY(ex) \
189do { \ 189do { \
190 if (personality(current->personality) != PER_LINUX32) \ 190 if (personality(current->personality) != PER_LINUX32) \
191 set_personality(PER_LINUX); \ 191 set_personality(PER_LINUX | \
192 (current->personality & ~PER_MASK)); \
192 if ((ex).e_ident[EI_CLASS] == ELFCLASS32) \ 193 if ((ex).e_ident[EI_CLASS] == ELFCLASS32) \
193 set_thread_flag(TIF_31BIT); \ 194 set_thread_flag(TIF_31BIT); \
194 else \ 195 else \
diff --git a/arch/s390/include/asm/ipl.h b/arch/s390/include/asm/ipl.h
index 5e95d95450b..97cc4403fab 100644
--- a/arch/s390/include/asm/ipl.h
+++ b/arch/s390/include/asm/ipl.h
@@ -167,5 +167,6 @@ enum diag308_rc {
167}; 167};
168 168
169extern int diag308(unsigned long subcode, void *addr); 169extern int diag308(unsigned long subcode, void *addr);
170extern void diag308_reset(void);
170 171
171#endif /* _ASM_S390_IPL_H */ 172#endif /* _ASM_S390_IPL_H */
diff --git a/arch/s390/include/asm/irqflags.h b/arch/s390/include/asm/irqflags.h
index 865d6d891ac..38fdf451feb 100644
--- a/arch/s390/include/asm/irqflags.h
+++ b/arch/s390/include/asm/irqflags.h
@@ -29,42 +29,42 @@
29}) 29})
30 30
31/* set system mask. */ 31/* set system mask. */
32static inline void __arch_local_irq_ssm(unsigned long flags) 32static inline notrace void __arch_local_irq_ssm(unsigned long flags)
33{ 33{
34 asm volatile("ssm %0" : : "Q" (flags) : "memory"); 34 asm volatile("ssm %0" : : "Q" (flags) : "memory");
35} 35}
36 36
37static inline unsigned long arch_local_save_flags(void) 37static inline notrace unsigned long arch_local_save_flags(void)
38{ 38{
39 return __arch_local_irq_stosm(0x00); 39 return __arch_local_irq_stosm(0x00);
40} 40}
41 41
42static inline unsigned long arch_local_irq_save(void) 42static inline notrace unsigned long arch_local_irq_save(void)
43{ 43{
44 return __arch_local_irq_stnsm(0xfc); 44 return __arch_local_irq_stnsm(0xfc);
45} 45}
46 46
47static inline void arch_local_irq_disable(void) 47static inline notrace void arch_local_irq_disable(void)
48{ 48{
49 arch_local_irq_save(); 49 arch_local_irq_save();
50} 50}
51 51
52static inline void arch_local_irq_enable(void) 52static inline notrace void arch_local_irq_enable(void)
53{ 53{
54 __arch_local_irq_stosm(0x03); 54 __arch_local_irq_stosm(0x03);
55} 55}
56 56
57static inline void arch_local_irq_restore(unsigned long flags) 57static inline notrace void arch_local_irq_restore(unsigned long flags)
58{ 58{
59 __arch_local_irq_ssm(flags); 59 __arch_local_irq_ssm(flags);
60} 60}
61 61
62static inline bool arch_irqs_disabled_flags(unsigned long flags) 62static inline notrace bool arch_irqs_disabled_flags(unsigned long flags)
63{ 63{
64 return !(flags & (3UL << (BITS_PER_LONG - 8))); 64 return !(flags & (3UL << (BITS_PER_LONG - 8)));
65} 65}
66 66
67static inline bool arch_irqs_disabled(void) 67static inline notrace bool arch_irqs_disabled(void)
68{ 68{
69 return arch_irqs_disabled_flags(arch_local_save_flags()); 69 return arch_irqs_disabled_flags(arch_local_save_flags());
70} 70}
diff --git a/arch/s390/include/asm/kvm_host.h b/arch/s390/include/asm/kvm_host.h
index cef7dbf69df..123d72a15c0 100644
--- a/arch/s390/include/asm/kvm_host.h
+++ b/arch/s390/include/asm/kvm_host.h
@@ -47,7 +47,7 @@ struct sca_block {
47#define KVM_HPAGE_MASK(x) (~(KVM_HPAGE_SIZE(x) - 1)) 47#define KVM_HPAGE_MASK(x) (~(KVM_HPAGE_SIZE(x) - 1))
48#define KVM_PAGES_PER_HPAGE(x) (KVM_HPAGE_SIZE(x) / PAGE_SIZE) 48#define KVM_PAGES_PER_HPAGE(x) (KVM_HPAGE_SIZE(x) / PAGE_SIZE)
49 49
50#define CPUSTAT_HOST 0x80000000 50#define CPUSTAT_STOPPED 0x80000000
51#define CPUSTAT_WAIT 0x10000000 51#define CPUSTAT_WAIT 0x10000000
52#define CPUSTAT_ECALL_PEND 0x08000000 52#define CPUSTAT_ECALL_PEND 0x08000000
53#define CPUSTAT_STOP_INT 0x04000000 53#define CPUSTAT_STOP_INT 0x04000000
@@ -93,9 +93,7 @@ struct kvm_s390_sie_block {
93 __u32 scaol; /* 0x0064 */ 93 __u32 scaol; /* 0x0064 */
94 __u8 reserved68[4]; /* 0x0068 */ 94 __u8 reserved68[4]; /* 0x0068 */
95 __u32 todpr; /* 0x006c */ 95 __u32 todpr; /* 0x006c */
96 __u8 reserved70[16]; /* 0x0070 */ 96 __u8 reserved70[32]; /* 0x0070 */
97 __u64 gmsor; /* 0x0080 */
98 __u64 gmslm; /* 0x0088 */
99 psw_t gpsw; /* 0x0090 */ 97 psw_t gpsw; /* 0x0090 */
100 __u64 gg14; /* 0x00a0 */ 98 __u64 gg14; /* 0x00a0 */
101 __u64 gg15; /* 0x00a8 */ 99 __u64 gg15; /* 0x00a8 */
@@ -138,6 +136,7 @@ struct kvm_vcpu_stat {
138 u32 instruction_chsc; 136 u32 instruction_chsc;
139 u32 instruction_stsi; 137 u32 instruction_stsi;
140 u32 instruction_stfl; 138 u32 instruction_stfl;
139 u32 instruction_tprot;
141 u32 instruction_sigp_sense; 140 u32 instruction_sigp_sense;
142 u32 instruction_sigp_emergency; 141 u32 instruction_sigp_emergency;
143 u32 instruction_sigp_stop; 142 u32 instruction_sigp_stop;
@@ -175,6 +174,10 @@ struct kvm_s390_prefix_info {
175 __u32 address; 174 __u32 address;
176}; 175};
177 176
177struct kvm_s390_emerg_info {
178 __u16 code;
179};
180
178struct kvm_s390_interrupt_info { 181struct kvm_s390_interrupt_info {
179 struct list_head list; 182 struct list_head list;
180 u64 type; 183 u64 type;
@@ -182,6 +185,7 @@ struct kvm_s390_interrupt_info {
182 struct kvm_s390_io_info io; 185 struct kvm_s390_io_info io;
183 struct kvm_s390_ext_info ext; 186 struct kvm_s390_ext_info ext;
184 struct kvm_s390_pgm_info pgm; 187 struct kvm_s390_pgm_info pgm;
188 struct kvm_s390_emerg_info emerg;
185 struct kvm_s390_prefix_info prefix; 189 struct kvm_s390_prefix_info prefix;
186 }; 190 };
187}; 191};
@@ -226,6 +230,7 @@ struct kvm_vcpu_arch {
226 struct cpuid cpu_id; 230 struct cpuid cpu_id;
227 u64 stidp_data; 231 u64 stidp_data;
228 }; 232 };
233 struct gmap *gmap;
229}; 234};
230 235
231struct kvm_vm_stat { 236struct kvm_vm_stat {
@@ -236,6 +241,7 @@ struct kvm_arch{
236 struct sca_block *sca; 241 struct sca_block *sca;
237 debug_info_t *dbf; 242 debug_info_t *dbf;
238 struct kvm_s390_float_interrupt float_int; 243 struct kvm_s390_float_interrupt float_int;
244 struct gmap *gmap;
239}; 245};
240 246
241extern int sie64a(struct kvm_s390_sie_block *, unsigned long *); 247extern int sie64a(struct kvm_s390_sie_block *, unsigned long *);
diff --git a/arch/s390/include/asm/linkage.h b/arch/s390/include/asm/linkage.h
index 291c2d01c44..fc8a8284778 100644
--- a/arch/s390/include/asm/linkage.h
+++ b/arch/s390/include/asm/linkage.h
@@ -1,6 +1,9 @@
1#ifndef __ASM_LINKAGE_H 1#ifndef __ASM_LINKAGE_H
2#define __ASM_LINKAGE_H 2#define __ASM_LINKAGE_H
3 3
4/* Nothing to see here... */ 4#include <linux/stringify.h>
5
6#define __ALIGN .align 4, 0x07
7#define __ALIGN_STR __stringify(__ALIGN)
5 8
6#endif 9#endif
diff --git a/arch/s390/include/asm/lowcore.h b/arch/s390/include/asm/lowcore.h
index 228cf0b295d..e85c911aabf 100644
--- a/arch/s390/include/asm/lowcore.h
+++ b/arch/s390/include/asm/lowcore.h
@@ -18,6 +18,7 @@ void system_call(void);
18void pgm_check_handler(void); 18void pgm_check_handler(void);
19void mcck_int_handler(void); 19void mcck_int_handler(void);
20void io_int_handler(void); 20void io_int_handler(void);
21void psw_restart_int_handler(void);
21 22
22#ifdef CONFIG_32BIT 23#ifdef CONFIG_32BIT
23 24
@@ -150,7 +151,10 @@ struct _lowcore {
150 */ 151 */
151 __u32 ipib; /* 0x0e00 */ 152 __u32 ipib; /* 0x0e00 */
152 __u32 ipib_checksum; /* 0x0e04 */ 153 __u32 ipib_checksum; /* 0x0e04 */
153 __u8 pad_0x0e08[0x0f00-0x0e08]; /* 0x0e08 */ 154
155 /* 64 bit save area */
156 __u64 save_area_64; /* 0x0e08 */
157 __u8 pad_0x0e10[0x0f00-0x0e10]; /* 0x0e10 */
154 158
155 /* Extended facility list */ 159 /* Extended facility list */
156 __u64 stfle_fac_list[32]; /* 0x0f00 */ 160 __u64 stfle_fac_list[32]; /* 0x0f00 */
@@ -268,7 +272,7 @@ struct _lowcore {
268 __u64 vdso_per_cpu_data; /* 0x0358 */ 272 __u64 vdso_per_cpu_data; /* 0x0358 */
269 __u64 machine_flags; /* 0x0360 */ 273 __u64 machine_flags; /* 0x0360 */
270 __u64 ftrace_func; /* 0x0368 */ 274 __u64 ftrace_func; /* 0x0368 */
271 __u64 sie_hook; /* 0x0370 */ 275 __u64 gmap; /* 0x0370 */
272 __u64 cmf_hpp; /* 0x0378 */ 276 __u64 cmf_hpp; /* 0x0378 */
273 277
274 /* Interrupt response block. */ 278 /* Interrupt response block. */
@@ -286,7 +290,10 @@ struct _lowcore {
286 */ 290 */
287 __u64 ipib; /* 0x0e00 */ 291 __u64 ipib; /* 0x0e00 */
288 __u32 ipib_checksum; /* 0x0e08 */ 292 __u32 ipib_checksum; /* 0x0e08 */
289 __u8 pad_0x0e0c[0x0f00-0x0e0c]; /* 0x0e0c */ 293
294 /* 64 bit save area */
295 __u64 save_area_64; /* 0x0e0c */
296 __u8 pad_0x0e14[0x0f00-0x0e14]; /* 0x0e14 */
290 297
291 /* Extended facility list */ 298 /* Extended facility list */
292 __u64 stfle_fac_list[32]; /* 0x0f00 */ 299 __u64 stfle_fac_list[32]; /* 0x0f00 */
diff --git a/arch/s390/include/asm/mmu.h b/arch/s390/include/asm/mmu.h
index 82d0847896a..4506791adcd 100644
--- a/arch/s390/include/asm/mmu.h
+++ b/arch/s390/include/asm/mmu.h
@@ -6,6 +6,7 @@ typedef struct {
6 unsigned int flush_mm; 6 unsigned int flush_mm;
7 spinlock_t list_lock; 7 spinlock_t list_lock;
8 struct list_head pgtable_list; 8 struct list_head pgtable_list;
9 struct list_head gmap_list;
9 unsigned long asce_bits; 10 unsigned long asce_bits;
10 unsigned long asce_limit; 11 unsigned long asce_limit;
11 unsigned long vdso_base; 12 unsigned long vdso_base;
@@ -17,6 +18,7 @@ typedef struct {
17 18
18#define INIT_MM_CONTEXT(name) \ 19#define INIT_MM_CONTEXT(name) \
19 .context.list_lock = __SPIN_LOCK_UNLOCKED(name.context.list_lock), \ 20 .context.list_lock = __SPIN_LOCK_UNLOCKED(name.context.list_lock), \
20 .context.pgtable_list = LIST_HEAD_INIT(name.context.pgtable_list), 21 .context.pgtable_list = LIST_HEAD_INIT(name.context.pgtable_list), \
22 .context.gmap_list = LIST_HEAD_INIT(name.context.gmap_list),
21 23
22#endif 24#endif
diff --git a/arch/s390/include/asm/pgalloc.h b/arch/s390/include/asm/pgalloc.h
index 38e71ebcd3c..8eef9b5b3cf 100644
--- a/arch/s390/include/asm/pgalloc.h
+++ b/arch/s390/include/asm/pgalloc.h
@@ -20,7 +20,7 @@
20unsigned long *crst_table_alloc(struct mm_struct *); 20unsigned long *crst_table_alloc(struct mm_struct *);
21void crst_table_free(struct mm_struct *, unsigned long *); 21void crst_table_free(struct mm_struct *, unsigned long *);
22 22
23unsigned long *page_table_alloc(struct mm_struct *); 23unsigned long *page_table_alloc(struct mm_struct *, unsigned long);
24void page_table_free(struct mm_struct *, unsigned long *); 24void page_table_free(struct mm_struct *, unsigned long *);
25#ifdef CONFIG_HAVE_RCU_TABLE_FREE 25#ifdef CONFIG_HAVE_RCU_TABLE_FREE
26void page_table_free_rcu(struct mmu_gather *, unsigned long *); 26void page_table_free_rcu(struct mmu_gather *, unsigned long *);
@@ -115,6 +115,7 @@ static inline pgd_t *pgd_alloc(struct mm_struct *mm)
115{ 115{
116 spin_lock_init(&mm->context.list_lock); 116 spin_lock_init(&mm->context.list_lock);
117 INIT_LIST_HEAD(&mm->context.pgtable_list); 117 INIT_LIST_HEAD(&mm->context.pgtable_list);
118 INIT_LIST_HEAD(&mm->context.gmap_list);
118 return (pgd_t *) crst_table_alloc(mm); 119 return (pgd_t *) crst_table_alloc(mm);
119} 120}
120#define pgd_free(mm, pgd) crst_table_free(mm, (unsigned long *) pgd) 121#define pgd_free(mm, pgd) crst_table_free(mm, (unsigned long *) pgd)
@@ -133,8 +134,8 @@ static inline void pmd_populate(struct mm_struct *mm,
133/* 134/*
134 * page table entry allocation/free routines. 135 * page table entry allocation/free routines.
135 */ 136 */
136#define pte_alloc_one_kernel(mm, vmaddr) ((pte_t *) page_table_alloc(mm)) 137#define pte_alloc_one_kernel(mm, vmaddr) ((pte_t *) page_table_alloc(mm, vmaddr))
137#define pte_alloc_one(mm, vmaddr) ((pte_t *) page_table_alloc(mm)) 138#define pte_alloc_one(mm, vmaddr) ((pte_t *) page_table_alloc(mm, vmaddr))
138 139
139#define pte_free_kernel(mm, pte) page_table_free(mm, (unsigned long *) pte) 140#define pte_free_kernel(mm, pte) page_table_free(mm, (unsigned long *) pte)
140#define pte_free(mm, pte) page_table_free(mm, (unsigned long *) pte) 141#define pte_free(mm, pte) page_table_free(mm, (unsigned long *) pte)
diff --git a/arch/s390/include/asm/pgtable.h b/arch/s390/include/asm/pgtable.h
index 801fbe1d837..c0cb794bb36 100644
--- a/arch/s390/include/asm/pgtable.h
+++ b/arch/s390/include/asm/pgtable.h
@@ -654,6 +654,50 @@ static inline void pgste_set_pte(pte_t *ptep, pgste_t pgste)
654#endif 654#endif
655} 655}
656 656
657/**
658 * struct gmap_struct - guest address space
659 * @mm: pointer to the parent mm_struct
660 * @table: pointer to the page directory
661 * @asce: address space control element for gmap page table
662 * @crst_list: list of all crst tables used in the guest address space
663 */
664struct gmap {
665 struct list_head list;
666 struct mm_struct *mm;
667 unsigned long *table;
668 unsigned long asce;
669 struct list_head crst_list;
670};
671
672/**
673 * struct gmap_rmap - reverse mapping for segment table entries
674 * @next: pointer to the next gmap_rmap structure in the list
675 * @entry: pointer to a segment table entry
676 */
677struct gmap_rmap {
678 struct list_head list;
679 unsigned long *entry;
680};
681
682/**
683 * struct gmap_pgtable - gmap information attached to a page table
684 * @vmaddr: address of the 1MB segment in the process virtual memory
685 * @mapper: list of segment table entries maping a page table
686 */
687struct gmap_pgtable {
688 unsigned long vmaddr;
689 struct list_head mapper;
690};
691
692struct gmap *gmap_alloc(struct mm_struct *mm);
693void gmap_free(struct gmap *gmap);
694void gmap_enable(struct gmap *gmap);
695void gmap_disable(struct gmap *gmap);
696int gmap_map_segment(struct gmap *gmap, unsigned long from,
697 unsigned long to, unsigned long length);
698int gmap_unmap_segment(struct gmap *gmap, unsigned long to, unsigned long len);
699unsigned long gmap_fault(unsigned long address, struct gmap *);
700
657/* 701/*
658 * Certain architectures need to do special things when PTEs 702 * Certain architectures need to do special things when PTEs
659 * within a page table are directly modified. Thus, the following 703 * within a page table are directly modified. Thus, the following
diff --git a/arch/s390/include/asm/processor.h b/arch/s390/include/asm/processor.h
index 1300c302533..a4b6229e5d4 100644
--- a/arch/s390/include/asm/processor.h
+++ b/arch/s390/include/asm/processor.h
@@ -80,6 +80,7 @@ struct thread_struct {
80 mm_segment_t mm_segment; 80 mm_segment_t mm_segment;
81 unsigned long prot_addr; /* address of protection-excep. */ 81 unsigned long prot_addr; /* address of protection-excep. */
82 unsigned int trap_no; 82 unsigned int trap_no;
83 unsigned long gmap_addr; /* address of last gmap fault. */
83 struct per_regs per_user; /* User specified PER registers */ 84 struct per_regs per_user; /* User specified PER registers */
84 struct per_event per_event; /* Cause of the last PER trap */ 85 struct per_event per_event; /* Cause of the last PER trap */
85 /* pfault_wait is used to block the process on a pfault event */ 86 /* pfault_wait is used to block the process on a pfault event */
@@ -118,14 +119,12 @@ struct stack_frame {
118 * Do necessary setup to start up a new thread. 119 * Do necessary setup to start up a new thread.
119 */ 120 */
120#define start_thread(regs, new_psw, new_stackp) do { \ 121#define start_thread(regs, new_psw, new_stackp) do { \
121 set_fs(USER_DS); \
122 regs->psw.mask = psw_user_bits; \ 122 regs->psw.mask = psw_user_bits; \
123 regs->psw.addr = new_psw | PSW_ADDR_AMODE; \ 123 regs->psw.addr = new_psw | PSW_ADDR_AMODE; \
124 regs->gprs[15] = new_stackp; \ 124 regs->gprs[15] = new_stackp; \
125} while (0) 125} while (0)
126 126
127#define start_thread31(regs, new_psw, new_stackp) do { \ 127#define start_thread31(regs, new_psw, new_stackp) do { \
128 set_fs(USER_DS); \
129 regs->psw.mask = psw_user32_bits; \ 128 regs->psw.mask = psw_user32_bits; \
130 regs->psw.addr = new_psw | PSW_ADDR_AMODE; \ 129 regs->psw.addr = new_psw | PSW_ADDR_AMODE; \
131 regs->gprs[15] = new_stackp; \ 130 regs->gprs[15] = new_stackp; \
diff --git a/arch/s390/include/asm/ptrace.h b/arch/s390/include/asm/ptrace.h
index 9ad628a8574..62fd80c9e98 100644
--- a/arch/s390/include/asm/ptrace.h
+++ b/arch/s390/include/asm/ptrace.h
@@ -539,7 +539,6 @@ struct user_regs_struct
539 * These are defined as per linux/ptrace.h, which see. 539 * These are defined as per linux/ptrace.h, which see.
540 */ 540 */
541#define arch_has_single_step() (1) 541#define arch_has_single_step() (1)
542extern void show_regs(struct pt_regs * regs);
543 542
544#define user_mode(regs) (((regs)->psw.mask & PSW_MASK_PSTATE) != 0) 543#define user_mode(regs) (((regs)->psw.mask & PSW_MASK_PSTATE) != 0)
545#define instruction_pointer(regs) ((regs)->psw.addr & PSW_ADDR_INSN) 544#define instruction_pointer(regs) ((regs)->psw.addr & PSW_ADDR_INSN)
diff --git a/arch/s390/include/asm/system.h b/arch/s390/include/asm/system.h
index d382629a017..6582f69f238 100644
--- a/arch/s390/include/asm/system.h
+++ b/arch/s390/include/asm/system.h
@@ -113,6 +113,7 @@ extern void pfault_fini(void);
113 113
114extern void cmma_init(void); 114extern void cmma_init(void);
115extern int memcpy_real(void *, void *, size_t); 115extern int memcpy_real(void *, void *, size_t);
116extern void copy_to_absolute_zero(void *dest, void *src, size_t count);
116 117
117#define finish_arch_switch(prev) do { \ 118#define finish_arch_switch(prev) do { \
118 set_fs(current->thread.mm_segment); \ 119 set_fs(current->thread.mm_segment); \
diff --git a/arch/s390/include/asm/thread_info.h b/arch/s390/include/asm/thread_info.h
index ad1382f7932..1a5dbb6f149 100644
--- a/arch/s390/include/asm/thread_info.h
+++ b/arch/s390/include/asm/thread_info.h
@@ -94,6 +94,7 @@ static inline struct thread_info *current_thread_info(void)
94#define TIF_SYSCALL_AUDIT 9 /* syscall auditing active */ 94#define TIF_SYSCALL_AUDIT 9 /* syscall auditing active */
95#define TIF_SECCOMP 10 /* secure computing */ 95#define TIF_SECCOMP 10 /* secure computing */
96#define TIF_SYSCALL_TRACEPOINT 11 /* syscall tracepoint instrumentation */ 96#define TIF_SYSCALL_TRACEPOINT 11 /* syscall tracepoint instrumentation */
97#define TIF_SIE 12 /* guest execution active */
97#define TIF_POLLING_NRFLAG 16 /* true if poll_idle() is polling 98#define TIF_POLLING_NRFLAG 16 /* true if poll_idle() is polling
98 TIF_NEED_RESCHED */ 99 TIF_NEED_RESCHED */
99#define TIF_31BIT 17 /* 32bit process */ 100#define TIF_31BIT 17 /* 32bit process */
@@ -113,6 +114,7 @@ static inline struct thread_info *current_thread_info(void)
113#define _TIF_SYSCALL_AUDIT (1<<TIF_SYSCALL_AUDIT) 114#define _TIF_SYSCALL_AUDIT (1<<TIF_SYSCALL_AUDIT)
114#define _TIF_SECCOMP (1<<TIF_SECCOMP) 115#define _TIF_SECCOMP (1<<TIF_SECCOMP)
115#define _TIF_SYSCALL_TRACEPOINT (1<<TIF_SYSCALL_TRACEPOINT) 116#define _TIF_SYSCALL_TRACEPOINT (1<<TIF_SYSCALL_TRACEPOINT)
117#define _TIF_SIE (1<<TIF_SIE)
116#define _TIF_POLLING_NRFLAG (1<<TIF_POLLING_NRFLAG) 118#define _TIF_POLLING_NRFLAG (1<<TIF_POLLING_NRFLAG)
117#define _TIF_31BIT (1<<TIF_31BIT) 119#define _TIF_31BIT (1<<TIF_31BIT)
118#define _TIF_SINGLE_STEP (1<<TIF_FREEZE) 120#define _TIF_SINGLE_STEP (1<<TIF_FREEZE)
diff --git a/arch/s390/include/asm/tlbflush.h b/arch/s390/include/asm/tlbflush.h
index b7a4f2eb005..30444538238 100644
--- a/arch/s390/include/asm/tlbflush.h
+++ b/arch/s390/include/asm/tlbflush.h
@@ -80,7 +80,7 @@ static inline void __tlb_flush_mm(struct mm_struct * mm)
80 * on all cpus instead of doing a local flush if the mm 80 * on all cpus instead of doing a local flush if the mm
81 * only ran on the local cpu. 81 * only ran on the local cpu.
82 */ 82 */
83 if (MACHINE_HAS_IDTE) 83 if (MACHINE_HAS_IDTE && list_empty(&mm->context.gmap_list))
84 __tlb_flush_idte((unsigned long) mm->pgd | 84 __tlb_flush_idte((unsigned long) mm->pgd |
85 mm->context.asce_bits); 85 mm->context.asce_bits);
86 else 86 else