aboutsummaryrefslogtreecommitdiffstats
path: root/arch/s390
diff options
context:
space:
mode:
Diffstat (limited to 'arch/s390')
-rw-r--r--arch/s390/Kconfig7
-rw-r--r--arch/s390/defconfig3
-rw-r--r--arch/s390/hypfs/inode.c4
-rw-r--r--arch/s390/kernel/compat_linux.c45
-rw-r--r--arch/s390/kernel/compat_wrapper.S6
-rw-r--r--arch/s390/kernel/debug.c2
-rw-r--r--arch/s390/kernel/setup.c2
-rw-r--r--arch/s390/kernel/smp.c15
-rw-r--r--arch/s390/kernel/syscalls.S2
-rw-r--r--arch/s390/kernel/vmlinux.lds.S3
-rw-r--r--arch/s390/mm/Makefile2
-rw-r--r--arch/s390/mm/fault.c4
-rw-r--r--arch/s390/mm/ioremap.c58
13 files changed, 31 insertions, 122 deletions
diff --git a/arch/s390/Kconfig b/arch/s390/Kconfig
index eaed402ad346..eaaac3788110 100644
--- a/arch/s390/Kconfig
+++ b/arch/s390/Kconfig
@@ -7,6 +7,10 @@ config MMU
7 bool 7 bool
8 default y 8 default y
9 9
10config ZONE_DMA
11 bool
12 default y
13
10config LOCKDEP_SUPPORT 14config LOCKDEP_SUPPORT
11 bool 15 bool
12 default y 16 default y
@@ -37,6 +41,9 @@ config GENERIC_HWEIGHT
37config GENERIC_TIME 41config GENERIC_TIME
38 def_bool y 42 def_bool y
39 43
44config NO_IOMEM
45 def_bool y
46
40mainmenu "Linux Kernel Configuration" 47mainmenu "Linux Kernel Configuration"
41 48
42config S390 49config S390
diff --git a/arch/s390/defconfig b/arch/s390/defconfig
index 7c621b8ef683..1406400bf3ea 100644
--- a/arch/s390/defconfig
+++ b/arch/s390/defconfig
@@ -179,6 +179,8 @@ CONFIG_XFRM=y
179# CONFIG_XFRM_USER is not set 179# CONFIG_XFRM_USER is not set
180# CONFIG_XFRM_SUB_POLICY is not set 180# CONFIG_XFRM_SUB_POLICY is not set
181CONFIG_NET_KEY=y 181CONFIG_NET_KEY=y
182CONFIG_IUCV=m
183CONFIG_AFIUCV=m
182CONFIG_INET=y 184CONFIG_INET=y
183CONFIG_IP_MULTICAST=y 185CONFIG_IP_MULTICAST=y
184# CONFIG_IP_ADVANCED_ROUTER is not set 186# CONFIG_IP_ADVANCED_ROUTER is not set
@@ -508,7 +510,6 @@ CONFIG_NET_ETHERNET=y
508# 510#
509CONFIG_LCS=m 511CONFIG_LCS=m
510CONFIG_CTC=m 512CONFIG_CTC=m
511CONFIG_IUCV=m
512# CONFIG_NETIUCV is not set 513# CONFIG_NETIUCV is not set
513# CONFIG_SMSGIUCV is not set 514# CONFIG_SMSGIUCV is not set
514# CONFIG_CLAW is not set 515# CONFIG_CLAW is not set
diff --git a/arch/s390/hypfs/inode.c b/arch/s390/hypfs/inode.c
index a4fda7b53640..ba5d3167df0d 100644
--- a/arch/s390/hypfs/inode.c
+++ b/arch/s390/hypfs/inode.c
@@ -34,7 +34,7 @@ struct hypfs_sb_info {
34 struct mutex lock; /* lock to protect update process */ 34 struct mutex lock; /* lock to protect update process */
35}; 35};
36 36
37static struct file_operations hypfs_file_ops; 37static const struct file_operations hypfs_file_ops;
38static struct file_system_type hypfs_type; 38static struct file_system_type hypfs_type;
39static struct super_operations hypfs_s_ops; 39static struct super_operations hypfs_s_ops;
40 40
@@ -440,7 +440,7 @@ struct dentry *hypfs_create_str(struct super_block *sb, struct dentry *dir,
440 return dentry; 440 return dentry;
441} 441}
442 442
443static struct file_operations hypfs_file_ops = { 443static const struct file_operations hypfs_file_ops = {
444 .open = hypfs_open, 444 .open = hypfs_open,
445 .release = hypfs_release, 445 .release = hypfs_release,
446 .read = do_sync_read, 446 .read = do_sync_read,
diff --git a/arch/s390/kernel/compat_linux.c b/arch/s390/kernel/compat_linux.c
index 666bb6daa148..664c669b1856 100644
--- a/arch/s390/kernel/compat_linux.c
+++ b/arch/s390/kernel/compat_linux.c
@@ -398,51 +398,6 @@ int cp_compat_stat(struct kstat *stat, struct compat_stat __user *statbuf)
398 return err; 398 return err;
399} 399}
400 400
401struct sysinfo32 {
402 s32 uptime;
403 u32 loads[3];
404 u32 totalram;
405 u32 freeram;
406 u32 sharedram;
407 u32 bufferram;
408 u32 totalswap;
409 u32 freeswap;
410 unsigned short procs;
411 unsigned short pads;
412 u32 totalhigh;
413 u32 freehigh;
414 unsigned int mem_unit;
415 char _f[8];
416};
417
418asmlinkage long sys32_sysinfo(struct sysinfo32 __user *info)
419{
420 struct sysinfo s;
421 int ret, err;
422 mm_segment_t old_fs = get_fs ();
423
424 set_fs (KERNEL_DS);
425 ret = sys_sysinfo((struct sysinfo __force __user *) &s);
426 set_fs (old_fs);
427 err = put_user (s.uptime, &info->uptime);
428 err |= __put_user (s.loads[0], &info->loads[0]);
429 err |= __put_user (s.loads[1], &info->loads[1]);
430 err |= __put_user (s.loads[2], &info->loads[2]);
431 err |= __put_user (s.totalram, &info->totalram);
432 err |= __put_user (s.freeram, &info->freeram);
433 err |= __put_user (s.sharedram, &info->sharedram);
434 err |= __put_user (s.bufferram, &info->bufferram);
435 err |= __put_user (s.totalswap, &info->totalswap);
436 err |= __put_user (s.freeswap, &info->freeswap);
437 err |= __put_user (s.procs, &info->procs);
438 err |= __put_user (s.totalhigh, &info->totalhigh);
439 err |= __put_user (s.freehigh, &info->freehigh);
440 err |= __put_user (s.mem_unit, &info->mem_unit);
441 if (err)
442 return -EFAULT;
443 return ret;
444}
445
446asmlinkage long sys32_sched_rr_get_interval(compat_pid_t pid, 401asmlinkage long sys32_sched_rr_get_interval(compat_pid_t pid,
447 struct compat_timespec __user *interval) 402 struct compat_timespec __user *interval)
448{ 403{
diff --git a/arch/s390/kernel/compat_wrapper.S b/arch/s390/kernel/compat_wrapper.S
index 71e54ef0931e..97901296894e 100644
--- a/arch/s390/kernel/compat_wrapper.S
+++ b/arch/s390/kernel/compat_wrapper.S
@@ -517,10 +517,10 @@ sys32_swapoff_wrapper:
517 llgtr %r2,%r2 # const char * 517 llgtr %r2,%r2 # const char *
518 jg sys_swapoff # branch to system call 518 jg sys_swapoff # branch to system call
519 519
520 .globl sys32_sysinfo_wrapper 520 .globl compat_sys_sysinfo_wrapper
521sys32_sysinfo_wrapper: 521compat_sys_sysinfo_wrapper:
522 llgtr %r2,%r2 # struct sysinfo_emu31 * 522 llgtr %r2,%r2 # struct sysinfo_emu31 *
523 jg sys32_sysinfo # branch to system call 523 jg compat_sys_sysinfo # branch to system call
524 524
525 .globl sys32_ipc_wrapper 525 .globl sys32_ipc_wrapper
526sys32_ipc_wrapper: 526sys32_ipc_wrapper:
diff --git a/arch/s390/kernel/debug.c b/arch/s390/kernel/debug.c
index f4b62df02aa2..51653d82d7df 100644
--- a/arch/s390/kernel/debug.c
+++ b/arch/s390/kernel/debug.c
@@ -167,7 +167,7 @@ static DECLARE_MUTEX(debug_lock);
167 167
168static int initialized; 168static int initialized;
169 169
170static struct file_operations debug_file_ops = { 170static const struct file_operations debug_file_ops = {
171 .owner = THIS_MODULE, 171 .owner = THIS_MODULE,
172 .read = debug_output, 172 .read = debug_output,
173 .write = debug_input, 173 .write = debug_input,
diff --git a/arch/s390/kernel/setup.c b/arch/s390/kernel/setup.c
index 03739813d3bf..50c5210fbc64 100644
--- a/arch/s390/kernel/setup.c
+++ b/arch/s390/kernel/setup.c
@@ -740,7 +740,7 @@ setup_arch(char **cmdline_p)
740#endif /* CONFIG_64BIT */ 740#endif /* CONFIG_64BIT */
741 741
742 /* Save unparsed command line copy for /proc/cmdline */ 742 /* Save unparsed command line copy for /proc/cmdline */
743 strlcpy(saved_command_line, COMMAND_LINE, COMMAND_LINE_SIZE); 743 strlcpy(boot_command_line, COMMAND_LINE, COMMAND_LINE_SIZE);
744 744
745 *cmdline_p = COMMAND_LINE; 745 *cmdline_p = COMMAND_LINE;
746 *(*cmdline_p + COMMAND_LINE_SIZE - 1) = '\0'; 746 *(*cmdline_p + COMMAND_LINE_SIZE - 1) = '\0';
diff --git a/arch/s390/kernel/smp.c b/arch/s390/kernel/smp.c
index 65b52320d145..83a4ea6e3d60 100644
--- a/arch/s390/kernel/smp.c
+++ b/arch/s390/kernel/smp.c
@@ -57,7 +57,7 @@ static void smp_ext_bitcall(int, ec_bit_sig);
57static void smp_ext_bitcall_others(ec_bit_sig); 57static void smp_ext_bitcall_others(ec_bit_sig);
58 58
59/* 59/*
605B * Structure and data for smp_call_function(). This is designed to minimise 60 * Structure and data for smp_call_function(). This is designed to minimise
61 * static memory requirements. It also looks cleaner. 61 * static memory requirements. It also looks cleaner.
62 */ 62 */
63static DEFINE_SPINLOCK(call_lock); 63static DEFINE_SPINLOCK(call_lock);
@@ -104,7 +104,7 @@ int smp_call_function (void (*func) (void *info), void *info, int nonatomic,
104 * remote CPUs are nearly ready to execute <<func>> or are or have executed. 104 * remote CPUs are nearly ready to execute <<func>> or are or have executed.
105 * 105 *
106 * You must not call this function with disabled interrupts or from a 106 * You must not call this function with disabled interrupts or from a
107 * hardware interrupt handler or from a bottom half handler. 107 * hardware interrupt handler.
108 */ 108 */
109{ 109{
110 struct call_data_struct data; 110 struct call_data_struct data;
@@ -113,8 +113,8 @@ int smp_call_function (void (*func) (void *info), void *info, int nonatomic,
113 if (cpus <= 0) 113 if (cpus <= 0)
114 return 0; 114 return 0;
115 115
116 /* Can deadlock when called with interrupts disabled */ 116 /* Can deadlock when interrupts are disabled or if in wrong context */
117 WARN_ON(irqs_disabled()); 117 WARN_ON(irqs_disabled() || in_irq());
118 118
119 data.func = func; 119 data.func = func;
120 data.info = info; 120 data.info = info;
@@ -123,7 +123,7 @@ int smp_call_function (void (*func) (void *info), void *info, int nonatomic,
123 if (wait) 123 if (wait)
124 atomic_set(&data.finished, 0); 124 atomic_set(&data.finished, 0);
125 125
126 spin_lock(&call_lock); 126 spin_lock_bh(&call_lock);
127 call_data = &data; 127 call_data = &data;
128 /* Send a message to all other CPUs and wait for them to respond */ 128 /* Send a message to all other CPUs and wait for them to respond */
129 smp_ext_bitcall_others(ec_call_function); 129 smp_ext_bitcall_others(ec_call_function);
@@ -135,7 +135,7 @@ int smp_call_function (void (*func) (void *info), void *info, int nonatomic,
135 if (wait) 135 if (wait)
136 while (atomic_read(&data.finished) != cpus) 136 while (atomic_read(&data.finished) != cpus)
137 cpu_relax(); 137 cpu_relax();
138 spin_unlock(&call_lock); 138 spin_unlock_bh(&call_lock);
139 139
140 return 0; 140 return 0;
141} 141}
@@ -159,6 +159,9 @@ int smp_call_function_on(void (*func) (void *info), void *info,
159 if (!cpu_online(cpu)) 159 if (!cpu_online(cpu))
160 return -EINVAL; 160 return -EINVAL;
161 161
162 /* Can deadlock when interrupts are disabled or if in wrong context */
163 WARN_ON(irqs_disabled() || in_irq());
164
162 /* disable preemption for local function call */ 165 /* disable preemption for local function call */
163 curr_cpu = get_cpu(); 166 curr_cpu = get_cpu();
164 167
diff --git a/arch/s390/kernel/syscalls.S b/arch/s390/kernel/syscalls.S
index a4ceae3dbcf1..a52c44455bf0 100644
--- a/arch/s390/kernel/syscalls.S
+++ b/arch/s390/kernel/syscalls.S
@@ -124,7 +124,7 @@ NI_SYSCALL /* old "idle" system call */
124NI_SYSCALL /* vm86old for i386 */ 124NI_SYSCALL /* vm86old for i386 */
125SYSCALL(sys_wait4,sys_wait4,compat_sys_wait4_wrapper) 125SYSCALL(sys_wait4,sys_wait4,compat_sys_wait4_wrapper)
126SYSCALL(sys_swapoff,sys_swapoff,sys32_swapoff_wrapper) /* 115 */ 126SYSCALL(sys_swapoff,sys_swapoff,sys32_swapoff_wrapper) /* 115 */
127SYSCALL(sys_sysinfo,sys_sysinfo,sys32_sysinfo_wrapper) 127SYSCALL(sys_sysinfo,sys_sysinfo,compat_sys_sysinfo_wrapper)
128SYSCALL(sys_ipc,sys_ipc,sys32_ipc_wrapper) 128SYSCALL(sys_ipc,sys_ipc,sys32_ipc_wrapper)
129SYSCALL(sys_fsync,sys_fsync,sys32_fsync_wrapper) 129SYSCALL(sys_fsync,sys_fsync,sys32_fsync_wrapper)
130SYSCALL(sys_sigreturn_glue,sys_sigreturn_glue,sys32_sigreturn_glue) 130SYSCALL(sys_sigreturn_glue,sys_sigreturn_glue,sys32_sigreturn_glue)
diff --git a/arch/s390/kernel/vmlinux.lds.S b/arch/s390/kernel/vmlinux.lds.S
index a48907392522..c30716ae130c 100644
--- a/arch/s390/kernel/vmlinux.lds.S
+++ b/arch/s390/kernel/vmlinux.lds.S
@@ -91,11 +91,14 @@ SECTIONS
91 .con_initcall.init : { *(.con_initcall.init) } 91 .con_initcall.init : { *(.con_initcall.init) }
92 __con_initcall_end = .; 92 __con_initcall_end = .;
93 SECURITY_INIT 93 SECURITY_INIT
94
95#ifdef CONFIG_BLK_DEV_INITRD
94 . = ALIGN(256); 96 . = ALIGN(256);
95 __initramfs_start = .; 97 __initramfs_start = .;
96 .init.ramfs : { *(.init.initramfs) } 98 .init.ramfs : { *(.init.initramfs) }
97 . = ALIGN(2); 99 . = ALIGN(2);
98 __initramfs_end = .; 100 __initramfs_end = .;
101#endif
99 . = ALIGN(256); 102 . = ALIGN(256);
100 __per_cpu_start = .; 103 __per_cpu_start = .;
101 .data.percpu : { *(.data.percpu) } 104 .data.percpu : { *(.data.percpu) }
diff --git a/arch/s390/mm/Makefile b/arch/s390/mm/Makefile
index 8e09db1edbb9..f95449b29fa5 100644
--- a/arch/s390/mm/Makefile
+++ b/arch/s390/mm/Makefile
@@ -2,6 +2,6 @@
2# Makefile for the linux s390-specific parts of the memory manager. 2# Makefile for the linux s390-specific parts of the memory manager.
3# 3#
4 4
5obj-y := init.o fault.o ioremap.o extmem.o mmap.o vmem.o 5obj-y := init.o fault.o extmem.o mmap.o vmem.o
6obj-$(CONFIG_CMM) += cmm.o 6obj-$(CONFIG_CMM) += cmm.o
7 7
diff --git a/arch/s390/mm/fault.c b/arch/s390/mm/fault.c
index 9ff143e87746..641aef36ccc4 100644
--- a/arch/s390/mm/fault.c
+++ b/arch/s390/mm/fault.c
@@ -83,12 +83,10 @@ static inline int notify_page_fault(enum die_val val, const char *str,
83} 83}
84#endif 84#endif
85 85
86extern spinlock_t timerlist_lock;
87 86
88/* 87/*
89 * Unlock any spinlocks which will prevent us from getting the 88 * Unlock any spinlocks which will prevent us from getting the
90 * message out (timerlist_lock is acquired through the 89 * message out.
91 * console unblank code)
92 */ 90 */
93void bust_spinlocks(int yes) 91void bust_spinlocks(int yes)
94{ 92{
diff --git a/arch/s390/mm/ioremap.c b/arch/s390/mm/ioremap.c
deleted file mode 100644
index 3d2100a4e209..000000000000
--- a/arch/s390/mm/ioremap.c
+++ /dev/null
@@ -1,58 +0,0 @@
1/*
2 * arch/s390/mm/ioremap.c
3 *
4 * S390 version
5 * Copyright (C) 1999 IBM Deutschland Entwicklung GmbH, IBM Corporation
6 * Author(s): Hartmut Penner (hp@de.ibm.com)
7 *
8 * Derived from "arch/i386/mm/extable.c"
9 * (C) Copyright 1995 1996 Linus Torvalds
10 *
11 * Re-map IO memory to kernel address space so that we can access it.
12 * This is needed for high PCI addresses that aren't mapped in the
13 * 640k-1MB IO memory area on PC's
14 */
15
16#include <linux/vmalloc.h>
17#include <linux/mm.h>
18#include <linux/io.h>
19#include <asm/pgalloc.h>
20
21/*
22 * Generic mapping function (not visible outside):
23 */
24
25/*
26 * Remap an arbitrary physical address space into the kernel virtual
27 * address space. Needed when the kernel wants to access high addresses
28 * directly.
29 */
30void * __ioremap(unsigned long phys_addr, unsigned long size, unsigned long flags)
31{
32 void * addr;
33 struct vm_struct * area;
34
35 if (phys_addr < virt_to_phys(high_memory))
36 return phys_to_virt(phys_addr);
37 if (phys_addr & ~PAGE_MASK)
38 return NULL;
39 size = PAGE_ALIGN(size);
40 if (!size || size > phys_addr + size)
41 return NULL;
42 area = get_vm_area(size, VM_IOREMAP);
43 if (!area)
44 return NULL;
45 addr = area->addr;
46 if (ioremap_page_range((unsigned long)addr, (unsigned long)addr + size,
47 phys_addr, __pgprot(flags))) {
48 vfree(addr);
49 return NULL;
50 }
51 return addr;
52}
53
54void iounmap(void *addr)
55{
56 if (addr > high_memory)
57 vfree(addr);
58}