diff options
Diffstat (limited to 'arch/s390')
-rw-r--r-- | arch/s390/Kconfig | 7 | ||||
-rw-r--r-- | arch/s390/defconfig | 3 | ||||
-rw-r--r-- | arch/s390/hypfs/inode.c | 4 | ||||
-rw-r--r-- | arch/s390/kernel/compat_linux.c | 45 | ||||
-rw-r--r-- | arch/s390/kernel/compat_wrapper.S | 6 | ||||
-rw-r--r-- | arch/s390/kernel/debug.c | 2 | ||||
-rw-r--r-- | arch/s390/kernel/setup.c | 2 | ||||
-rw-r--r-- | arch/s390/kernel/smp.c | 15 | ||||
-rw-r--r-- | arch/s390/kernel/syscalls.S | 2 | ||||
-rw-r--r-- | arch/s390/kernel/vmlinux.lds.S | 3 | ||||
-rw-r--r-- | arch/s390/mm/Makefile | 2 | ||||
-rw-r--r-- | arch/s390/mm/fault.c | 4 | ||||
-rw-r--r-- | arch/s390/mm/ioremap.c | 58 |
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 | ||
10 | config ZONE_DMA | ||
11 | bool | ||
12 | default y | ||
13 | |||
10 | config LOCKDEP_SUPPORT | 14 | config LOCKDEP_SUPPORT |
11 | bool | 15 | bool |
12 | default y | 16 | default y |
@@ -37,6 +41,9 @@ config GENERIC_HWEIGHT | |||
37 | config GENERIC_TIME | 41 | config GENERIC_TIME |
38 | def_bool y | 42 | def_bool y |
39 | 43 | ||
44 | config NO_IOMEM | ||
45 | def_bool y | ||
46 | |||
40 | mainmenu "Linux Kernel Configuration" | 47 | mainmenu "Linux Kernel Configuration" |
41 | 48 | ||
42 | config S390 | 49 | config 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 |
181 | CONFIG_NET_KEY=y | 181 | CONFIG_NET_KEY=y |
182 | CONFIG_IUCV=m | ||
183 | CONFIG_AFIUCV=m | ||
182 | CONFIG_INET=y | 184 | CONFIG_INET=y |
183 | CONFIG_IP_MULTICAST=y | 185 | CONFIG_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 | # |
509 | CONFIG_LCS=m | 511 | CONFIG_LCS=m |
510 | CONFIG_CTC=m | 512 | CONFIG_CTC=m |
511 | CONFIG_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 | ||
37 | static struct file_operations hypfs_file_ops; | 37 | static const struct file_operations hypfs_file_ops; |
38 | static struct file_system_type hypfs_type; | 38 | static struct file_system_type hypfs_type; |
39 | static struct super_operations hypfs_s_ops; | 39 | static 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 | ||
443 | static struct file_operations hypfs_file_ops = { | 443 | static 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 | ||
401 | struct 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 | |||
418 | asmlinkage 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 | |||
446 | asmlinkage long sys32_sched_rr_get_interval(compat_pid_t pid, | 401 | asmlinkage 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 |
521 | sys32_sysinfo_wrapper: | 521 | compat_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 |
526 | sys32_ipc_wrapper: | 526 | sys32_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 | ||
168 | static int initialized; | 168 | static int initialized; |
169 | 169 | ||
170 | static struct file_operations debug_file_ops = { | 170 | static 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); | |||
57 | static void smp_ext_bitcall_others(ec_bit_sig); | 57 | static void smp_ext_bitcall_others(ec_bit_sig); |
58 | 58 | ||
59 | /* | 59 | /* |
60 | 5B * 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 | */ |
63 | static DEFINE_SPINLOCK(call_lock); | 63 | static 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 */ | |||
124 | NI_SYSCALL /* vm86old for i386 */ | 124 | NI_SYSCALL /* vm86old for i386 */ |
125 | SYSCALL(sys_wait4,sys_wait4,compat_sys_wait4_wrapper) | 125 | SYSCALL(sys_wait4,sys_wait4,compat_sys_wait4_wrapper) |
126 | SYSCALL(sys_swapoff,sys_swapoff,sys32_swapoff_wrapper) /* 115 */ | 126 | SYSCALL(sys_swapoff,sys_swapoff,sys32_swapoff_wrapper) /* 115 */ |
127 | SYSCALL(sys_sysinfo,sys_sysinfo,sys32_sysinfo_wrapper) | 127 | SYSCALL(sys_sysinfo,sys_sysinfo,compat_sys_sysinfo_wrapper) |
128 | SYSCALL(sys_ipc,sys_ipc,sys32_ipc_wrapper) | 128 | SYSCALL(sys_ipc,sys_ipc,sys32_ipc_wrapper) |
129 | SYSCALL(sys_fsync,sys_fsync,sys32_fsync_wrapper) | 129 | SYSCALL(sys_fsync,sys_fsync,sys32_fsync_wrapper) |
130 | SYSCALL(sys_sigreturn_glue,sys_sigreturn_glue,sys32_sigreturn_glue) | 130 | SYSCALL(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 | ||
5 | obj-y := init.o fault.o ioremap.o extmem.o mmap.o vmem.o | 5 | obj-y := init.o fault.o extmem.o mmap.o vmem.o |
6 | obj-$(CONFIG_CMM) += cmm.o | 6 | obj-$(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 | ||
86 | extern 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 | */ |
93 | void bust_spinlocks(int yes) | 91 | void 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 | */ | ||
30 | void * __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 | |||
54 | void iounmap(void *addr) | ||
55 | { | ||
56 | if (addr > high_memory) | ||
57 | vfree(addr); | ||
58 | } | ||