Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Disintegrate asm/system.h for S390

Disintegrate asm/system.h for S390.

Signed-off-by: David Howells <dhowells@redhat.com>
cc: linux-s390@vger.kernel.org

+369 -335
+1
arch/s390/crypto/crypt_s390.h
··· 17 17 #define _CRYPTO_ARCH_S390_CRYPT_S390_H 18 18 19 19 #include <asm/errno.h> 20 + #include <asm/facility.h> 20 21 21 22 #define CRYPT_S390_OP_MASK 0xFF00 22 23 #define CRYPT_S390_FUNC_MASK 0x00FF
+1 -1
arch/s390/include/asm/atomic.h
··· 15 15 16 16 #include <linux/compiler.h> 17 17 #include <linux/types.h> 18 - #include <asm/system.h> 18 + #include <asm/cmpxchg.h> 19 19 20 20 #define ATOMIC_INIT(i) { (i) } 21 21
+35
arch/s390/include/asm/barrier.h
··· 1 + /* 2 + * Copyright IBM Corp. 1999, 2009 3 + * 4 + * Author(s): Martin Schwidefsky <schwidefsky@de.ibm.com> 5 + */ 6 + 7 + #ifndef __ASM_BARRIER_H 8 + #define __ASM_BARRIER_H 9 + 10 + /* 11 + * Force strict CPU ordering. 12 + * And yes, this is required on UP too when we're talking 13 + * to devices. 14 + * 15 + * This is very similar to the ppc eieio/sync instruction in that is 16 + * does a checkpoint syncronisation & makes sure that 17 + * all memory ops have completed wrt other CPU's ( see 7-15 POP DJB ). 18 + */ 19 + 20 + #define eieio() asm volatile("bcr 15,0" : : : "memory") 21 + #define SYNC_OTHER_CORES(x) eieio() 22 + #define mb() eieio() 23 + #define rmb() eieio() 24 + #define wmb() eieio() 25 + #define read_barrier_depends() do { } while(0) 26 + #define smp_mb() mb() 27 + #define smp_rmb() rmb() 28 + #define smp_wmb() wmb() 29 + #define smp_read_barrier_depends() read_barrier_depends() 30 + #define smp_mb__before_clear_bit() smp_mb() 31 + #define smp_mb__after_clear_bit() smp_mb() 32 + 33 + #define set_mb(var, value) do { var = value; mb(); } while (0) 34 + 35 + #endif /* __ASM_BARRIER_H */
+76
arch/s390/include/asm/ctl_reg.h
··· 1 + /* 2 + * Copyright IBM Corp. 1999, 2009 3 + * 4 + * Author(s): Martin Schwidefsky <schwidefsky@de.ibm.com> 5 + */ 6 + 7 + #ifndef __ASM_CTL_REG_H 8 + #define __ASM_CTL_REG_H 9 + 10 + #ifdef __s390x__ 11 + 12 + #define __ctl_load(array, low, high) ({ \ 13 + typedef struct { char _[sizeof(array)]; } addrtype; \ 14 + asm volatile( \ 15 + " lctlg %1,%2,%0\n" \ 16 + : : "Q" (*(addrtype *)(&array)), \ 17 + "i" (low), "i" (high)); \ 18 + }) 19 + 20 + #define __ctl_store(array, low, high) ({ \ 21 + typedef struct { char _[sizeof(array)]; } addrtype; \ 22 + asm volatile( \ 23 + " stctg %1,%2,%0\n" \ 24 + : "=Q" (*(addrtype *)(&array)) \ 25 + : "i" (low), "i" (high)); \ 26 + }) 27 + 28 + #else /* __s390x__ */ 29 + 30 + #define __ctl_load(array, low, high) ({ \ 31 + typedef struct { char _[sizeof(array)]; } addrtype; \ 32 + asm volatile( \ 33 + " lctl %1,%2,%0\n" \ 34 + : : "Q" (*(addrtype *)(&array)), \ 35 + "i" (low), "i" (high)); \ 36 + }) 37 + 38 + #define __ctl_store(array, low, high) ({ \ 39 + typedef struct { char _[sizeof(array)]; } addrtype; \ 40 + asm volatile( \ 41 + " stctl %1,%2,%0\n" \ 42 + : "=Q" (*(addrtype *)(&array)) \ 43 + : "i" (low), "i" (high)); \ 44 + }) 45 + 46 + #endif /* __s390x__ */ 47 + 48 + #define __ctl_set_bit(cr, bit) ({ \ 49 + unsigned long __dummy; \ 50 + __ctl_store(__dummy, cr, cr); \ 51 + __dummy |= 1UL << (bit); \ 52 + __ctl_load(__dummy, cr, cr); \ 53 + }) 54 + 55 + #define __ctl_clear_bit(cr, bit) ({ \ 56 + unsigned long __dummy; \ 57 + __ctl_store(__dummy, cr, cr); \ 58 + __dummy &= ~(1UL << (bit)); \ 59 + __ctl_load(__dummy, cr, cr); \ 60 + }) 61 + 62 + #ifdef CONFIG_SMP 63 + 64 + extern void smp_ctl_set_bit(int cr, int bit); 65 + extern void smp_ctl_clear_bit(int cr, int bit); 66 + #define ctl_set_bit(cr, bit) smp_ctl_set_bit(cr, bit) 67 + #define ctl_clear_bit(cr, bit) smp_ctl_clear_bit(cr, bit) 68 + 69 + #else 70 + 71 + #define ctl_set_bit(cr, bit) __ctl_set_bit(cr, bit) 72 + #define ctl_clear_bit(cr, bit) __ctl_clear_bit(cr, bit) 73 + 74 + #endif /* CONFIG_SMP */ 75 + 76 + #endif /* __ASM_CTL_REG_H */
-1
arch/s390/include/asm/elf.h
··· 129 129 typedef s390_compat_regs compat_elf_gregset_t; 130 130 131 131 #include <linux/sched.h> /* for task_struct */ 132 - #include <asm/system.h> /* for save_access_regs */ 133 132 #include <asm/mmu_context.h> 134 133 135 134 #include <asm/vdso.h>
+12
arch/s390/include/asm/exec.h
··· 1 + /* 2 + * Copyright IBM Corp. 1999, 2009 3 + * 4 + * Author(s): Martin Schwidefsky <schwidefsky@de.ibm.com> 5 + */ 6 + 7 + #ifndef __ASM_EXEC_H 8 + #define __ASM_EXEC_H 9 + 10 + extern unsigned long arch_align_stack(unsigned long sp); 11 + 12 + #endif /* __ASM_EXEC_H */
+63
arch/s390/include/asm/facility.h
··· 1 + /* 2 + * Copyright IBM Corp. 1999, 2009 3 + * 4 + * Author(s): Martin Schwidefsky <schwidefsky@de.ibm.com> 5 + */ 6 + 7 + #ifndef __ASM_FACILITY_H 8 + #define __ASM_FACILITY_H 9 + 10 + #include <linux/string.h> 11 + #include <linux/preempt.h> 12 + #include <asm/lowcore.h> 13 + 14 + #define MAX_FACILITY_BIT (256*8) /* stfle_fac_list has 256 bytes */ 15 + 16 + /* 17 + * The test_facility function uses the bit odering where the MSB is bit 0. 18 + * That makes it easier to query facility bits with the bit number as 19 + * documented in the Principles of Operation. 20 + */ 21 + static inline int test_facility(unsigned long nr) 22 + { 23 + unsigned char *ptr; 24 + 25 + if (nr >= MAX_FACILITY_BIT) 26 + return 0; 27 + ptr = (unsigned char *) &S390_lowcore.stfle_fac_list + (nr >> 3); 28 + return (*ptr & (0x80 >> (nr & 7))) != 0; 29 + } 30 + 31 + /** 32 + * stfle - Store facility list extended 33 + * @stfle_fac_list: array where facility list can be stored 34 + * @size: size of passed in array in double words 35 + */ 36 + static inline void stfle(u64 *stfle_fac_list, int size) 37 + { 38 + unsigned long nr; 39 + 40 + preempt_disable(); 41 + S390_lowcore.stfl_fac_list = 0; 42 + asm volatile( 43 + " .insn s,0xb2b10000,0(0)\n" /* stfl */ 44 + "0:\n" 45 + EX_TABLE(0b, 0b) 46 + : "=m" (S390_lowcore.stfl_fac_list)); 47 + nr = 4; /* bytes stored by stfl */ 48 + memcpy(stfle_fac_list, &S390_lowcore.stfl_fac_list, 4); 49 + if (S390_lowcore.stfl_fac_list & 0x01000000) { 50 + /* More facility bits available with stfle */ 51 + register unsigned long reg0 asm("0") = size - 1; 52 + 53 + asm volatile(".insn s,0xb2b00000,0(%1)" /* stfle */ 54 + : "+d" (reg0) 55 + : "a" (stfle_fac_list) 56 + : "memory", "cc"); 57 + nr = (reg0 + 1) * 8; /* # bytes stored by stfle */ 58 + } 59 + memset((char *) stfle_fac_list + nr, 0, size * 8 - nr); 60 + preempt_enable(); 61 + } 62 + 63 + #endif /* __ASM_FACILITY_H */
+14
arch/s390/include/asm/mmu.h
··· 21 21 .context.pgtable_list = LIST_HEAD_INIT(name.context.pgtable_list), \ 22 22 .context.gmap_list = LIST_HEAD_INIT(name.context.gmap_list), 23 23 24 + static inline int tprot(unsigned long addr) 25 + { 26 + int rc = -EFAULT; 27 + 28 + asm volatile( 29 + " tprot 0(%1),0\n" 30 + "0: ipm %0\n" 31 + " srl %0,28\n" 32 + "1:\n" 33 + EX_TABLE(0b,1b) 34 + : "+d" (rc) : "a" (addr) : "cc"); 35 + return rc; 36 + } 37 + 24 38 #endif
+1
arch/s390/include/asm/mmu_context.h
··· 12 12 #include <asm/pgalloc.h> 13 13 #include <asm/uaccess.h> 14 14 #include <asm/tlbflush.h> 15 + #include <asm/ctl_reg.h> 15 16 #include <asm-generic/mm_hooks.h> 16 17 17 18 static inline int init_new_context(struct task_struct *tsk,
+24
arch/s390/include/asm/processor.h
··· 14 14 #define __ASM_S390_PROCESSOR_H 15 15 16 16 #include <linux/linkage.h> 17 + #include <linux/irqflags.h> 17 18 #include <asm/cpu.h> 18 19 #include <asm/page.h> 19 20 #include <asm/ptrace.h> ··· 156 155 (task_stack_page(tsk) + THREAD_SIZE) - 1) 157 156 #define KSTK_EIP(tsk) (task_pt_regs(tsk)->psw.addr) 158 157 #define KSTK_ESP(tsk) (task_pt_regs(tsk)->gprs[15]) 158 + 159 + static inline unsigned short stap(void) 160 + { 161 + unsigned short cpu_address; 162 + 163 + asm volatile("stap %0" : "=m" (cpu_address)); 164 + return cpu_address; 165 + } 159 166 160 167 /* 161 168 * Give up the time slice of the virtual PU. ··· 311 302 #endif /* __s390x__ */ 312 303 while (1); 313 304 } 305 + 306 + /* 307 + * Use to set psw mask except for the first byte which 308 + * won't be changed by this function. 309 + */ 310 + static inline void 311 + __set_psw_mask(unsigned long mask) 312 + { 313 + __load_psw_mask(mask | (arch_local_save_flags() & ~(-1UL >> 8))); 314 + } 315 + 316 + #define local_mcck_enable() \ 317 + __set_psw_mask(psw_kernel_bits | PSW_MASK_DAT | PSW_MASK_MCHECK) 318 + #define local_mcck_disable() \ 319 + __set_psw_mask(psw_kernel_bits | PSW_MASK_DAT) 314 320 315 321 /* 316 322 * Basic Machine Check/Program Check Handler.
+14
arch/s390/include/asm/setup.h
··· 140 140 #define NSS_NAME_SIZE 8 141 141 extern char kernel_nss_name[]; 142 142 143 + #ifdef CONFIG_PFAULT 144 + extern int pfault_init(void); 145 + extern void pfault_fini(void); 146 + #else /* CONFIG_PFAULT */ 147 + #define pfault_init() ({-1;}) 148 + #define pfault_fini() do { } while (0) 149 + #endif /* CONFIG_PFAULT */ 150 + 151 + extern void cmma_init(void); 152 + 153 + extern void (*_machine_restart)(char *command); 154 + extern void (*_machine_halt)(void); 155 + extern void (*_machine_power_off)(void); 156 + 143 157 #else /* __ASSEMBLY__ */ 144 158 145 159 #ifndef __s390x__
+1 -1
arch/s390/include/asm/smp.h
··· 9 9 10 10 #ifdef CONFIG_SMP 11 11 12 - #include <asm/system.h> 12 + #include <asm/lowcore.h> 13 13 14 14 #define raw_smp_processor_id() (S390_lowcore.cpu_nr) 15 15
+100
arch/s390/include/asm/switch_to.h
··· 1 + /* 2 + * Copyright IBM Corp. 1999, 2009 3 + * 4 + * Author(s): Martin Schwidefsky <schwidefsky@de.ibm.com> 5 + */ 6 + 7 + #ifndef __ASM_SWITCH_TO_H 8 + #define __ASM_SWITCH_TO_H 9 + 10 + #include <linux/thread_info.h> 11 + 12 + extern struct task_struct *__switch_to(void *, void *); 13 + extern void update_per_regs(struct task_struct *task); 14 + 15 + static inline void save_fp_regs(s390_fp_regs *fpregs) 16 + { 17 + asm volatile( 18 + " std 0,%O0+8(%R0)\n" 19 + " std 2,%O0+24(%R0)\n" 20 + " std 4,%O0+40(%R0)\n" 21 + " std 6,%O0+56(%R0)" 22 + : "=Q" (*fpregs) : "Q" (*fpregs)); 23 + if (!MACHINE_HAS_IEEE) 24 + return; 25 + asm volatile( 26 + " stfpc %0\n" 27 + " std 1,%O0+16(%R0)\n" 28 + " std 3,%O0+32(%R0)\n" 29 + " std 5,%O0+48(%R0)\n" 30 + " std 7,%O0+64(%R0)\n" 31 + " std 8,%O0+72(%R0)\n" 32 + " std 9,%O0+80(%R0)\n" 33 + " std 10,%O0+88(%R0)\n" 34 + " std 11,%O0+96(%R0)\n" 35 + " std 12,%O0+104(%R0)\n" 36 + " std 13,%O0+112(%R0)\n" 37 + " std 14,%O0+120(%R0)\n" 38 + " std 15,%O0+128(%R0)\n" 39 + : "=Q" (*fpregs) : "Q" (*fpregs)); 40 + } 41 + 42 + static inline void restore_fp_regs(s390_fp_regs *fpregs) 43 + { 44 + asm volatile( 45 + " ld 0,%O0+8(%R0)\n" 46 + " ld 2,%O0+24(%R0)\n" 47 + " ld 4,%O0+40(%R0)\n" 48 + " ld 6,%O0+56(%R0)" 49 + : : "Q" (*fpregs)); 50 + if (!MACHINE_HAS_IEEE) 51 + return; 52 + asm volatile( 53 + " lfpc %0\n" 54 + " ld 1,%O0+16(%R0)\n" 55 + " ld 3,%O0+32(%R0)\n" 56 + " ld 5,%O0+48(%R0)\n" 57 + " ld 7,%O0+64(%R0)\n" 58 + " ld 8,%O0+72(%R0)\n" 59 + " ld 9,%O0+80(%R0)\n" 60 + " ld 10,%O0+88(%R0)\n" 61 + " ld 11,%O0+96(%R0)\n" 62 + " ld 12,%O0+104(%R0)\n" 63 + " ld 13,%O0+112(%R0)\n" 64 + " ld 14,%O0+120(%R0)\n" 65 + " ld 15,%O0+128(%R0)\n" 66 + : : "Q" (*fpregs)); 67 + } 68 + 69 + static inline void save_access_regs(unsigned int *acrs) 70 + { 71 + asm volatile("stam 0,15,%0" : "=Q" (*acrs)); 72 + } 73 + 74 + static inline void restore_access_regs(unsigned int *acrs) 75 + { 76 + asm volatile("lam 0,15,%0" : : "Q" (*acrs)); 77 + } 78 + 79 + #define switch_to(prev,next,last) do { \ 80 + if (prev->mm) { \ 81 + save_fp_regs(&prev->thread.fp_regs); \ 82 + save_access_regs(&prev->thread.acrs[0]); \ 83 + } \ 84 + if (next->mm) { \ 85 + restore_fp_regs(&next->thread.fp_regs); \ 86 + restore_access_regs(&next->thread.acrs[0]); \ 87 + update_per_regs(next); \ 88 + } \ 89 + prev = __switch_to(prev,next); \ 90 + } while (0) 91 + 92 + extern void account_vtime(struct task_struct *, struct task_struct *); 93 + extern void account_tick_vtime(struct task_struct *); 94 + 95 + #define finish_arch_switch(prev) do { \ 96 + set_fs(current->thread.mm_segment); \ 97 + account_vtime(prev, current); \ 98 + } while (0) 99 + 100 + #endif /* __ASM_SWITCH_TO_H */
+6 -314
arch/s390/include/asm/system.h
··· 1 - /* 2 - * Copyright IBM Corp. 1999, 2009 3 - * 4 - * Author(s): Martin Schwidefsky <schwidefsky@de.ibm.com> 5 - */ 6 - 7 - #ifndef __ASM_SYSTEM_H 8 - #define __ASM_SYSTEM_H 9 - 10 - #include <linux/preempt.h> 11 - #include <linux/kernel.h> 12 - #include <linux/errno.h> 13 - #include <linux/string.h> 14 - #include <asm/types.h> 15 - #include <asm/ptrace.h> 16 - #include <asm/setup.h> 17 - #include <asm/processor.h> 18 - #include <asm/lowcore.h> 1 + /* FILE TO BE DELETED. DO NOT ADD STUFF HERE! */ 2 + #include <asm/barrier.h> 19 3 #include <asm/cmpxchg.h> 20 - 21 - #ifdef __KERNEL__ 22 - 23 - struct task_struct; 24 - 25 - extern struct task_struct *__switch_to(void *, void *); 26 - extern void update_per_regs(struct task_struct *task); 27 - 28 - static inline void save_fp_regs(s390_fp_regs *fpregs) 29 - { 30 - asm volatile( 31 - " std 0,%O0+8(%R0)\n" 32 - " std 2,%O0+24(%R0)\n" 33 - " std 4,%O0+40(%R0)\n" 34 - " std 6,%O0+56(%R0)" 35 - : "=Q" (*fpregs) : "Q" (*fpregs)); 36 - if (!MACHINE_HAS_IEEE) 37 - return; 38 - asm volatile( 39 - " stfpc %0\n" 40 - " std 1,%O0+16(%R0)\n" 41 - " std 3,%O0+32(%R0)\n" 42 - " std 5,%O0+48(%R0)\n" 43 - " std 7,%O0+64(%R0)\n" 44 - " std 8,%O0+72(%R0)\n" 45 - " std 9,%O0+80(%R0)\n" 46 - " std 10,%O0+88(%R0)\n" 47 - " std 11,%O0+96(%R0)\n" 48 - " std 12,%O0+104(%R0)\n" 49 - " std 13,%O0+112(%R0)\n" 50 - " std 14,%O0+120(%R0)\n" 51 - " std 15,%O0+128(%R0)\n" 52 - : "=Q" (*fpregs) : "Q" (*fpregs)); 53 - } 54 - 55 - static inline void restore_fp_regs(s390_fp_regs *fpregs) 56 - { 57 - asm volatile( 58 - " ld 0,%O0+8(%R0)\n" 59 - " ld 2,%O0+24(%R0)\n" 60 - " ld 4,%O0+40(%R0)\n" 61 - " ld 6,%O0+56(%R0)" 62 - : : "Q" (*fpregs)); 63 - if (!MACHINE_HAS_IEEE) 64 - return; 65 - asm volatile( 66 - " lfpc %0\n" 67 - " ld 1,%O0+16(%R0)\n" 68 - " ld 3,%O0+32(%R0)\n" 69 - " ld 5,%O0+48(%R0)\n" 70 - " ld 7,%O0+64(%R0)\n" 71 - " ld 8,%O0+72(%R0)\n" 72 - " ld 9,%O0+80(%R0)\n" 73 - " ld 10,%O0+88(%R0)\n" 74 - " ld 11,%O0+96(%R0)\n" 75 - " ld 12,%O0+104(%R0)\n" 76 - " ld 13,%O0+112(%R0)\n" 77 - " ld 14,%O0+120(%R0)\n" 78 - " ld 15,%O0+128(%R0)\n" 79 - : : "Q" (*fpregs)); 80 - } 81 - 82 - static inline void save_access_regs(unsigned int *acrs) 83 - { 84 - asm volatile("stam 0,15,%0" : "=Q" (*acrs)); 85 - } 86 - 87 - static inline void restore_access_regs(unsigned int *acrs) 88 - { 89 - asm volatile("lam 0,15,%0" : : "Q" (*acrs)); 90 - } 91 - 92 - #define switch_to(prev,next,last) do { \ 93 - if (prev->mm) { \ 94 - save_fp_regs(&prev->thread.fp_regs); \ 95 - save_access_regs(&prev->thread.acrs[0]); \ 96 - } \ 97 - if (next->mm) { \ 98 - restore_fp_regs(&next->thread.fp_regs); \ 99 - restore_access_regs(&next->thread.acrs[0]); \ 100 - update_per_regs(next); \ 101 - } \ 102 - prev = __switch_to(prev,next); \ 103 - } while (0) 104 - 105 - extern void account_vtime(struct task_struct *, struct task_struct *); 106 - extern void account_tick_vtime(struct task_struct *); 107 - 108 - #ifdef CONFIG_PFAULT 109 - extern int pfault_init(void); 110 - extern void pfault_fini(void); 111 - #else /* CONFIG_PFAULT */ 112 - #define pfault_init() ({-1;}) 113 - #define pfault_fini() do { } while (0) 114 - #endif /* CONFIG_PFAULT */ 115 - 116 - extern void cmma_init(void); 117 - extern int memcpy_real(void *, void *, size_t); 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); 121 - 122 - #define finish_arch_switch(prev) do { \ 123 - set_fs(current->thread.mm_segment); \ 124 - account_vtime(prev, current); \ 125 - } while (0) 126 - 127 - #define nop() asm volatile("nop") 128 - 129 - /* 130 - * Force strict CPU ordering. 131 - * And yes, this is required on UP too when we're talking 132 - * to devices. 133 - * 134 - * This is very similar to the ppc eieio/sync instruction in that is 135 - * does a checkpoint syncronisation & makes sure that 136 - * all memory ops have completed wrt other CPU's ( see 7-15 POP DJB ). 137 - */ 138 - 139 - #define eieio() asm volatile("bcr 15,0" : : : "memory") 140 - #define SYNC_OTHER_CORES(x) eieio() 141 - #define mb() eieio() 142 - #define rmb() eieio() 143 - #define wmb() eieio() 144 - #define read_barrier_depends() do { } while(0) 145 - #define smp_mb() mb() 146 - #define smp_rmb() rmb() 147 - #define smp_wmb() wmb() 148 - #define smp_read_barrier_depends() read_barrier_depends() 149 - #define smp_mb__before_clear_bit() smp_mb() 150 - #define smp_mb__after_clear_bit() smp_mb() 151 - 152 - 153 - #define set_mb(var, value) do { var = value; mb(); } while (0) 154 - 155 - #ifdef __s390x__ 156 - 157 - #define __ctl_load(array, low, high) ({ \ 158 - typedef struct { char _[sizeof(array)]; } addrtype; \ 159 - asm volatile( \ 160 - " lctlg %1,%2,%0\n" \ 161 - : : "Q" (*(addrtype *)(&array)), \ 162 - "i" (low), "i" (high)); \ 163 - }) 164 - 165 - #define __ctl_store(array, low, high) ({ \ 166 - typedef struct { char _[sizeof(array)]; } addrtype; \ 167 - asm volatile( \ 168 - " stctg %1,%2,%0\n" \ 169 - : "=Q" (*(addrtype *)(&array)) \ 170 - : "i" (low), "i" (high)); \ 171 - }) 172 - 173 - #else /* __s390x__ */ 174 - 175 - #define __ctl_load(array, low, high) ({ \ 176 - typedef struct { char _[sizeof(array)]; } addrtype; \ 177 - asm volatile( \ 178 - " lctl %1,%2,%0\n" \ 179 - : : "Q" (*(addrtype *)(&array)), \ 180 - "i" (low), "i" (high)); \ 181 - }) 182 - 183 - #define __ctl_store(array, low, high) ({ \ 184 - typedef struct { char _[sizeof(array)]; } addrtype; \ 185 - asm volatile( \ 186 - " stctl %1,%2,%0\n" \ 187 - : "=Q" (*(addrtype *)(&array)) \ 188 - : "i" (low), "i" (high)); \ 189 - }) 190 - 191 - #endif /* __s390x__ */ 192 - 193 - #define __ctl_set_bit(cr, bit) ({ \ 194 - unsigned long __dummy; \ 195 - __ctl_store(__dummy, cr, cr); \ 196 - __dummy |= 1UL << (bit); \ 197 - __ctl_load(__dummy, cr, cr); \ 198 - }) 199 - 200 - #define __ctl_clear_bit(cr, bit) ({ \ 201 - unsigned long __dummy; \ 202 - __ctl_store(__dummy, cr, cr); \ 203 - __dummy &= ~(1UL << (bit)); \ 204 - __ctl_load(__dummy, cr, cr); \ 205 - }) 206 - 207 - /* 208 - * Use to set psw mask except for the first byte which 209 - * won't be changed by this function. 210 - */ 211 - static inline void 212 - __set_psw_mask(unsigned long mask) 213 - { 214 - __load_psw_mask(mask | (arch_local_save_flags() & ~(-1UL >> 8))); 215 - } 216 - 217 - #define local_mcck_enable() \ 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) 221 - 222 - #ifdef CONFIG_SMP 223 - 224 - extern void smp_ctl_set_bit(int cr, int bit); 225 - extern void smp_ctl_clear_bit(int cr, int bit); 226 - #define ctl_set_bit(cr, bit) smp_ctl_set_bit(cr, bit) 227 - #define ctl_clear_bit(cr, bit) smp_ctl_clear_bit(cr, bit) 228 - 229 - #else 230 - 231 - #define ctl_set_bit(cr, bit) __ctl_set_bit(cr, bit) 232 - #define ctl_clear_bit(cr, bit) __ctl_clear_bit(cr, bit) 233 - 234 - #endif /* CONFIG_SMP */ 235 - 236 - #define MAX_FACILITY_BIT (256*8) /* stfle_fac_list has 256 bytes */ 237 - 238 - /* 239 - * The test_facility function uses the bit odering where the MSB is bit 0. 240 - * That makes it easier to query facility bits with the bit number as 241 - * documented in the Principles of Operation. 242 - */ 243 - static inline int test_facility(unsigned long nr) 244 - { 245 - unsigned char *ptr; 246 - 247 - if (nr >= MAX_FACILITY_BIT) 248 - return 0; 249 - ptr = (unsigned char *) &S390_lowcore.stfle_fac_list + (nr >> 3); 250 - return (*ptr & (0x80 >> (nr & 7))) != 0; 251 - } 252 - 253 - /** 254 - * stfle - Store facility list extended 255 - * @stfle_fac_list: array where facility list can be stored 256 - * @size: size of passed in array in double words 257 - */ 258 - static inline void stfle(u64 *stfle_fac_list, int size) 259 - { 260 - unsigned long nr; 261 - 262 - preempt_disable(); 263 - S390_lowcore.stfl_fac_list = 0; 264 - asm volatile( 265 - " .insn s,0xb2b10000,0(0)\n" /* stfl */ 266 - "0:\n" 267 - EX_TABLE(0b, 0b) 268 - : "=m" (S390_lowcore.stfl_fac_list)); 269 - nr = 4; /* bytes stored by stfl */ 270 - memcpy(stfle_fac_list, &S390_lowcore.stfl_fac_list, 4); 271 - if (S390_lowcore.stfl_fac_list & 0x01000000) { 272 - /* More facility bits available with stfle */ 273 - register unsigned long reg0 asm("0") = size - 1; 274 - 275 - asm volatile(".insn s,0xb2b00000,0(%1)" /* stfle */ 276 - : "+d" (reg0) 277 - : "a" (stfle_fac_list) 278 - : "memory", "cc"); 279 - nr = (reg0 + 1) * 8; /* # bytes stored by stfle */ 280 - } 281 - memset((char *) stfle_fac_list + nr, 0, size * 8 - nr); 282 - preempt_enable(); 283 - } 284 - 285 - static inline unsigned short stap(void) 286 - { 287 - unsigned short cpu_address; 288 - 289 - asm volatile("stap %0" : "=m" (cpu_address)); 290 - return cpu_address; 291 - } 292 - 293 - extern void (*_machine_restart)(char *command); 294 - extern void (*_machine_halt)(void); 295 - extern void (*_machine_power_off)(void); 296 - 297 - extern unsigned long arch_align_stack(unsigned long sp); 298 - 299 - static inline int tprot(unsigned long addr) 300 - { 301 - int rc = -EFAULT; 302 - 303 - asm volatile( 304 - " tprot 0(%1),0\n" 305 - "0: ipm %0\n" 306 - " srl %0,28\n" 307 - "1:\n" 308 - EX_TABLE(0b,1b) 309 - : "+d" (rc) : "a" (addr) : "cc"); 310 - return rc; 311 - } 312 - 313 - #endif /* __KERNEL__ */ 314 - 315 - #endif 4 + #include <asm/ctl_reg.h> 5 + #include <asm/exec.h> 6 + #include <asm/facility.h> 7 + #include <asm/switch_to.h>
+6
arch/s390/include/asm/uaccess.h
··· 16 16 */ 17 17 #include <linux/sched.h> 18 18 #include <linux/errno.h> 19 + #include <asm/ctl_reg.h> 19 20 20 21 #define VERIFY_READ 0 21 22 #define VERIFY_WRITE 1 ··· 375 374 n = uaccess.clear_user(n, to); 376 375 return n; 377 376 } 377 + 378 + extern int memcpy_real(void *, void *, size_t); 379 + extern void copy_to_absolute_zero(void *dest, void *src, size_t count); 380 + extern int copy_to_user_real(void __user *dest, void *src, size_t count); 381 + extern int copy_from_user_real(void *dest, void __user *src, size_t count); 378 382 379 383 #endif /* __S390_UACCESS_H */
-1
arch/s390/kernel/asm-offsets.c
··· 12 12 #include <asm/timer.h> 13 13 #include <asm/vdso.h> 14 14 #include <asm/pgtable.h> 15 - #include <asm/system.h> 16 15 17 16 /* 18 17 * Make sure that the compiler is new enough. We want a compiler that
+1
arch/s390/kernel/compat_signal.c
··· 27 27 #include <asm/ucontext.h> 28 28 #include <asm/uaccess.h> 29 29 #include <asm/lowcore.h> 30 + #include <asm/switch_to.h> 30 31 #include "compat_linux.h" 31 32 #include "compat_ptrace.h" 32 33 #include "entry.h"
-1
arch/s390/kernel/cpcmd.c
··· 18 18 #include <linux/string.h> 19 19 #include <asm/ebcdic.h> 20 20 #include <asm/cpcmd.h> 21 - #include <asm/system.h> 22 21 #include <asm/io.h> 23 22 24 23 static DEFINE_SPINLOCK(cpcmd_lock);
-1
arch/s390/kernel/dis.c
··· 24 24 #include <linux/kprobes.h> 25 25 #include <linux/kdebug.h> 26 26 27 - #include <asm/system.h> 28 27 #include <asm/uaccess.h> 29 28 #include <asm/io.h> 30 29 #include <linux/atomic.h>
+1 -1
arch/s390/kernel/early.c
··· 29 29 #include <asm/sysinfo.h> 30 30 #include <asm/cpcmd.h> 31 31 #include <asm/sclp.h> 32 - #include <asm/system.h> 32 + #include <asm/facility.h> 33 33 #include "entry.h" 34 34 35 35 /*
-1
arch/s390/kernel/lgr.c
··· 10 10 #include <linux/slab.h> 11 11 #include <asm/sysinfo.h> 12 12 #include <asm/ebcdic.h> 13 - #include <asm/system.h> 14 13 #include <asm/debug.h> 15 14 #include <asm/ipl.h> 16 15
-1
arch/s390/kernel/machine_kexec.c
··· 19 19 #include <asm/setup.h> 20 20 #include <asm/pgtable.h> 21 21 #include <asm/pgalloc.h> 22 - #include <asm/system.h> 23 22 #include <asm/smp.h> 24 23 #include <asm/reset.h> 25 24 #include <asm/ipl.h>
-1
arch/s390/kernel/os_info.c
··· 12 12 #include <linux/kernel.h> 13 13 #include <asm/checksum.h> 14 14 #include <asm/lowcore.h> 15 - #include <asm/system.h> 16 15 #include <asm/os_info.h> 17 16 18 17 /*
+1 -1
arch/s390/kernel/process.c
··· 23 23 #include <linux/kprobes.h> 24 24 #include <linux/random.h> 25 25 #include <linux/module.h> 26 - #include <asm/system.h> 27 26 #include <asm/io.h> 28 27 #include <asm/processor.h> 29 28 #include <asm/irq.h> 30 29 #include <asm/timer.h> 31 30 #include <asm/nmi.h> 32 31 #include <asm/smp.h> 32 + #include <asm/switch_to.h> 33 33 #include "entry.h" 34 34 35 35 asmlinkage void ret_from_fork(void) asm ("ret_from_fork");
+1 -1
arch/s390/kernel/ptrace.c
··· 26 26 #include <asm/page.h> 27 27 #include <asm/pgtable.h> 28 28 #include <asm/pgalloc.h> 29 - #include <asm/system.h> 30 29 #include <asm/uaccess.h> 31 30 #include <asm/unistd.h> 31 + #include <asm/switch_to.h> 32 32 #include "entry.h" 33 33 34 34 #ifdef CONFIG_COMPAT
-1
arch/s390/kernel/setup.c
··· 50 50 51 51 #include <asm/ipl.h> 52 52 #include <asm/uaccess.h> 53 - #include <asm/system.h> 54 53 #include <asm/smp.h> 55 54 #include <asm/mmu_context.h> 56 55 #include <asm/cpcmd.h>
+1
arch/s390/kernel/signal.c
··· 30 30 #include <asm/ucontext.h> 31 31 #include <asm/uaccess.h> 32 32 #include <asm/lowcore.h> 33 + #include <asm/switch_to.h> 33 34 #include "entry.h" 34 35 35 36 #define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP)))
+1 -1
arch/s390/kernel/suspend.c
··· 9 9 #include <linux/pfn.h> 10 10 #include <linux/suspend.h> 11 11 #include <linux/mm.h> 12 - #include <asm/system.h> 12 + #include <asm/ctl_reg.h> 13 13 14 14 /* 15 15 * References to section boundaries
-1
arch/s390/kernel/traps.c
··· 33 33 #include <linux/kprobes.h> 34 34 #include <linux/bug.h> 35 35 #include <linux/utsname.h> 36 - #include <asm/system.h> 37 36 #include <asm/uaccess.h> 38 37 #include <asm/io.h> 39 38 #include <linux/atomic.h>
+1 -1
arch/s390/kernel/vdso.c
··· 25 25 #include <linux/compat.h> 26 26 #include <asm/asm-offsets.h> 27 27 #include <asm/pgtable.h> 28 - #include <asm/system.h> 29 28 #include <asm/processor.h> 30 29 #include <asm/mmu.h> 31 30 #include <asm/mmu_context.h> 32 31 #include <asm/sections.h> 33 32 #include <asm/vdso.h> 33 + #include <asm/facility.h> 34 34 35 35 #if defined(CONFIG_32BIT) || defined(CONFIG_COMPAT) 36 36 extern char vdso32_start, vdso32_end;
+1 -1
arch/s390/kvm/kvm-s390.c
··· 27 27 #include <asm/lowcore.h> 28 28 #include <asm/pgtable.h> 29 29 #include <asm/nmi.h> 30 - #include <asm/system.h> 30 + #include <asm/switch_to.h> 31 31 #include "kvm-s390.h" 32 32 #include "gaccess.h" 33 33
+1 -1
arch/s390/mm/fault.c
··· 32 32 #include <linux/uaccess.h> 33 33 #include <linux/hugetlb.h> 34 34 #include <asm/asm-offsets.h> 35 - #include <asm/system.h> 36 35 #include <asm/pgtable.h> 37 36 #include <asm/irq.h> 38 37 #include <asm/mmu_context.h> 38 + #include <asm/facility.h> 39 39 #include "../kernel/entry.h" 40 40 41 41 #ifndef CONFIG_64BIT
+1 -1
arch/s390/mm/init.c
··· 29 29 #include <linux/export.h> 30 30 #include <linux/gfp.h> 31 31 #include <asm/processor.h> 32 - #include <asm/system.h> 33 32 #include <asm/uaccess.h> 34 33 #include <asm/pgtable.h> 35 34 #include <asm/pgalloc.h> ··· 37 38 #include <asm/tlb.h> 38 39 #include <asm/tlbflush.h> 39 40 #include <asm/sections.h> 41 + #include <asm/ctl_reg.h> 40 42 41 43 pgd_t swapper_pg_dir[PTRS_PER_PGD] __attribute__((__aligned__(PAGE_SIZE))); 42 44
+1 -1
arch/s390/mm/maccess.c
··· 12 12 #include <linux/types.h> 13 13 #include <linux/errno.h> 14 14 #include <linux/gfp.h> 15 - #include <asm/system.h> 15 + #include <asm/ctl_reg.h> 16 16 17 17 /* 18 18 * This function writes to kernel memory bypassing DAT and possible
-1
arch/s390/mm/pgtable.c
··· 18 18 #include <linux/rcupdate.h> 19 19 #include <linux/slab.h> 20 20 21 - #include <asm/system.h> 22 21 #include <asm/pgtable.h> 23 22 #include <asm/pgalloc.h> 24 23 #include <asm/tlb.h>
+1
arch/s390/oprofile/hwsampler.c
··· 18 18 #include <linux/oom.h> 19 19 #include <linux/oprofile.h> 20 20 21 + #include <asm/facility.h> 21 22 #include <asm/lowcore.h> 22 23 #include <asm/irq.h> 23 24
+1
drivers/s390/char/sclp_cmd.c
··· 21 21 #include <asm/chpid.h> 22 22 #include <asm/sclp.h> 23 23 #include <asm/setup.h> 24 + #include <asm/ctl_reg.h> 24 25 25 26 #include "sclp.h" 26 27
+1
drivers/s390/cio/crw.c
··· 13 13 #include <linux/init.h> 14 14 #include <linux/wait.h> 15 15 #include <asm/crw.h> 16 + #include <asm/ctl_reg.h> 16 17 17 18 static DEFINE_MUTEX(crw_handler_mutex); 18 19 static crw_handler_t crw_handlers[NR_RSCS];
+1
drivers/s390/crypto/ap_bus.c
··· 46 46 #include <asm/isc.h> 47 47 #include <linux/hrtimer.h> 48 48 #include <linux/ktime.h> 49 + #include <asm/facility.h> 49 50 50 51 #include "ap_bus.h" 51 52