diff options
Diffstat (limited to 'arch/s390/include/asm')
-rw-r--r-- | arch/s390/include/asm/ccwdev.h | 3 | ||||
-rw-r--r-- | arch/s390/include/asm/compat.h | 13 | ||||
-rw-r--r-- | arch/s390/include/asm/ipl.h | 1 | ||||
-rw-r--r-- | arch/s390/include/asm/irq.h | 6 | ||||
-rw-r--r-- | arch/s390/include/asm/kexec.h | 6 | ||||
-rw-r--r-- | arch/s390/include/asm/kvm_host.h | 1 | ||||
-rw-r--r-- | arch/s390/include/asm/lowcore.h | 10 | ||||
-rw-r--r-- | arch/s390/include/asm/page.h | 1 | ||||
-rw-r--r-- | arch/s390/include/asm/pgtable.h | 2 | ||||
-rw-r--r-- | arch/s390/include/asm/processor.h | 48 | ||||
-rw-r--r-- | arch/s390/include/asm/ptrace.h | 29 | ||||
-rw-r--r-- | arch/s390/include/asm/reset.h | 2 | ||||
-rw-r--r-- | arch/s390/include/asm/setup.h | 13 | ||||
-rw-r--r-- | arch/s390/include/asm/sfp-util.h | 2 | ||||
-rw-r--r-- | arch/s390/include/asm/smp.h | 5 | ||||
-rw-r--r-- | arch/s390/include/asm/spinlock.h | 2 | ||||
-rw-r--r-- | arch/s390/include/asm/syscall.h | 6 | ||||
-rw-r--r-- | arch/s390/include/asm/system.h | 10 | ||||
-rw-r--r-- | arch/s390/include/asm/thread_info.h | 7 | ||||
-rw-r--r-- | arch/s390/include/asm/timex.h | 11 | ||||
-rw-r--r-- | arch/s390/include/asm/tlbflush.h | 1 |
21 files changed, 120 insertions, 59 deletions
diff --git a/arch/s390/include/asm/ccwdev.h b/arch/s390/include/asm/ccwdev.h index 623f2fb71774..9381c92cc779 100644 --- a/arch/s390/include/asm/ccwdev.h +++ b/arch/s390/include/asm/ccwdev.h | |||
@@ -11,6 +11,7 @@ | |||
11 | #include <linux/device.h> | 11 | #include <linux/device.h> |
12 | #include <linux/mod_devicetable.h> | 12 | #include <linux/mod_devicetable.h> |
13 | #include <asm/fcx.h> | 13 | #include <asm/fcx.h> |
14 | #include <asm/irq.h> | ||
14 | 15 | ||
15 | /* structs from asm/cio.h */ | 16 | /* structs from asm/cio.h */ |
16 | struct irb; | 17 | struct irb; |
@@ -127,6 +128,7 @@ enum uc_todo { | |||
127 | * @restore: callback for restoring after hibernation | 128 | * @restore: callback for restoring after hibernation |
128 | * @uc_handler: callback for unit check handler | 129 | * @uc_handler: callback for unit check handler |
129 | * @driver: embedded device driver structure | 130 | * @driver: embedded device driver structure |
131 | * @int_class: interruption class to use for accounting interrupts | ||
130 | */ | 132 | */ |
131 | struct ccw_driver { | 133 | struct ccw_driver { |
132 | struct ccw_device_id *ids; | 134 | struct ccw_device_id *ids; |
@@ -144,6 +146,7 @@ struct ccw_driver { | |||
144 | int (*restore)(struct ccw_device *); | 146 | int (*restore)(struct ccw_device *); |
145 | enum uc_todo (*uc_handler) (struct ccw_device *, struct irb *); | 147 | enum uc_todo (*uc_handler) (struct ccw_device *, struct irb *); |
146 | struct device_driver driver; | 148 | struct device_driver driver; |
149 | enum interruption_class int_class; | ||
147 | }; | 150 | }; |
148 | 151 | ||
149 | extern struct ccw_device *get_ccwdev_by_busid(struct ccw_driver *cdrv, | 152 | extern struct ccw_device *get_ccwdev_by_busid(struct ccw_driver *cdrv, |
diff --git a/arch/s390/include/asm/compat.h b/arch/s390/include/asm/compat.h index cdb9b78f6c08..2e49748b27da 100644 --- a/arch/s390/include/asm/compat.h +++ b/arch/s390/include/asm/compat.h | |||
@@ -12,6 +12,7 @@ | |||
12 | #define PSW32_MASK_IO 0x02000000UL | 12 | #define PSW32_MASK_IO 0x02000000UL |
13 | #define PSW32_MASK_EXT 0x01000000UL | 13 | #define PSW32_MASK_EXT 0x01000000UL |
14 | #define PSW32_MASK_KEY 0x00F00000UL | 14 | #define PSW32_MASK_KEY 0x00F00000UL |
15 | #define PSW32_MASK_BASE 0x00080000UL /* Always one */ | ||
15 | #define PSW32_MASK_MCHECK 0x00040000UL | 16 | #define PSW32_MASK_MCHECK 0x00040000UL |
16 | #define PSW32_MASK_WAIT 0x00020000UL | 17 | #define PSW32_MASK_WAIT 0x00020000UL |
17 | #define PSW32_MASK_PSTATE 0x00010000UL | 18 | #define PSW32_MASK_PSTATE 0x00010000UL |
@@ -19,21 +20,19 @@ | |||
19 | #define PSW32_MASK_CC 0x00003000UL | 20 | #define PSW32_MASK_CC 0x00003000UL |
20 | #define PSW32_MASK_PM 0x00000f00UL | 21 | #define PSW32_MASK_PM 0x00000f00UL |
21 | 22 | ||
22 | #define PSW32_ADDR_AMODE31 0x80000000UL | 23 | #define PSW32_MASK_USER 0x00003F00UL |
24 | |||
25 | #define PSW32_ADDR_AMODE 0x80000000UL | ||
23 | #define PSW32_ADDR_INSN 0x7FFFFFFFUL | 26 | #define PSW32_ADDR_INSN 0x7FFFFFFFUL |
24 | 27 | ||
25 | #define PSW32_BASE_BITS 0x00080000UL | 28 | #define PSW32_DEFAULT_KEY (((u32) PAGE_DEFAULT_ACC) << 20) |
26 | 29 | ||
27 | #define PSW32_ASC_PRIMARY 0x00000000UL | 30 | #define PSW32_ASC_PRIMARY 0x00000000UL |
28 | #define PSW32_ASC_ACCREG 0x00004000UL | 31 | #define PSW32_ASC_ACCREG 0x00004000UL |
29 | #define PSW32_ASC_SECONDARY 0x00008000UL | 32 | #define PSW32_ASC_SECONDARY 0x00008000UL |
30 | #define PSW32_ASC_HOME 0x0000C000UL | 33 | #define PSW32_ASC_HOME 0x0000C000UL |
31 | 34 | ||
32 | #define PSW32_MASK_MERGE(CURRENT,NEW) \ | 35 | extern u32 psw32_user_bits; |
33 | (((CURRENT) & ~(PSW32_MASK_CC|PSW32_MASK_PM)) | \ | ||
34 | ((NEW) & (PSW32_MASK_CC|PSW32_MASK_PM))) | ||
35 | |||
36 | extern long psw32_user_bits; | ||
37 | 36 | ||
38 | #define COMPAT_USER_HZ 100 | 37 | #define COMPAT_USER_HZ 100 |
39 | #define COMPAT_UTS_MACHINE "s390\0\0\0\0" | 38 | #define COMPAT_UTS_MACHINE "s390\0\0\0\0" |
diff --git a/arch/s390/include/asm/ipl.h b/arch/s390/include/asm/ipl.h index 97cc4403fabf..6940abfbe1d9 100644 --- a/arch/s390/include/asm/ipl.h +++ b/arch/s390/include/asm/ipl.h | |||
@@ -168,5 +168,6 @@ enum diag308_rc { | |||
168 | 168 | ||
169 | extern int diag308(unsigned long subcode, void *addr); | 169 | extern int diag308(unsigned long subcode, void *addr); |
170 | extern void diag308_reset(void); | 170 | extern void diag308_reset(void); |
171 | extern void store_status(void); | ||
171 | 172 | ||
172 | #endif /* _ASM_S390_IPL_H */ | 173 | #endif /* _ASM_S390_IPL_H */ |
diff --git a/arch/s390/include/asm/irq.h b/arch/s390/include/asm/irq.h index ba7b01c726a3..ba6d85f88d50 100644 --- a/arch/s390/include/asm/irq.h +++ b/arch/s390/include/asm/irq.h | |||
@@ -8,7 +8,8 @@ enum interruption_class { | |||
8 | EXTERNAL_INTERRUPT, | 8 | EXTERNAL_INTERRUPT, |
9 | IO_INTERRUPT, | 9 | IO_INTERRUPT, |
10 | EXTINT_CLK, | 10 | EXTINT_CLK, |
11 | EXTINT_IPI, | 11 | EXTINT_EXC, |
12 | EXTINT_EMS, | ||
12 | EXTINT_TMR, | 13 | EXTINT_TMR, |
13 | EXTINT_TLA, | 14 | EXTINT_TLA, |
14 | EXTINT_PFL, | 15 | EXTINT_PFL, |
@@ -17,8 +18,8 @@ enum interruption_class { | |||
17 | EXTINT_SCP, | 18 | EXTINT_SCP, |
18 | EXTINT_IUC, | 19 | EXTINT_IUC, |
19 | EXTINT_CPM, | 20 | EXTINT_CPM, |
21 | IOINT_CIO, | ||
20 | IOINT_QAI, | 22 | IOINT_QAI, |
21 | IOINT_QDI, | ||
22 | IOINT_DAS, | 23 | IOINT_DAS, |
23 | IOINT_C15, | 24 | IOINT_C15, |
24 | IOINT_C70, | 25 | IOINT_C70, |
@@ -28,6 +29,7 @@ enum interruption_class { | |||
28 | IOINT_CLW, | 29 | IOINT_CLW, |
29 | IOINT_CTC, | 30 | IOINT_CTC, |
30 | IOINT_APB, | 31 | IOINT_APB, |
32 | IOINT_CSC, | ||
31 | NMI_NMI, | 33 | NMI_NMI, |
32 | NR_IRQS, | 34 | NR_IRQS, |
33 | }; | 35 | }; |
diff --git a/arch/s390/include/asm/kexec.h b/arch/s390/include/asm/kexec.h index bb729b84a21e..cf4e47b0948c 100644 --- a/arch/s390/include/asm/kexec.h +++ b/arch/s390/include/asm/kexec.h | |||
@@ -30,9 +30,15 @@ | |||
30 | /* Not more than 2GB */ | 30 | /* Not more than 2GB */ |
31 | #define KEXEC_CONTROL_MEMORY_LIMIT (1UL<<31) | 31 | #define KEXEC_CONTROL_MEMORY_LIMIT (1UL<<31) |
32 | 32 | ||
33 | /* Maximum address we can use for the crash control pages */ | ||
34 | #define KEXEC_CRASH_CONTROL_MEMORY_LIMIT (-1UL) | ||
35 | |||
33 | /* Allocate one page for the pdp and the second for the code */ | 36 | /* Allocate one page for the pdp and the second for the code */ |
34 | #define KEXEC_CONTROL_PAGE_SIZE 4096 | 37 | #define KEXEC_CONTROL_PAGE_SIZE 4096 |
35 | 38 | ||
39 | /* Alignment of crashkernel memory */ | ||
40 | #define KEXEC_CRASH_MEM_ALIGN HPAGE_SIZE | ||
41 | |||
36 | /* The native architecture */ | 42 | /* The native architecture */ |
37 | #define KEXEC_ARCH KEXEC_ARCH_S390 | 43 | #define KEXEC_ARCH KEXEC_ARCH_S390 |
38 | 44 | ||
diff --git a/arch/s390/include/asm/kvm_host.h b/arch/s390/include/asm/kvm_host.h index 1ca5de07ac36..24e18473d926 100644 --- a/arch/s390/include/asm/kvm_host.h +++ b/arch/s390/include/asm/kvm_host.h | |||
@@ -145,6 +145,7 @@ struct kvm_vcpu_stat { | |||
145 | u32 instruction_sigp_arch; | 145 | u32 instruction_sigp_arch; |
146 | u32 instruction_sigp_prefix; | 146 | u32 instruction_sigp_prefix; |
147 | u32 instruction_sigp_restart; | 147 | u32 instruction_sigp_restart; |
148 | u32 diagnose_10; | ||
148 | u32 diagnose_44; | 149 | u32 diagnose_44; |
149 | }; | 150 | }; |
150 | 151 | ||
diff --git a/arch/s390/include/asm/lowcore.h b/arch/s390/include/asm/lowcore.h index e85c911aabf0..9e13c7d56cc1 100644 --- a/arch/s390/include/asm/lowcore.h +++ b/arch/s390/include/asm/lowcore.h | |||
@@ -151,10 +151,8 @@ struct _lowcore { | |||
151 | */ | 151 | */ |
152 | __u32 ipib; /* 0x0e00 */ | 152 | __u32 ipib; /* 0x0e00 */ |
153 | __u32 ipib_checksum; /* 0x0e04 */ | 153 | __u32 ipib_checksum; /* 0x0e04 */ |
154 | 154 | __u32 vmcore_info; /* 0x0e08 */ | |
155 | /* 64 bit save area */ | 155 | __u8 pad_0x0e0c[0x0f00-0x0e0c]; /* 0x0e0c */ |
156 | __u64 save_area_64; /* 0x0e08 */ | ||
157 | __u8 pad_0x0e10[0x0f00-0x0e10]; /* 0x0e10 */ | ||
158 | 156 | ||
159 | /* Extended facility list */ | 157 | /* Extended facility list */ |
160 | __u64 stfle_fac_list[32]; /* 0x0f00 */ | 158 | __u64 stfle_fac_list[32]; /* 0x0f00 */ |
@@ -290,9 +288,7 @@ struct _lowcore { | |||
290 | */ | 288 | */ |
291 | __u64 ipib; /* 0x0e00 */ | 289 | __u64 ipib; /* 0x0e00 */ |
292 | __u32 ipib_checksum; /* 0x0e08 */ | 290 | __u32 ipib_checksum; /* 0x0e08 */ |
293 | 291 | __u64 vmcore_info; /* 0x0e0c */ | |
294 | /* 64 bit save area */ | ||
295 | __u64 save_area_64; /* 0x0e0c */ | ||
296 | __u8 pad_0x0e14[0x0f00-0x0e14]; /* 0x0e14 */ | 292 | __u8 pad_0x0e14[0x0f00-0x0e14]; /* 0x0e14 */ |
297 | 293 | ||
298 | /* Extended facility list */ | 294 | /* Extended facility list */ |
diff --git a/arch/s390/include/asm/page.h b/arch/s390/include/asm/page.h index accb372ddc7e..f7ec548c2b9d 100644 --- a/arch/s390/include/asm/page.h +++ b/arch/s390/include/asm/page.h | |||
@@ -177,6 +177,7 @@ static inline int page_test_and_clear_young(unsigned long pfn) | |||
177 | struct page; | 177 | struct page; |
178 | void arch_free_page(struct page *page, int order); | 178 | void arch_free_page(struct page *page, int order); |
179 | void arch_alloc_page(struct page *page, int order); | 179 | void arch_alloc_page(struct page *page, int order); |
180 | void arch_set_page_states(int make_stable); | ||
180 | 181 | ||
181 | static inline int devmem_is_allowed(unsigned long pfn) | 182 | static inline int devmem_is_allowed(unsigned long pfn) |
182 | { | 183 | { |
diff --git a/arch/s390/include/asm/pgtable.h b/arch/s390/include/asm/pgtable.h index c0cb794bb365..34ede0ea85a9 100644 --- a/arch/s390/include/asm/pgtable.h +++ b/arch/s390/include/asm/pgtable.h | |||
@@ -696,7 +696,9 @@ void gmap_disable(struct gmap *gmap); | |||
696 | int gmap_map_segment(struct gmap *gmap, unsigned long from, | 696 | int gmap_map_segment(struct gmap *gmap, unsigned long from, |
697 | unsigned long to, unsigned long length); | 697 | unsigned long to, unsigned long length); |
698 | int gmap_unmap_segment(struct gmap *gmap, unsigned long to, unsigned long len); | 698 | int gmap_unmap_segment(struct gmap *gmap, unsigned long to, unsigned long len); |
699 | unsigned long __gmap_fault(unsigned long address, struct gmap *); | ||
699 | unsigned long gmap_fault(unsigned long address, struct gmap *); | 700 | unsigned long gmap_fault(unsigned long address, struct gmap *); |
701 | void gmap_discard(unsigned long from, unsigned long to, struct gmap *); | ||
700 | 702 | ||
701 | /* | 703 | /* |
702 | * Certain architectures need to do special things when PTEs | 704 | * Certain architectures need to do special things when PTEs |
diff --git a/arch/s390/include/asm/processor.h b/arch/s390/include/asm/processor.h index a4b6229e5d4b..5f33d37d032c 100644 --- a/arch/s390/include/asm/processor.h +++ b/arch/s390/include/asm/processor.h | |||
@@ -33,6 +33,8 @@ static inline void get_cpu_id(struct cpuid *ptr) | |||
33 | 33 | ||
34 | extern void s390_adjust_jiffies(void); | 34 | extern void s390_adjust_jiffies(void); |
35 | extern int get_cpu_capability(unsigned int *); | 35 | extern int get_cpu_capability(unsigned int *); |
36 | extern const struct seq_operations cpuinfo_op; | ||
37 | extern int sysctl_ieee_emulation_warnings; | ||
36 | 38 | ||
37 | /* | 39 | /* |
38 | * User space process size: 2GB for 31 bit, 4TB or 8PT for 64 bit. | 40 | * User space process size: 2GB for 31 bit, 4TB or 8PT for 64 bit. |
@@ -118,17 +120,17 @@ struct stack_frame { | |||
118 | /* | 120 | /* |
119 | * Do necessary setup to start up a new thread. | 121 | * Do necessary setup to start up a new thread. |
120 | */ | 122 | */ |
121 | #define start_thread(regs, new_psw, new_stackp) do { \ | 123 | #define start_thread(regs, new_psw, new_stackp) do { \ |
122 | regs->psw.mask = psw_user_bits; \ | 124 | regs->psw.mask = psw_user_bits | PSW_MASK_EA | PSW_MASK_BA; \ |
123 | regs->psw.addr = new_psw | PSW_ADDR_AMODE; \ | 125 | regs->psw.addr = new_psw | PSW_ADDR_AMODE; \ |
124 | regs->gprs[15] = new_stackp; \ | 126 | regs->gprs[15] = new_stackp; \ |
125 | } while (0) | 127 | } while (0) |
126 | 128 | ||
127 | #define start_thread31(regs, new_psw, new_stackp) do { \ | 129 | #define start_thread31(regs, new_psw, new_stackp) do { \ |
128 | regs->psw.mask = psw_user32_bits; \ | 130 | regs->psw.mask = psw_user_bits | PSW_MASK_BA; \ |
129 | regs->psw.addr = new_psw | PSW_ADDR_AMODE; \ | 131 | regs->psw.addr = new_psw | PSW_ADDR_AMODE; \ |
130 | regs->gprs[15] = new_stackp; \ | 132 | regs->gprs[15] = new_stackp; \ |
131 | crst_table_downgrade(current->mm, 1UL << 31); \ | 133 | crst_table_downgrade(current->mm, 1UL << 31); \ |
132 | } while (0) | 134 | } while (0) |
133 | 135 | ||
134 | /* Forward declaration, a strange C thing */ | 136 | /* Forward declaration, a strange C thing */ |
@@ -187,7 +189,6 @@ static inline void __load_psw(psw_t psw) | |||
187 | * Set PSW mask to specified value, while leaving the | 189 | * Set PSW mask to specified value, while leaving the |
188 | * PSW addr pointing to the next instruction. | 190 | * PSW addr pointing to the next instruction. |
189 | */ | 191 | */ |
190 | |||
191 | static inline void __load_psw_mask (unsigned long mask) | 192 | static inline void __load_psw_mask (unsigned long mask) |
192 | { | 193 | { |
193 | unsigned long addr; | 194 | unsigned long addr; |
@@ -212,26 +213,37 @@ static inline void __load_psw_mask (unsigned long mask) | |||
212 | : "=&d" (addr), "=Q" (psw) : "Q" (psw) : "memory", "cc"); | 213 | : "=&d" (addr), "=Q" (psw) : "Q" (psw) : "memory", "cc"); |
213 | #endif /* __s390x__ */ | 214 | #endif /* __s390x__ */ |
214 | } | 215 | } |
215 | 216 | ||
216 | /* | 217 | /* |
217 | * Function to stop a processor until an interruption occurred | 218 | * Rewind PSW instruction address by specified number of bytes. |
218 | */ | 219 | */ |
219 | static inline void enabled_wait(void) | 220 | static inline unsigned long __rewind_psw(psw_t psw, unsigned long ilc) |
220 | { | 221 | { |
221 | __load_psw_mask(PSW_BASE_BITS | PSW_MASK_IO | PSW_MASK_EXT | | 222 | #ifndef __s390x__ |
222 | PSW_MASK_MCHECK | PSW_MASK_WAIT | PSW_DEFAULT_KEY); | 223 | if (psw.addr & PSW_ADDR_AMODE) |
223 | } | 224 | /* 31 bit mode */ |
225 | return (psw.addr - ilc) | PSW_ADDR_AMODE; | ||
226 | /* 24 bit mode */ | ||
227 | return (psw.addr - ilc) & ((1UL << 24) - 1); | ||
228 | #else | ||
229 | unsigned long mask; | ||
224 | 230 | ||
231 | mask = (psw.mask & PSW_MASK_EA) ? -1UL : | ||
232 | (psw.mask & PSW_MASK_BA) ? (1UL << 31) - 1 : | ||
233 | (1UL << 24) - 1; | ||
234 | return (psw.addr - ilc) & mask; | ||
235 | #endif | ||
236 | } | ||
237 | |||
225 | /* | 238 | /* |
226 | * Function to drop a processor into disabled wait state | 239 | * Function to drop a processor into disabled wait state |
227 | */ | 240 | */ |
228 | |||
229 | static inline void ATTRIB_NORET disabled_wait(unsigned long code) | 241 | static inline void ATTRIB_NORET disabled_wait(unsigned long code) |
230 | { | 242 | { |
231 | unsigned long ctl_buf; | 243 | unsigned long ctl_buf; |
232 | psw_t dw_psw; | 244 | psw_t dw_psw; |
233 | 245 | ||
234 | dw_psw.mask = PSW_BASE_BITS | PSW_MASK_WAIT; | 246 | dw_psw.mask = PSW_MASK_BASE | PSW_MASK_WAIT | PSW_MASK_BA | PSW_MASK_EA; |
235 | dw_psw.addr = code; | 247 | dw_psw.addr = code; |
236 | /* | 248 | /* |
237 | * Store status and then load disabled wait psw, | 249 | * Store status and then load disabled wait psw, |
diff --git a/arch/s390/include/asm/ptrace.h b/arch/s390/include/asm/ptrace.h index 62fd80c9e98c..a65846340d51 100644 --- a/arch/s390/include/asm/ptrace.h +++ b/arch/s390/include/asm/ptrace.h | |||
@@ -230,17 +230,21 @@ typedef struct | |||
230 | #define PSW_MASK_IO 0x02000000UL | 230 | #define PSW_MASK_IO 0x02000000UL |
231 | #define PSW_MASK_EXT 0x01000000UL | 231 | #define PSW_MASK_EXT 0x01000000UL |
232 | #define PSW_MASK_KEY 0x00F00000UL | 232 | #define PSW_MASK_KEY 0x00F00000UL |
233 | #define PSW_MASK_BASE 0x00080000UL /* always one */ | ||
233 | #define PSW_MASK_MCHECK 0x00040000UL | 234 | #define PSW_MASK_MCHECK 0x00040000UL |
234 | #define PSW_MASK_WAIT 0x00020000UL | 235 | #define PSW_MASK_WAIT 0x00020000UL |
235 | #define PSW_MASK_PSTATE 0x00010000UL | 236 | #define PSW_MASK_PSTATE 0x00010000UL |
236 | #define PSW_MASK_ASC 0x0000C000UL | 237 | #define PSW_MASK_ASC 0x0000C000UL |
237 | #define PSW_MASK_CC 0x00003000UL | 238 | #define PSW_MASK_CC 0x00003000UL |
238 | #define PSW_MASK_PM 0x00000F00UL | 239 | #define PSW_MASK_PM 0x00000F00UL |
240 | #define PSW_MASK_EA 0x00000000UL | ||
241 | #define PSW_MASK_BA 0x00000000UL | ||
242 | |||
243 | #define PSW_MASK_USER 0x00003F00UL | ||
239 | 244 | ||
240 | #define PSW_ADDR_AMODE 0x80000000UL | 245 | #define PSW_ADDR_AMODE 0x80000000UL |
241 | #define PSW_ADDR_INSN 0x7FFFFFFFUL | 246 | #define PSW_ADDR_INSN 0x7FFFFFFFUL |
242 | 247 | ||
243 | #define PSW_BASE_BITS 0x00080000UL | ||
244 | #define PSW_DEFAULT_KEY (((unsigned long) PAGE_DEFAULT_ACC) << 20) | 248 | #define PSW_DEFAULT_KEY (((unsigned long) PAGE_DEFAULT_ACC) << 20) |
245 | 249 | ||
246 | #define PSW_ASC_PRIMARY 0x00000000UL | 250 | #define PSW_ASC_PRIMARY 0x00000000UL |
@@ -254,6 +258,7 @@ typedef struct | |||
254 | #define PSW_MASK_DAT 0x0400000000000000UL | 258 | #define PSW_MASK_DAT 0x0400000000000000UL |
255 | #define PSW_MASK_IO 0x0200000000000000UL | 259 | #define PSW_MASK_IO 0x0200000000000000UL |
256 | #define PSW_MASK_EXT 0x0100000000000000UL | 260 | #define PSW_MASK_EXT 0x0100000000000000UL |
261 | #define PSW_MASK_BASE 0x0000000000000000UL | ||
257 | #define PSW_MASK_KEY 0x00F0000000000000UL | 262 | #define PSW_MASK_KEY 0x00F0000000000000UL |
258 | #define PSW_MASK_MCHECK 0x0004000000000000UL | 263 | #define PSW_MASK_MCHECK 0x0004000000000000UL |
259 | #define PSW_MASK_WAIT 0x0002000000000000UL | 264 | #define PSW_MASK_WAIT 0x0002000000000000UL |
@@ -261,12 +266,14 @@ typedef struct | |||
261 | #define PSW_MASK_ASC 0x0000C00000000000UL | 266 | #define PSW_MASK_ASC 0x0000C00000000000UL |
262 | #define PSW_MASK_CC 0x0000300000000000UL | 267 | #define PSW_MASK_CC 0x0000300000000000UL |
263 | #define PSW_MASK_PM 0x00000F0000000000UL | 268 | #define PSW_MASK_PM 0x00000F0000000000UL |
269 | #define PSW_MASK_EA 0x0000000100000000UL | ||
270 | #define PSW_MASK_BA 0x0000000080000000UL | ||
271 | |||
272 | #define PSW_MASK_USER 0x00003F0180000000UL | ||
264 | 273 | ||
265 | #define PSW_ADDR_AMODE 0x0000000000000000UL | 274 | #define PSW_ADDR_AMODE 0x0000000000000000UL |
266 | #define PSW_ADDR_INSN 0xFFFFFFFFFFFFFFFFUL | 275 | #define PSW_ADDR_INSN 0xFFFFFFFFFFFFFFFFUL |
267 | 276 | ||
268 | #define PSW_BASE_BITS 0x0000000180000000UL | ||
269 | #define PSW_BASE32_BITS 0x0000000080000000UL | ||
270 | #define PSW_DEFAULT_KEY (((unsigned long) PAGE_DEFAULT_ACC) << 52) | 277 | #define PSW_DEFAULT_KEY (((unsigned long) PAGE_DEFAULT_ACC) << 52) |
271 | 278 | ||
272 | #define PSW_ASC_PRIMARY 0x0000000000000000UL | 279 | #define PSW_ASC_PRIMARY 0x0000000000000000UL |
@@ -279,18 +286,7 @@ typedef struct | |||
279 | #ifdef __KERNEL__ | 286 | #ifdef __KERNEL__ |
280 | extern long psw_kernel_bits; | 287 | extern long psw_kernel_bits; |
281 | extern long psw_user_bits; | 288 | extern long psw_user_bits; |
282 | #ifdef CONFIG_64BIT | ||
283 | extern long psw_user32_bits; | ||
284 | #endif | 289 | #endif |
285 | #endif | ||
286 | |||
287 | /* This macro merges a NEW PSW mask specified by the user into | ||
288 | the currently active PSW mask CURRENT, modifying only those | ||
289 | bits in CURRENT that the user may be allowed to change: this | ||
290 | is the condition code and the program mask bits. */ | ||
291 | #define PSW_MASK_MERGE(CURRENT,NEW) \ | ||
292 | (((CURRENT) & ~(PSW_MASK_CC|PSW_MASK_PM)) | \ | ||
293 | ((NEW) & (PSW_MASK_CC|PSW_MASK_PM))) | ||
294 | 290 | ||
295 | /* | 291 | /* |
296 | * The s390_regs structure is used to define the elf_gregset_t. | 292 | * The s390_regs structure is used to define the elf_gregset_t. |
@@ -328,8 +324,7 @@ struct pt_regs | |||
328 | psw_t psw; | 324 | psw_t psw; |
329 | unsigned long gprs[NUM_GPRS]; | 325 | unsigned long gprs[NUM_GPRS]; |
330 | unsigned long orig_gpr2; | 326 | unsigned long orig_gpr2; |
331 | unsigned short ilc; | 327 | unsigned int svc_code; |
332 | unsigned short svcnr; | ||
333 | }; | 328 | }; |
334 | 329 | ||
335 | /* | 330 | /* |
@@ -487,6 +482,8 @@ typedef struct | |||
487 | #define PTRACE_POKETEXT_AREA 0x5004 | 482 | #define PTRACE_POKETEXT_AREA 0x5004 |
488 | #define PTRACE_POKEDATA_AREA 0x5005 | 483 | #define PTRACE_POKEDATA_AREA 0x5005 |
489 | #define PTRACE_GET_LAST_BREAK 0x5006 | 484 | #define PTRACE_GET_LAST_BREAK 0x5006 |
485 | #define PTRACE_PEEK_SYSTEM_CALL 0x5007 | ||
486 | #define PTRACE_POKE_SYSTEM_CALL 0x5008 | ||
490 | 487 | ||
491 | /* | 488 | /* |
492 | * PT_PROT definition is loosely based on hppa bsd definition in | 489 | * PT_PROT definition is loosely based on hppa bsd definition in |
diff --git a/arch/s390/include/asm/reset.h b/arch/s390/include/asm/reset.h index f584f4a52581..3d6ad4ad2a3f 100644 --- a/arch/s390/include/asm/reset.h +++ b/arch/s390/include/asm/reset.h | |||
@@ -17,5 +17,5 @@ struct reset_call { | |||
17 | 17 | ||
18 | extern void register_reset_call(struct reset_call *reset); | 18 | extern void register_reset_call(struct reset_call *reset); |
19 | extern void unregister_reset_call(struct reset_call *reset); | 19 | extern void unregister_reset_call(struct reset_call *reset); |
20 | extern void s390_reset_system(void); | 20 | extern void s390_reset_system(void (*func)(void *), void *data); |
21 | #endif /* _ASM_S390_RESET_H */ | 21 | #endif /* _ASM_S390_RESET_H */ |
diff --git a/arch/s390/include/asm/setup.h b/arch/s390/include/asm/setup.h index d5e2ef10537d..5a099714df04 100644 --- a/arch/s390/include/asm/setup.h +++ b/arch/s390/include/asm/setup.h | |||
@@ -26,15 +26,21 @@ | |||
26 | #define IPL_DEVICE (*(unsigned long *) (0x10404)) | 26 | #define IPL_DEVICE (*(unsigned long *) (0x10404)) |
27 | #define INITRD_START (*(unsigned long *) (0x1040C)) | 27 | #define INITRD_START (*(unsigned long *) (0x1040C)) |
28 | #define INITRD_SIZE (*(unsigned long *) (0x10414)) | 28 | #define INITRD_SIZE (*(unsigned long *) (0x10414)) |
29 | #define OLDMEM_BASE (*(unsigned long *) (0x1041C)) | ||
30 | #define OLDMEM_SIZE (*(unsigned long *) (0x10424)) | ||
29 | #else /* __s390x__ */ | 31 | #else /* __s390x__ */ |
30 | #define IPL_DEVICE (*(unsigned long *) (0x10400)) | 32 | #define IPL_DEVICE (*(unsigned long *) (0x10400)) |
31 | #define INITRD_START (*(unsigned long *) (0x10408)) | 33 | #define INITRD_START (*(unsigned long *) (0x10408)) |
32 | #define INITRD_SIZE (*(unsigned long *) (0x10410)) | 34 | #define INITRD_SIZE (*(unsigned long *) (0x10410)) |
35 | #define OLDMEM_BASE (*(unsigned long *) (0x10418)) | ||
36 | #define OLDMEM_SIZE (*(unsigned long *) (0x10420)) | ||
33 | #endif /* __s390x__ */ | 37 | #endif /* __s390x__ */ |
34 | #define COMMAND_LINE ((char *) (0x10480)) | 38 | #define COMMAND_LINE ((char *) (0x10480)) |
35 | 39 | ||
36 | #define CHUNK_READ_WRITE 0 | 40 | #define CHUNK_READ_WRITE 0 |
37 | #define CHUNK_READ_ONLY 1 | 41 | #define CHUNK_READ_ONLY 1 |
42 | #define CHUNK_OLDMEM 4 | ||
43 | #define CHUNK_CRASHK 5 | ||
38 | 44 | ||
39 | struct mem_chunk { | 45 | struct mem_chunk { |
40 | unsigned long addr; | 46 | unsigned long addr; |
@@ -48,6 +54,8 @@ extern int memory_end_set; | |||
48 | extern unsigned long memory_end; | 54 | extern unsigned long memory_end; |
49 | 55 | ||
50 | void detect_memory_layout(struct mem_chunk chunk[]); | 56 | void detect_memory_layout(struct mem_chunk chunk[]); |
57 | void create_mem_hole(struct mem_chunk memory_chunk[], unsigned long addr, | ||
58 | unsigned long size, int type); | ||
51 | 59 | ||
52 | #define PRIMARY_SPACE_MODE 0 | 60 | #define PRIMARY_SPACE_MODE 0 |
53 | #define ACCESS_REGISTER_MODE 1 | 61 | #define ACCESS_REGISTER_MODE 1 |
@@ -106,6 +114,7 @@ extern unsigned int user_mode; | |||
106 | #endif /* __s390x__ */ | 114 | #endif /* __s390x__ */ |
107 | 115 | ||
108 | #define ZFCPDUMP_HSA_SIZE (32UL<<20) | 116 | #define ZFCPDUMP_HSA_SIZE (32UL<<20) |
117 | #define ZFCPDUMP_HSA_SIZE_MAX (64UL<<20) | ||
109 | 118 | ||
110 | /* | 119 | /* |
111 | * Console mode. Override with conmode= | 120 | * Console mode. Override with conmode= |
@@ -134,10 +143,14 @@ extern char kernel_nss_name[]; | |||
134 | #define IPL_DEVICE 0x10404 | 143 | #define IPL_DEVICE 0x10404 |
135 | #define INITRD_START 0x1040C | 144 | #define INITRD_START 0x1040C |
136 | #define INITRD_SIZE 0x10414 | 145 | #define INITRD_SIZE 0x10414 |
146 | #define OLDMEM_BASE 0x1041C | ||
147 | #define OLDMEM_SIZE 0x10424 | ||
137 | #else /* __s390x__ */ | 148 | #else /* __s390x__ */ |
138 | #define IPL_DEVICE 0x10400 | 149 | #define IPL_DEVICE 0x10400 |
139 | #define INITRD_START 0x10408 | 150 | #define INITRD_START 0x10408 |
140 | #define INITRD_SIZE 0x10410 | 151 | #define INITRD_SIZE 0x10410 |
152 | #define OLDMEM_BASE 0x10418 | ||
153 | #define OLDMEM_SIZE 0x10420 | ||
141 | #endif /* __s390x__ */ | 154 | #endif /* __s390x__ */ |
142 | #define COMMAND_LINE 0x10480 | 155 | #define COMMAND_LINE 0x10480 |
143 | 156 | ||
diff --git a/arch/s390/include/asm/sfp-util.h b/arch/s390/include/asm/sfp-util.h index 0addc6466d95..ca3f8814e361 100644 --- a/arch/s390/include/asm/sfp-util.h +++ b/arch/s390/include/asm/sfp-util.h | |||
@@ -72,6 +72,6 @@ extern unsigned long __udiv_qrnnd (unsigned int *, unsigned int, | |||
72 | 72 | ||
73 | #define UDIV_NEEDS_NORMALIZATION 0 | 73 | #define UDIV_NEEDS_NORMALIZATION 0 |
74 | 74 | ||
75 | #define abort() return 0 | 75 | #define abort() BUG() |
76 | 76 | ||
77 | #define __BYTE_ORDER __BIG_ENDIAN | 77 | #define __BYTE_ORDER __BIG_ENDIAN |
diff --git a/arch/s390/include/asm/smp.h b/arch/s390/include/asm/smp.h index 045e009fc164..ab47a69fdf07 100644 --- a/arch/s390/include/asm/smp.h +++ b/arch/s390/include/asm/smp.h | |||
@@ -33,6 +33,7 @@ extern struct save_area *zfcpdump_save_areas[NR_CPUS + 1]; | |||
33 | extern void smp_switch_to_ipl_cpu(void (*func)(void *), void *); | 33 | extern void smp_switch_to_ipl_cpu(void (*func)(void *), void *); |
34 | extern void smp_switch_to_cpu(void (*)(void *), void *, unsigned long sp, | 34 | extern void smp_switch_to_cpu(void (*)(void *), void *, unsigned long sp, |
35 | int from, int to); | 35 | int from, int to); |
36 | extern void smp_restart_with_online_cpu(void); | ||
36 | extern void smp_restart_cpu(void); | 37 | extern void smp_restart_cpu(void); |
37 | 38 | ||
38 | /* | 39 | /* |
@@ -64,6 +65,10 @@ static inline void smp_switch_to_ipl_cpu(void (*func)(void *), void *data) | |||
64 | func(data); | 65 | func(data); |
65 | } | 66 | } |
66 | 67 | ||
68 | static inline void smp_restart_with_online_cpu(void) | ||
69 | { | ||
70 | } | ||
71 | |||
67 | #define smp_vcpu_scheduled (1) | 72 | #define smp_vcpu_scheduled (1) |
68 | 73 | ||
69 | #endif /* CONFIG_SMP */ | 74 | #endif /* CONFIG_SMP */ |
diff --git a/arch/s390/include/asm/spinlock.h b/arch/s390/include/asm/spinlock.h index 56612fc8186e..fd94dfec8d08 100644 --- a/arch/s390/include/asm/spinlock.h +++ b/arch/s390/include/asm/spinlock.h | |||
@@ -13,6 +13,8 @@ | |||
13 | 13 | ||
14 | #include <linux/smp.h> | 14 | #include <linux/smp.h> |
15 | 15 | ||
16 | extern int spin_retry; | ||
17 | |||
16 | static inline int | 18 | static inline int |
17 | _raw_compare_and_swap(volatile unsigned int *lock, | 19 | _raw_compare_and_swap(volatile unsigned int *lock, |
18 | unsigned int old, unsigned int new) | 20 | unsigned int old, unsigned int new) |
diff --git a/arch/s390/include/asm/syscall.h b/arch/s390/include/asm/syscall.h index 5c0246b955d8..b239ff53b189 100644 --- a/arch/s390/include/asm/syscall.h +++ b/arch/s390/include/asm/syscall.h | |||
@@ -13,6 +13,7 @@ | |||
13 | #define _ASM_SYSCALL_H 1 | 13 | #define _ASM_SYSCALL_H 1 |
14 | 14 | ||
15 | #include <linux/sched.h> | 15 | #include <linux/sched.h> |
16 | #include <linux/err.h> | ||
16 | #include <asm/ptrace.h> | 17 | #include <asm/ptrace.h> |
17 | 18 | ||
18 | /* | 19 | /* |
@@ -25,7 +26,8 @@ extern const unsigned int sys_call_table[]; | |||
25 | static inline long syscall_get_nr(struct task_struct *task, | 26 | static inline long syscall_get_nr(struct task_struct *task, |
26 | struct pt_regs *regs) | 27 | struct pt_regs *regs) |
27 | { | 28 | { |
28 | return regs->svcnr ? regs->svcnr : -1; | 29 | return test_tsk_thread_flag(task, TIF_SYSCALL) ? |
30 | (regs->svc_code & 0xffff) : -1; | ||
29 | } | 31 | } |
30 | 32 | ||
31 | static inline void syscall_rollback(struct task_struct *task, | 33 | static inline void syscall_rollback(struct task_struct *task, |
@@ -37,7 +39,7 @@ static inline void syscall_rollback(struct task_struct *task, | |||
37 | static inline long syscall_get_error(struct task_struct *task, | 39 | static inline long syscall_get_error(struct task_struct *task, |
38 | struct pt_regs *regs) | 40 | struct pt_regs *regs) |
39 | { | 41 | { |
40 | return (regs->gprs[2] >= -4096UL) ? -regs->gprs[2] : 0; | 42 | return IS_ERR_VALUE(regs->gprs[2]) ? regs->gprs[2] : 0; |
41 | } | 43 | } |
42 | 44 | ||
43 | static inline long syscall_get_return_value(struct task_struct *task, | 45 | static inline long syscall_get_return_value(struct task_struct *task, |
diff --git a/arch/s390/include/asm/system.h b/arch/s390/include/asm/system.h index 6582f69f2389..ef573c1d71a7 100644 --- a/arch/s390/include/asm/system.h +++ b/arch/s390/include/asm/system.h | |||
@@ -20,6 +20,8 @@ | |||
20 | 20 | ||
21 | struct task_struct; | 21 | struct task_struct; |
22 | 22 | ||
23 | extern int sysctl_userprocess_debug; | ||
24 | |||
23 | extern struct task_struct *__switch_to(void *, void *); | 25 | extern struct task_struct *__switch_to(void *, void *); |
24 | extern void update_per_regs(struct task_struct *task); | 26 | extern void update_per_regs(struct task_struct *task); |
25 | 27 | ||
@@ -114,6 +116,8 @@ extern void pfault_fini(void); | |||
114 | extern void cmma_init(void); | 116 | extern void cmma_init(void); |
115 | extern int memcpy_real(void *, void *, size_t); | 117 | extern int memcpy_real(void *, void *, size_t); |
116 | extern void copy_to_absolute_zero(void *dest, void *src, size_t count); | 118 | extern void copy_to_absolute_zero(void *dest, void *src, size_t count); |
119 | extern int copy_to_user_real(void __user *dest, void *src, size_t count); | ||
120 | extern int copy_from_user_real(void *dest, void __user *src, size_t count); | ||
117 | 121 | ||
118 | #define finish_arch_switch(prev) do { \ | 122 | #define finish_arch_switch(prev) do { \ |
119 | set_fs(current->thread.mm_segment); \ | 123 | set_fs(current->thread.mm_segment); \ |
@@ -210,8 +214,10 @@ __set_psw_mask(unsigned long mask) | |||
210 | __load_psw_mask(mask | (arch_local_save_flags() & ~(-1UL >> 8))); | 214 | __load_psw_mask(mask | (arch_local_save_flags() & ~(-1UL >> 8))); |
211 | } | 215 | } |
212 | 216 | ||
213 | #define local_mcck_enable() __set_psw_mask(psw_kernel_bits) | 217 | #define local_mcck_enable() \ |
214 | #define local_mcck_disable() __set_psw_mask(psw_kernel_bits & ~PSW_MASK_MCHECK) | 218 | __set_psw_mask(psw_kernel_bits | PSW_MASK_DAT | PSW_MASK_MCHECK) |
219 | #define local_mcck_disable() \ | ||
220 | __set_psw_mask(psw_kernel_bits | PSW_MASK_DAT) | ||
215 | 221 | ||
216 | #ifdef CONFIG_SMP | 222 | #ifdef CONFIG_SMP |
217 | 223 | ||
diff --git a/arch/s390/include/asm/thread_info.h b/arch/s390/include/asm/thread_info.h index 1a5dbb6f1495..a23183423b14 100644 --- a/arch/s390/include/asm/thread_info.h +++ b/arch/s390/include/asm/thread_info.h | |||
@@ -48,6 +48,7 @@ struct thread_info { | |||
48 | unsigned int cpu; /* current CPU */ | 48 | unsigned int cpu; /* current CPU */ |
49 | int preempt_count; /* 0 => preemptable, <0 => BUG */ | 49 | int preempt_count; /* 0 => preemptable, <0 => BUG */ |
50 | struct restart_block restart_block; | 50 | struct restart_block restart_block; |
51 | unsigned int system_call; | ||
51 | __u64 user_timer; | 52 | __u64 user_timer; |
52 | __u64 system_timer; | 53 | __u64 system_timer; |
53 | unsigned long last_break; /* last breaking-event-address. */ | 54 | unsigned long last_break; /* last breaking-event-address. */ |
@@ -84,10 +85,10 @@ static inline struct thread_info *current_thread_info(void) | |||
84 | /* | 85 | /* |
85 | * thread information flags bit numbers | 86 | * thread information flags bit numbers |
86 | */ | 87 | */ |
88 | #define TIF_SYSCALL 0 /* inside a system call */ | ||
87 | #define TIF_NOTIFY_RESUME 1 /* callback before returning to user */ | 89 | #define TIF_NOTIFY_RESUME 1 /* callback before returning to user */ |
88 | #define TIF_SIGPENDING 2 /* signal pending */ | 90 | #define TIF_SIGPENDING 2 /* signal pending */ |
89 | #define TIF_NEED_RESCHED 3 /* rescheduling necessary */ | 91 | #define TIF_NEED_RESCHED 3 /* rescheduling necessary */ |
90 | #define TIF_RESTART_SVC 4 /* restart svc with new svc number */ | ||
91 | #define TIF_PER_TRAP 6 /* deliver sigtrap on return to user */ | 92 | #define TIF_PER_TRAP 6 /* deliver sigtrap on return to user */ |
92 | #define TIF_MCCK_PENDING 7 /* machine check handling is pending */ | 93 | #define TIF_MCCK_PENDING 7 /* machine check handling is pending */ |
93 | #define TIF_SYSCALL_TRACE 8 /* syscall trace active */ | 94 | #define TIF_SYSCALL_TRACE 8 /* syscall trace active */ |
@@ -103,11 +104,11 @@ static inline struct thread_info *current_thread_info(void) | |||
103 | #define TIF_SINGLE_STEP 20 /* This task is single stepped */ | 104 | #define TIF_SINGLE_STEP 20 /* This task is single stepped */ |
104 | #define TIF_FREEZE 21 /* thread is freezing for suspend */ | 105 | #define TIF_FREEZE 21 /* thread is freezing for suspend */ |
105 | 106 | ||
107 | #define _TIF_SYSCALL (1<<TIF_SYSCALL) | ||
106 | #define _TIF_NOTIFY_RESUME (1<<TIF_NOTIFY_RESUME) | 108 | #define _TIF_NOTIFY_RESUME (1<<TIF_NOTIFY_RESUME) |
107 | #define _TIF_RESTORE_SIGMASK (1<<TIF_RESTORE_SIGMASK) | 109 | #define _TIF_RESTORE_SIGMASK (1<<TIF_RESTORE_SIGMASK) |
108 | #define _TIF_SIGPENDING (1<<TIF_SIGPENDING) | 110 | #define _TIF_SIGPENDING (1<<TIF_SIGPENDING) |
109 | #define _TIF_NEED_RESCHED (1<<TIF_NEED_RESCHED) | 111 | #define _TIF_NEED_RESCHED (1<<TIF_NEED_RESCHED) |
110 | #define _TIF_RESTART_SVC (1<<TIF_RESTART_SVC) | ||
111 | #define _TIF_PER_TRAP (1<<TIF_PER_TRAP) | 112 | #define _TIF_PER_TRAP (1<<TIF_PER_TRAP) |
112 | #define _TIF_MCCK_PENDING (1<<TIF_MCCK_PENDING) | 113 | #define _TIF_MCCK_PENDING (1<<TIF_MCCK_PENDING) |
113 | #define _TIF_SYSCALL_TRACE (1<<TIF_SYSCALL_TRACE) | 114 | #define _TIF_SYSCALL_TRACE (1<<TIF_SYSCALL_TRACE) |
@@ -117,7 +118,7 @@ static inline struct thread_info *current_thread_info(void) | |||
117 | #define _TIF_SIE (1<<TIF_SIE) | 118 | #define _TIF_SIE (1<<TIF_SIE) |
118 | #define _TIF_POLLING_NRFLAG (1<<TIF_POLLING_NRFLAG) | 119 | #define _TIF_POLLING_NRFLAG (1<<TIF_POLLING_NRFLAG) |
119 | #define _TIF_31BIT (1<<TIF_31BIT) | 120 | #define _TIF_31BIT (1<<TIF_31BIT) |
120 | #define _TIF_SINGLE_STEP (1<<TIF_FREEZE) | 121 | #define _TIF_SINGLE_STEP (1<<TIF_SINGLE_STEP) |
121 | #define _TIF_FREEZE (1<<TIF_FREEZE) | 122 | #define _TIF_FREEZE (1<<TIF_FREEZE) |
122 | 123 | ||
123 | #ifdef CONFIG_64BIT | 124 | #ifdef CONFIG_64BIT |
diff --git a/arch/s390/include/asm/timex.h b/arch/s390/include/asm/timex.h index 88829a40af6f..d610bef9c5e9 100644 --- a/arch/s390/include/asm/timex.h +++ b/arch/s390/include/asm/timex.h | |||
@@ -86,6 +86,17 @@ static inline void get_clock_ext(char *clk) | |||
86 | asm volatile("stcke %0" : "=Q" (*clk) : : "cc"); | 86 | asm volatile("stcke %0" : "=Q" (*clk) : : "cc"); |
87 | } | 87 | } |
88 | 88 | ||
89 | static inline unsigned long long get_clock_fast(void) | ||
90 | { | ||
91 | unsigned long long clk; | ||
92 | |||
93 | if (test_facility(25)) | ||
94 | asm volatile(".insn s,0xb27c0000,%0" : "=Q" (clk) : : "cc"); | ||
95 | else | ||
96 | clk = get_clock(); | ||
97 | return clk; | ||
98 | } | ||
99 | |||
89 | static inline unsigned long long get_clock_xt(void) | 100 | static inline unsigned long long get_clock_xt(void) |
90 | { | 101 | { |
91 | unsigned char clk[16]; | 102 | unsigned char clk[16]; |
diff --git a/arch/s390/include/asm/tlbflush.h b/arch/s390/include/asm/tlbflush.h index 304445382382..1d8648cf2fea 100644 --- a/arch/s390/include/asm/tlbflush.h +++ b/arch/s390/include/asm/tlbflush.h | |||
@@ -59,6 +59,7 @@ static inline void __tlb_flush_full(struct mm_struct *mm) | |||
59 | } | 59 | } |
60 | #else | 60 | #else |
61 | #define __tlb_flush_full(mm) __tlb_flush_local() | 61 | #define __tlb_flush_full(mm) __tlb_flush_local() |
62 | #define __tlb_flush_global() __tlb_flush_local() | ||
62 | #endif | 63 | #endif |
63 | 64 | ||
64 | /* | 65 | /* |