aboutsummaryrefslogtreecommitdiffstats
path: root/arch/s390
diff options
context:
space:
mode:
Diffstat (limited to 'arch/s390')
-rw-r--r--arch/s390/appldata/appldata.h2
-rw-r--r--arch/s390/appldata/appldata_base.c132
-rw-r--r--arch/s390/appldata/appldata_mem.c4
-rw-r--r--arch/s390/appldata/appldata_net_sum.c4
-rw-r--r--arch/s390/appldata/appldata_os.c4
-rw-r--r--arch/s390/crypto/aes_s390.c2
-rw-r--r--arch/s390/crypto/crypt_s390.h2
-rw-r--r--arch/s390/crypto/des_s390.c2
-rw-r--r--arch/s390/crypto/prng.c2
-rw-r--r--arch/s390/crypto/sha1_s390.c2
-rw-r--r--arch/s390/crypto/sha256_s390.c2
-rw-r--r--arch/s390/hypfs/hypfs.h3
-rw-r--r--arch/s390/hypfs/hypfs_dbfs.c2
-rw-r--r--arch/s390/hypfs/hypfs_diag.c1
-rw-r--r--arch/s390/hypfs/hypfs_vm.c2
-rw-r--r--arch/s390/hypfs/inode.c2
-rw-r--r--arch/s390/include/asm/airq.h4
-rw-r--r--arch/s390/include/asm/appldata.h4
-rw-r--r--arch/s390/include/asm/atomic.h8
-rw-r--r--arch/s390/include/asm/bitops.h10
-rw-r--r--arch/s390/include/asm/bugs.h4
-rw-r--r--arch/s390/include/asm/cache.h4
-rw-r--r--arch/s390/include/asm/ccwdev.h2
-rw-r--r--arch/s390/include/asm/ccwgroup.h2
-rw-r--r--arch/s390/include/asm/checksum.h10
-rw-r--r--arch/s390/include/asm/chpid.h2
-rw-r--r--arch/s390/include/asm/chsc.h2
-rw-r--r--arch/s390/include/asm/cio.h3
-rw-r--r--arch/s390/include/asm/cpcmd.h4
-rw-r--r--arch/s390/include/asm/cpu.h2
-rw-r--r--arch/s390/include/asm/cputime.h12
-rw-r--r--arch/s390/include/asm/crw.h2
-rw-r--r--arch/s390/include/asm/current.h4
-rw-r--r--arch/s390/include/asm/dasd.h3
-rw-r--r--arch/s390/include/asm/debug.h4
-rw-r--r--arch/s390/include/asm/delay.h4
-rw-r--r--arch/s390/include/asm/dma.h2
-rw-r--r--arch/s390/include/asm/ebcdic.h3
-rw-r--r--arch/s390/include/asm/elf.h2
-rw-r--r--arch/s390/include/asm/errno.h2
-rw-r--r--arch/s390/include/asm/etr.h2
-rw-r--r--arch/s390/include/asm/extmem.h4
-rw-r--r--arch/s390/include/asm/hardirq.h4
-rw-r--r--arch/s390/include/asm/idals.h5
-rw-r--r--arch/s390/include/asm/io.h4
-rw-r--r--arch/s390/include/asm/irqflags.h2
-rw-r--r--arch/s390/include/asm/kexec.h4
-rw-r--r--arch/s390/include/asm/kprobes.h2
-rw-r--r--arch/s390/include/asm/kvm.h2
-rw-r--r--arch/s390/include/asm/kvm_host.h4
-rw-r--r--arch/s390/include/asm/kvm_para.h2
-rw-r--r--arch/s390/include/asm/kvm_virtio.h2
-rw-r--r--arch/s390/include/asm/lowcore.h9
-rw-r--r--arch/s390/include/asm/mathemu.h3
-rw-r--r--arch/s390/include/asm/mman.h2
-rw-r--r--arch/s390/include/asm/mmu_context.h2
-rw-r--r--arch/s390/include/asm/monwriter.h4
-rw-r--r--arch/s390/include/asm/nmi.h2
-rw-r--r--arch/s390/include/asm/page.h4
-rw-r--r--arch/s390/include/asm/pgalloc.h4
-rw-r--r--arch/s390/include/asm/pgtable.h4
-rw-r--r--arch/s390/include/asm/posix_types.h2
-rw-r--r--arch/s390/include/asm/processor.h14
-rw-r--r--arch/s390/include/asm/ptrace.h4
-rw-r--r--arch/s390/include/asm/qdio.h4
-rw-r--r--arch/s390/include/asm/qeth.h4
-rw-r--r--arch/s390/include/asm/reset.h2
-rw-r--r--arch/s390/include/asm/resource.h2
-rw-r--r--arch/s390/include/asm/rwsem.h4
-rw-r--r--arch/s390/include/asm/sclp.h4
-rw-r--r--arch/s390/include/asm/scsw.h2
-rw-r--r--arch/s390/include/asm/setup.h4
-rw-r--r--arch/s390/include/asm/shmparam.h2
-rw-r--r--arch/s390/include/asm/sigcontext.h4
-rw-r--r--arch/s390/include/asm/siginfo.h2
-rw-r--r--arch/s390/include/asm/signal.h2
-rw-r--r--arch/s390/include/asm/sigp.h32
-rw-r--r--arch/s390/include/asm/smp.h2
-rw-r--r--arch/s390/include/asm/socket.h2
-rw-r--r--arch/s390/include/asm/spinlock.h4
-rw-r--r--arch/s390/include/asm/stat.h2
-rw-r--r--arch/s390/include/asm/statfs.h2
-rw-r--r--arch/s390/include/asm/string.h4
-rw-r--r--arch/s390/include/asm/swab.h4
-rw-r--r--arch/s390/include/asm/sysinfo.h2
-rw-r--r--arch/s390/include/asm/tape390.h3
-rw-r--r--arch/s390/include/asm/termios.h2
-rw-r--r--arch/s390/include/asm/thread_info.h4
-rw-r--r--arch/s390/include/asm/timer.h51
-rw-r--r--arch/s390/include/asm/timex.h4
-rw-r--r--arch/s390/include/asm/types.h2
-rw-r--r--arch/s390/include/asm/uaccess.h6
-rw-r--r--arch/s390/include/asm/ucontext.h2
-rw-r--r--arch/s390/include/asm/unistd.h2
-rw-r--r--arch/s390/include/asm/user.h2
-rw-r--r--arch/s390/include/asm/vtimer.h33
-rw-r--r--arch/s390/include/asm/vtoc.h4
-rw-r--r--arch/s390/include/asm/zcrypt.h2
-rw-r--r--arch/s390/kernel/asm-offsets.c12
-rw-r--r--arch/s390/kernel/base.S5
-rw-r--r--arch/s390/kernel/bitmap.c2
-rw-r--r--arch/s390/kernel/compat_exec_domain.c2
-rw-r--r--arch/s390/kernel/compat_linux.c4
-rw-r--r--arch/s390/kernel/compat_signal.c4
-rw-r--r--arch/s390/kernel/compat_wrapper.S3
-rw-r--r--arch/s390/kernel/cpcmd.c4
-rw-r--r--arch/s390/kernel/crash.c4
-rw-r--r--arch/s390/kernel/debug.c1
-rw-r--r--arch/s390/kernel/dis.c3
-rw-r--r--arch/s390/kernel/early.c2
-rw-r--r--arch/s390/kernel/ebcdic.c3
-rw-r--r--arch/s390/kernel/entry.S49
-rw-r--r--arch/s390/kernel/entry.h4
-rw-r--r--arch/s390/kernel/entry64.S52
-rw-r--r--arch/s390/kernel/head.S2
-rw-r--r--arch/s390/kernel/head31.S4
-rw-r--r--arch/s390/kernel/head64.S4
-rw-r--r--arch/s390/kernel/head_kdump.S6
-rw-r--r--arch/s390/kernel/ipl.c16
-rw-r--r--arch/s390/kernel/irq.c2
-rw-r--r--arch/s390/kernel/kprobes.c2
-rw-r--r--arch/s390/kernel/lgr.c15
-rw-r--r--arch/s390/kernel/machine_kexec.c4
-rw-r--r--arch/s390/kernel/mcount.S2
-rw-r--r--arch/s390/kernel/mcount64.S2
-rw-r--r--arch/s390/kernel/module.c5
-rw-r--r--arch/s390/kernel/nmi.c2
-rw-r--r--arch/s390/kernel/os_info.c2
-rw-r--r--arch/s390/kernel/process.c4
-rw-r--r--arch/s390/kernel/processor.c6
-rw-r--r--arch/s390/kernel/ptrace.c2
-rw-r--r--arch/s390/kernel/reipl.S7
-rw-r--r--arch/s390/kernel/reipl64.S5
-rw-r--r--arch/s390/kernel/relocate_kernel.S7
-rw-r--r--arch/s390/kernel/relocate_kernel64.S9
-rw-r--r--arch/s390/kernel/sclp.S2
-rw-r--r--arch/s390/kernel/setup.c29
-rw-r--r--arch/s390/kernel/signal.c4
-rw-r--r--arch/s390/kernel/smp.c116
-rw-r--r--arch/s390/kernel/stacktrace.c4
-rw-r--r--arch/s390/kernel/swsusp_asm64.S13
-rw-r--r--arch/s390/kernel/sys_s390.c4
-rw-r--r--arch/s390/kernel/time.c3
-rw-r--r--arch/s390/kernel/topology.c2
-rw-r--r--arch/s390/kernel/traps.c4
-rw-r--r--arch/s390/kernel/vtime.c370
-rw-r--r--arch/s390/kvm/diag.c4
-rw-r--r--arch/s390/kvm/gaccess.h4
-rw-r--r--arch/s390/kvm/intercept.c4
-rw-r--r--arch/s390/kvm/interrupt.c2
-rw-r--r--arch/s390/kvm/kvm-s390.c5
-rw-r--r--arch/s390/kvm/kvm-s390.h4
-rw-r--r--arch/s390/kvm/priv.c2
-rw-r--r--arch/s390/kvm/sigp.c121
-rw-r--r--arch/s390/lib/delay.c4
-rw-r--r--arch/s390/lib/div64.c4
-rw-r--r--arch/s390/lib/spinlock.c3
-rw-r--r--arch/s390/lib/string.c3
-rw-r--r--arch/s390/lib/uaccess.h2
-rw-r--r--arch/s390/lib/uaccess_mvcos.c4
-rw-r--r--arch/s390/lib/uaccess_pt.c2
-rw-r--r--arch/s390/lib/uaccess_std.c4
-rw-r--r--arch/s390/math-emu/math.c4
-rw-r--r--arch/s390/mm/cmm.c2
-rw-r--r--arch/s390/mm/extmem.c3
-rw-r--r--arch/s390/mm/fault.c4
-rw-r--r--arch/s390/mm/hugetlbpage.c2
-rw-r--r--arch/s390/mm/init.c4
-rw-r--r--arch/s390/mm/mmap.c2
-rw-r--r--arch/s390/mm/pgtable.c2
-rw-r--r--arch/s390/mm/vmem.c2
-rw-r--r--arch/s390/oprofile/backtrace.c6
-rw-r--r--arch/s390/oprofile/hwsampler.c4
-rw-r--r--arch/s390/oprofile/init.c6
-rw-r--r--arch/s390/oprofile/op_counter.h6
175 files changed, 571 insertions, 1026 deletions
diff --git a/arch/s390/appldata/appldata.h b/arch/s390/appldata/appldata.h
index f0b23fc759ba..4a67f2b5f6aa 100644
--- a/arch/s390/appldata/appldata.h
+++ b/arch/s390/appldata/appldata.h
@@ -1,6 +1,4 @@
1/* 1/*
2 * arch/s390/appldata/appldata.h
3 *
4 * Definitions and interface for Linux - z/VM Monitor Stream. 2 * Definitions and interface for Linux - z/VM Monitor Stream.
5 * 3 *
6 * Copyright IBM Corp. 2003, 2008 4 * Copyright IBM Corp. 2003, 2008
diff --git a/arch/s390/appldata/appldata_base.c b/arch/s390/appldata/appldata_base.c
index 24bff4f1cc52..bae0f402bf2a 100644
--- a/arch/s390/appldata/appldata_base.c
+++ b/arch/s390/appldata/appldata_base.c
@@ -1,6 +1,4 @@
1/* 1/*
2 * arch/s390/appldata/appldata_base.c
3 *
4 * Base infrastructure for Linux-z/VM Monitor Stream, Stage 1. 2 * Base infrastructure for Linux-z/VM Monitor Stream, Stage 1.
5 * Exports appldata_register_ops() and appldata_unregister_ops() for the 3 * Exports appldata_register_ops() and appldata_unregister_ops() for the
6 * data gathering modules. 4 * data gathering modules.
@@ -29,7 +27,7 @@
29#include <linux/suspend.h> 27#include <linux/suspend.h>
30#include <linux/platform_device.h> 28#include <linux/platform_device.h>
31#include <asm/appldata.h> 29#include <asm/appldata.h>
32#include <asm/timer.h> 30#include <asm/vtimer.h>
33#include <asm/uaccess.h> 31#include <asm/uaccess.h>
34#include <asm/io.h> 32#include <asm/io.h>
35#include <asm/smp.h> 33#include <asm/smp.h>
@@ -84,8 +82,7 @@ static struct ctl_table appldata_dir_table[] = {
84/* 82/*
85 * Timer 83 * Timer
86 */ 84 */
87static DEFINE_PER_CPU(struct vtimer_list, appldata_timer); 85static struct vtimer_list appldata_timer;
88static atomic_t appldata_expire_count = ATOMIC_INIT(0);
89 86
90static DEFINE_SPINLOCK(appldata_timer_lock); 87static DEFINE_SPINLOCK(appldata_timer_lock);
91static int appldata_interval = APPLDATA_CPU_INTERVAL; 88static int appldata_interval = APPLDATA_CPU_INTERVAL;
@@ -115,10 +112,7 @@ static LIST_HEAD(appldata_ops_list);
115 */ 112 */
116static void appldata_timer_function(unsigned long data) 113static void appldata_timer_function(unsigned long data)
117{ 114{
118 if (atomic_dec_and_test(&appldata_expire_count)) { 115 queue_work(appldata_wq, (struct work_struct *) data);
119 atomic_set(&appldata_expire_count, num_online_cpus());
120 queue_work(appldata_wq, (struct work_struct *) data);
121 }
122} 116}
123 117
124/* 118/*
@@ -131,7 +125,6 @@ static void appldata_work_fn(struct work_struct *work)
131 struct list_head *lh; 125 struct list_head *lh;
132 struct appldata_ops *ops; 126 struct appldata_ops *ops;
133 127
134 get_online_cpus();
135 mutex_lock(&appldata_ops_mutex); 128 mutex_lock(&appldata_ops_mutex);
136 list_for_each(lh, &appldata_ops_list) { 129 list_for_each(lh, &appldata_ops_list) {
137 ops = list_entry(lh, struct appldata_ops, list); 130 ops = list_entry(lh, struct appldata_ops, list);
@@ -140,7 +133,6 @@ static void appldata_work_fn(struct work_struct *work)
140 } 133 }
141 } 134 }
142 mutex_unlock(&appldata_ops_mutex); 135 mutex_unlock(&appldata_ops_mutex);
143 put_online_cpus();
144} 136}
145 137
146/* 138/*
@@ -168,20 +160,6 @@ int appldata_diag(char record_nr, u16 function, unsigned long buffer,
168 160
169/****************************** /proc stuff **********************************/ 161/****************************** /proc stuff **********************************/
170 162
171/*
172 * appldata_mod_vtimer_wrap()
173 *
174 * wrapper function for mod_virt_timer(), because smp_call_function_single()
175 * accepts only one parameter.
176 */
177static void __appldata_mod_vtimer_wrap(void *p) {
178 struct {
179 struct vtimer_list *timer;
180 u64 expires;
181 } *args = p;
182 mod_virt_timer_periodic(args->timer, args->expires);
183}
184
185#define APPLDATA_ADD_TIMER 0 163#define APPLDATA_ADD_TIMER 0
186#define APPLDATA_DEL_TIMER 1 164#define APPLDATA_DEL_TIMER 1
187#define APPLDATA_MOD_TIMER 2 165#define APPLDATA_MOD_TIMER 2
@@ -192,49 +170,28 @@ static void __appldata_mod_vtimer_wrap(void *p) {
192 * Add, delete or modify virtual timers on all online cpus. 170 * Add, delete or modify virtual timers on all online cpus.
193 * The caller needs to get the appldata_timer_lock spinlock. 171 * The caller needs to get the appldata_timer_lock spinlock.
194 */ 172 */
195static void 173static void __appldata_vtimer_setup(int cmd)
196__appldata_vtimer_setup(int cmd)
197{ 174{
198 u64 per_cpu_interval; 175 u64 timer_interval = (u64) appldata_interval * 1000 * TOD_MICRO;
199 int i;
200 176
201 switch (cmd) { 177 switch (cmd) {
202 case APPLDATA_ADD_TIMER: 178 case APPLDATA_ADD_TIMER:
203 if (appldata_timer_active) 179 if (appldata_timer_active)
204 break; 180 break;
205 per_cpu_interval = (u64) (appldata_interval*1000 / 181 appldata_timer.expires = timer_interval;
206 num_online_cpus()) * TOD_MICRO; 182 add_virt_timer_periodic(&appldata_timer);
207 for_each_online_cpu(i) {
208 per_cpu(appldata_timer, i).expires = per_cpu_interval;
209 smp_call_function_single(i, add_virt_timer_periodic,
210 &per_cpu(appldata_timer, i),
211 1);
212 }
213 appldata_timer_active = 1; 183 appldata_timer_active = 1;
214 break; 184 break;
215 case APPLDATA_DEL_TIMER: 185 case APPLDATA_DEL_TIMER:
216 for_each_online_cpu(i) 186 del_virt_timer(&appldata_timer);
217 del_virt_timer(&per_cpu(appldata_timer, i));
218 if (!appldata_timer_active) 187 if (!appldata_timer_active)
219 break; 188 break;
220 appldata_timer_active = 0; 189 appldata_timer_active = 0;
221 atomic_set(&appldata_expire_count, num_online_cpus());
222 break; 190 break;
223 case APPLDATA_MOD_TIMER: 191 case APPLDATA_MOD_TIMER:
224 per_cpu_interval = (u64) (appldata_interval*1000 /
225 num_online_cpus()) * TOD_MICRO;
226 if (!appldata_timer_active) 192 if (!appldata_timer_active)
227 break; 193 break;
228 for_each_online_cpu(i) { 194 mod_virt_timer_periodic(&appldata_timer, timer_interval);
229 struct {
230 struct vtimer_list *timer;
231 u64 expires;
232 } args;
233 args.timer = &per_cpu(appldata_timer, i);
234 args.expires = per_cpu_interval;
235 smp_call_function_single(i, __appldata_mod_vtimer_wrap,
236 &args, 1);
237 }
238 } 195 }
239} 196}
240 197
@@ -265,14 +222,12 @@ appldata_timer_handler(ctl_table *ctl, int write,
265 len = *lenp; 222 len = *lenp;
266 if (copy_from_user(buf, buffer, len > sizeof(buf) ? sizeof(buf) : len)) 223 if (copy_from_user(buf, buffer, len > sizeof(buf) ? sizeof(buf) : len))
267 return -EFAULT; 224 return -EFAULT;
268 get_online_cpus();
269 spin_lock(&appldata_timer_lock); 225 spin_lock(&appldata_timer_lock);
270 if (buf[0] == '1') 226 if (buf[0] == '1')
271 __appldata_vtimer_setup(APPLDATA_ADD_TIMER); 227 __appldata_vtimer_setup(APPLDATA_ADD_TIMER);
272 else if (buf[0] == '0') 228 else if (buf[0] == '0')
273 __appldata_vtimer_setup(APPLDATA_DEL_TIMER); 229 __appldata_vtimer_setup(APPLDATA_DEL_TIMER);
274 spin_unlock(&appldata_timer_lock); 230 spin_unlock(&appldata_timer_lock);
275 put_online_cpus();
276out: 231out:
277 *lenp = len; 232 *lenp = len;
278 *ppos += len; 233 *ppos += len;
@@ -305,20 +260,17 @@ appldata_interval_handler(ctl_table *ctl, int write,
305 goto out; 260 goto out;
306 } 261 }
307 len = *lenp; 262 len = *lenp;
308 if (copy_from_user(buf, buffer, len > sizeof(buf) ? sizeof(buf) : len)) { 263 if (copy_from_user(buf, buffer, len > sizeof(buf) ? sizeof(buf) : len))
309 return -EFAULT; 264 return -EFAULT;
310 }
311 interval = 0; 265 interval = 0;
312 sscanf(buf, "%i", &interval); 266 sscanf(buf, "%i", &interval);
313 if (interval <= 0) 267 if (interval <= 0)
314 return -EINVAL; 268 return -EINVAL;
315 269
316 get_online_cpus();
317 spin_lock(&appldata_timer_lock); 270 spin_lock(&appldata_timer_lock);
318 appldata_interval = interval; 271 appldata_interval = interval;
319 __appldata_vtimer_setup(APPLDATA_MOD_TIMER); 272 __appldata_vtimer_setup(APPLDATA_MOD_TIMER);
320 spin_unlock(&appldata_timer_lock); 273 spin_unlock(&appldata_timer_lock);
321 put_online_cpus();
322out: 274out:
323 *lenp = len; 275 *lenp = len;
324 *ppos += len; 276 *ppos += len;
@@ -485,14 +437,12 @@ static int appldata_freeze(struct device *dev)
485 int rc; 437 int rc;
486 struct list_head *lh; 438 struct list_head *lh;
487 439
488 get_online_cpus();
489 spin_lock(&appldata_timer_lock); 440 spin_lock(&appldata_timer_lock);
490 if (appldata_timer_active) { 441 if (appldata_timer_active) {
491 __appldata_vtimer_setup(APPLDATA_DEL_TIMER); 442 __appldata_vtimer_setup(APPLDATA_DEL_TIMER);
492 appldata_timer_suspended = 1; 443 appldata_timer_suspended = 1;
493 } 444 }
494 spin_unlock(&appldata_timer_lock); 445 spin_unlock(&appldata_timer_lock);
495 put_online_cpus();
496 446
497 mutex_lock(&appldata_ops_mutex); 447 mutex_lock(&appldata_ops_mutex);
498 list_for_each(lh, &appldata_ops_list) { 448 list_for_each(lh, &appldata_ops_list) {
@@ -516,14 +466,12 @@ static int appldata_restore(struct device *dev)
516 int rc; 466 int rc;
517 struct list_head *lh; 467 struct list_head *lh;
518 468
519 get_online_cpus();
520 spin_lock(&appldata_timer_lock); 469 spin_lock(&appldata_timer_lock);
521 if (appldata_timer_suspended) { 470 if (appldata_timer_suspended) {
522 __appldata_vtimer_setup(APPLDATA_ADD_TIMER); 471 __appldata_vtimer_setup(APPLDATA_ADD_TIMER);
523 appldata_timer_suspended = 0; 472 appldata_timer_suspended = 0;
524 } 473 }
525 spin_unlock(&appldata_timer_lock); 474 spin_unlock(&appldata_timer_lock);
526 put_online_cpus();
527 475
528 mutex_lock(&appldata_ops_mutex); 476 mutex_lock(&appldata_ops_mutex);
529 list_for_each(lh, &appldata_ops_list) { 477 list_for_each(lh, &appldata_ops_list) {
@@ -567,53 +515,6 @@ static struct platform_driver appldata_pdrv = {
567 515
568/******************************* init / exit *********************************/ 516/******************************* init / exit *********************************/
569 517
570static void __cpuinit appldata_online_cpu(int cpu)
571{
572 init_virt_timer(&per_cpu(appldata_timer, cpu));
573 per_cpu(appldata_timer, cpu).function = appldata_timer_function;
574 per_cpu(appldata_timer, cpu).data = (unsigned long)
575 &appldata_work;
576 atomic_inc(&appldata_expire_count);
577 spin_lock(&appldata_timer_lock);
578 __appldata_vtimer_setup(APPLDATA_MOD_TIMER);
579 spin_unlock(&appldata_timer_lock);
580}
581
582static void __cpuinit appldata_offline_cpu(int cpu)
583{
584 del_virt_timer(&per_cpu(appldata_timer, cpu));
585 if (atomic_dec_and_test(&appldata_expire_count)) {
586 atomic_set(&appldata_expire_count, num_online_cpus());
587 queue_work(appldata_wq, &appldata_work);
588 }
589 spin_lock(&appldata_timer_lock);
590 __appldata_vtimer_setup(APPLDATA_MOD_TIMER);
591 spin_unlock(&appldata_timer_lock);
592}
593
594static int __cpuinit appldata_cpu_notify(struct notifier_block *self,
595 unsigned long action,
596 void *hcpu)
597{
598 switch (action) {
599 case CPU_ONLINE:
600 case CPU_ONLINE_FROZEN:
601 appldata_online_cpu((long) hcpu);
602 break;
603 case CPU_DEAD:
604 case CPU_DEAD_FROZEN:
605 appldata_offline_cpu((long) hcpu);
606 break;
607 default:
608 break;
609 }
610 return NOTIFY_OK;
611}
612
613static struct notifier_block __cpuinitdata appldata_nb = {
614 .notifier_call = appldata_cpu_notify,
615};
616
617/* 518/*
618 * appldata_init() 519 * appldata_init()
619 * 520 *
@@ -621,7 +522,10 @@ static struct notifier_block __cpuinitdata appldata_nb = {
621 */ 522 */
622static int __init appldata_init(void) 523static int __init appldata_init(void)
623{ 524{
624 int i, rc; 525 int rc;
526
527 appldata_timer.function = appldata_timer_function;
528 appldata_timer.data = (unsigned long) &appldata_work;
625 529
626 rc = platform_driver_register(&appldata_pdrv); 530 rc = platform_driver_register(&appldata_pdrv);
627 if (rc) 531 if (rc)
@@ -639,14 +543,6 @@ static int __init appldata_init(void)
639 goto out_device; 543 goto out_device;
640 } 544 }
641 545
642 get_online_cpus();
643 for_each_online_cpu(i)
644 appldata_online_cpu(i);
645 put_online_cpus();
646
647 /* Register cpu hotplug notifier */
648 register_hotcpu_notifier(&appldata_nb);
649
650 appldata_sysctl_header = register_sysctl_table(appldata_dir_table); 546 appldata_sysctl_header = register_sysctl_table(appldata_dir_table);
651 return 0; 547 return 0;
652 548
diff --git a/arch/s390/appldata/appldata_mem.c b/arch/s390/appldata/appldata_mem.c
index f7d3dc555bdb..02d9a1cf5057 100644
--- a/arch/s390/appldata/appldata_mem.c
+++ b/arch/s390/appldata/appldata_mem.c
@@ -1,10 +1,8 @@
1/* 1/*
2 * arch/s390/appldata/appldata_mem.c
3 *
4 * Data gathering module for Linux-VM Monitor Stream, Stage 1. 2 * Data gathering module for Linux-VM Monitor Stream, Stage 1.
5 * Collects data related to memory management. 3 * Collects data related to memory management.
6 * 4 *
7 * Copyright (C) 2003,2006 IBM Corporation, IBM Deutschland Entwicklung GmbH. 5 * Copyright IBM Corp. 2003, 2006
8 * 6 *
9 * Author: Gerald Schaefer <gerald.schaefer@de.ibm.com> 7 * Author: Gerald Schaefer <gerald.schaefer@de.ibm.com>
10 */ 8 */
diff --git a/arch/s390/appldata/appldata_net_sum.c b/arch/s390/appldata/appldata_net_sum.c
index 5da7c562a90b..1370e358d49a 100644
--- a/arch/s390/appldata/appldata_net_sum.c
+++ b/arch/s390/appldata/appldata_net_sum.c
@@ -1,11 +1,9 @@
1/* 1/*
2 * arch/s390/appldata/appldata_net_sum.c
3 *
4 * Data gathering module for Linux-VM Monitor Stream, Stage 1. 2 * Data gathering module for Linux-VM Monitor Stream, Stage 1.
5 * Collects accumulated network statistics (Packets received/transmitted, 3 * Collects accumulated network statistics (Packets received/transmitted,
6 * dropped, errors, ...). 4 * dropped, errors, ...).
7 * 5 *
8 * Copyright (C) 2003,2006 IBM Corporation, IBM Deutschland Entwicklung GmbH. 6 * Copyright IBM Corp. 2003, 2006
9 * 7 *
10 * Author: Gerald Schaefer <gerald.schaefer@de.ibm.com> 8 * Author: Gerald Schaefer <gerald.schaefer@de.ibm.com>
11 */ 9 */
diff --git a/arch/s390/appldata/appldata_os.c b/arch/s390/appldata/appldata_os.c
index 4de031d6b76c..87521ba682e5 100644
--- a/arch/s390/appldata/appldata_os.c
+++ b/arch/s390/appldata/appldata_os.c
@@ -1,10 +1,8 @@
1/* 1/*
2 * arch/s390/appldata/appldata_os.c
3 *
4 * Data gathering module for Linux-VM Monitor Stream, Stage 1. 2 * Data gathering module for Linux-VM Monitor Stream, Stage 1.
5 * Collects misc. OS related data (CPU utilization, running processes). 3 * Collects misc. OS related data (CPU utilization, running processes).
6 * 4 *
7 * Copyright (C) 2003,2006 IBM Corporation, IBM Deutschland Entwicklung GmbH. 5 * Copyright IBM Corp. 2003, 2006
8 * 6 *
9 * Author: Gerald Schaefer <gerald.schaefer@de.ibm.com> 7 * Author: Gerald Schaefer <gerald.schaefer@de.ibm.com>
10 */ 8 */
diff --git a/arch/s390/crypto/aes_s390.c b/arch/s390/crypto/aes_s390.c
index a9ce135893f8..e402a9dd4eda 100644
--- a/arch/s390/crypto/aes_s390.c
+++ b/arch/s390/crypto/aes_s390.c
@@ -4,7 +4,7 @@
4 * s390 implementation of the AES Cipher Algorithm. 4 * s390 implementation of the AES Cipher Algorithm.
5 * 5 *
6 * s390 Version: 6 * s390 Version:
7 * Copyright IBM Corp. 2005,2007 7 * Copyright IBM Corp. 2005, 2007
8 * Author(s): Jan Glauber (jang@de.ibm.com) 8 * Author(s): Jan Glauber (jang@de.ibm.com)
9 * Sebastian Siewior (sebastian@breakpoint.cc> SW-Fallback 9 * Sebastian Siewior (sebastian@breakpoint.cc> SW-Fallback
10 * 10 *
diff --git a/arch/s390/crypto/crypt_s390.h b/arch/s390/crypto/crypt_s390.h
index 9178db6db0a5..6c5cc6da7111 100644
--- a/arch/s390/crypto/crypt_s390.h
+++ b/arch/s390/crypto/crypt_s390.h
@@ -3,7 +3,7 @@
3 * 3 *
4 * Support for s390 cryptographic instructions. 4 * Support for s390 cryptographic instructions.
5 * 5 *
6 * Copyright IBM Corp. 2003,2007 6 * Copyright IBM Corp. 2003, 2007
7 * Author(s): Thomas Spatzier 7 * Author(s): Thomas Spatzier
8 * Jan Glauber (jan.glauber@de.ibm.com) 8 * Jan Glauber (jan.glauber@de.ibm.com)
9 * 9 *
diff --git a/arch/s390/crypto/des_s390.c b/arch/s390/crypto/des_s390.c
index a52bfd124d86..1eaa371ca3ee 100644
--- a/arch/s390/crypto/des_s390.c
+++ b/arch/s390/crypto/des_s390.c
@@ -3,7 +3,7 @@
3 * 3 *
4 * s390 implementation of the DES Cipher Algorithm. 4 * s390 implementation of the DES Cipher Algorithm.
5 * 5 *
6 * Copyright IBM Corp. 2003,2011 6 * Copyright IBM Corp. 2003, 2011
7 * Author(s): Thomas Spatzier 7 * Author(s): Thomas Spatzier
8 * Jan Glauber (jan.glauber@de.ibm.com) 8 * Jan Glauber (jan.glauber@de.ibm.com)
9 * 9 *
diff --git a/arch/s390/crypto/prng.c b/arch/s390/crypto/prng.c
index 0808fbf0f7d3..94a35a4c1b48 100644
--- a/arch/s390/crypto/prng.c
+++ b/arch/s390/crypto/prng.c
@@ -1,5 +1,5 @@
1/* 1/*
2 * Copyright IBM Corp. 2006,2007 2 * Copyright IBM Corp. 2006, 2007
3 * Author(s): Jan Glauber <jan.glauber@de.ibm.com> 3 * Author(s): Jan Glauber <jan.glauber@de.ibm.com>
4 * Driver for the s390 pseudo random number generator 4 * Driver for the s390 pseudo random number generator
5 */ 5 */
diff --git a/arch/s390/crypto/sha1_s390.c b/arch/s390/crypto/sha1_s390.c
index e9868c6e0a08..a1b3a9dc9d8a 100644
--- a/arch/s390/crypto/sha1_s390.c
+++ b/arch/s390/crypto/sha1_s390.c
@@ -8,7 +8,7 @@
8 * implementation written by Steve Reid. 8 * implementation written by Steve Reid.
9 * 9 *
10 * s390 Version: 10 * s390 Version:
11 * Copyright IBM Corp. 2003,2007 11 * Copyright IBM Corp. 2003, 2007
12 * Author(s): Thomas Spatzier 12 * Author(s): Thomas Spatzier
13 * Jan Glauber (jan.glauber@de.ibm.com) 13 * Jan Glauber (jan.glauber@de.ibm.com)
14 * 14 *
diff --git a/arch/s390/crypto/sha256_s390.c b/arch/s390/crypto/sha256_s390.c
index 0317a3547cb9..9b853809a492 100644
--- a/arch/s390/crypto/sha256_s390.c
+++ b/arch/s390/crypto/sha256_s390.c
@@ -4,7 +4,7 @@
4 * s390 implementation of the SHA256 and SHA224 Secure Hash Algorithm. 4 * s390 implementation of the SHA256 and SHA224 Secure Hash Algorithm.
5 * 5 *
6 * s390 Version: 6 * s390 Version:
7 * Copyright IBM Corp. 2005,2011 7 * Copyright IBM Corp. 2005, 2011
8 * Author(s): Jan Glauber (jang@de.ibm.com) 8 * Author(s): Jan Glauber (jang@de.ibm.com)
9 * 9 *
10 * This program is free software; you can redistribute it and/or modify it 10 * This program is free software; you can redistribute it and/or modify it
diff --git a/arch/s390/hypfs/hypfs.h b/arch/s390/hypfs/hypfs.h
index d9df5a060a83..f41e0ef7fdf9 100644
--- a/arch/s390/hypfs/hypfs.h
+++ b/arch/s390/hypfs/hypfs.h
@@ -1,8 +1,7 @@
1/* 1/*
2 * arch/s390/hypfs/hypfs.h
3 * Hypervisor filesystem for Linux on s390. 2 * Hypervisor filesystem for Linux on s390.
4 * 3 *
5 * Copyright (C) IBM Corp. 2006 4 * Copyright IBM Corp. 2006
6 * Author(s): Michael Holzheu <holzheu@de.ibm.com> 5 * Author(s): Michael Holzheu <holzheu@de.ibm.com>
7 */ 6 */
8 7
diff --git a/arch/s390/hypfs/hypfs_dbfs.c b/arch/s390/hypfs/hypfs_dbfs.c
index b478013b7fec..13e76dabbe8b 100644
--- a/arch/s390/hypfs/hypfs_dbfs.c
+++ b/arch/s390/hypfs/hypfs_dbfs.c
@@ -1,7 +1,7 @@
1/* 1/*
2 * Hypervisor filesystem for Linux on s390 - debugfs interface 2 * Hypervisor filesystem for Linux on s390 - debugfs interface
3 * 3 *
4 * Copyright (C) IBM Corp. 2010 4 * Copyright IBM Corp. 2010
5 * Author(s): Michael Holzheu <holzheu@linux.vnet.ibm.com> 5 * Author(s): Michael Holzheu <holzheu@linux.vnet.ibm.com>
6 */ 6 */
7 7
diff --git a/arch/s390/hypfs/hypfs_diag.c b/arch/s390/hypfs/hypfs_diag.c
index 74c8f5e76ce4..7fd3690b6760 100644
--- a/arch/s390/hypfs/hypfs_diag.c
+++ b/arch/s390/hypfs/hypfs_diag.c
@@ -1,5 +1,4 @@
1/* 1/*
2 * arch/s390/hypfs/hypfs_diag.c
3 * Hypervisor filesystem for Linux on s390. Diag 204 and 224 2 * Hypervisor filesystem for Linux on s390. Diag 204 and 224
4 * implementation. 3 * implementation.
5 * 4 *
diff --git a/arch/s390/hypfs/hypfs_vm.c b/arch/s390/hypfs/hypfs_vm.c
index e54796002f61..4f6afaa8bd8f 100644
--- a/arch/s390/hypfs/hypfs_vm.c
+++ b/arch/s390/hypfs/hypfs_vm.c
@@ -1,7 +1,7 @@
1/* 1/*
2 * Hypervisor filesystem for Linux on s390. z/VM implementation. 2 * Hypervisor filesystem for Linux on s390. z/VM implementation.
3 * 3 *
4 * Copyright (C) IBM Corp. 2006 4 * Copyright IBM Corp. 2006
5 * Author(s): Michael Holzheu <holzheu@de.ibm.com> 5 * Author(s): Michael Holzheu <holzheu@de.ibm.com>
6 */ 6 */
7 7
diff --git a/arch/s390/hypfs/inode.c b/arch/s390/hypfs/inode.c
index 73dae8b9b77a..6767b437a103 100644
--- a/arch/s390/hypfs/inode.c
+++ b/arch/s390/hypfs/inode.c
@@ -1,5 +1,4 @@
1/* 1/*
2 * arch/s390/hypfs/inode.c
3 * Hypervisor filesystem for Linux on s390. 2 * Hypervisor filesystem for Linux on s390.
4 * 3 *
5 * Copyright IBM Corp. 2006, 2008 4 * Copyright IBM Corp. 2006, 2008
@@ -103,6 +102,7 @@ static struct inode *hypfs_make_inode(struct super_block *sb, umode_t mode)
103 102
104 if (ret) { 103 if (ret) {
105 struct hypfs_sb_info *hypfs_info = sb->s_fs_info; 104 struct hypfs_sb_info *hypfs_info = sb->s_fs_info;
105 ret->i_ino = get_next_ino();
106 ret->i_mode = mode; 106 ret->i_mode = mode;
107 ret->i_uid = hypfs_info->uid; 107 ret->i_uid = hypfs_info->uid;
108 ret->i_gid = hypfs_info->gid; 108 ret->i_gid = hypfs_info->gid;
diff --git a/arch/s390/include/asm/airq.h b/arch/s390/include/asm/airq.h
index 1ac80d6b0588..9819891ed7a2 100644
--- a/arch/s390/include/asm/airq.h
+++ b/arch/s390/include/asm/airq.h
@@ -1,7 +1,5 @@
1/* 1/*
2 * include/asm-s390/airq.h 2 * Copyright IBM Corp. 2002, 2007
3 *
4 * Copyright IBM Corp. 2002,2007
5 * Author(s): Ingo Adlung <adlung@de.ibm.com> 3 * Author(s): Ingo Adlung <adlung@de.ibm.com>
6 * Cornelia Huck <cornelia.huck@de.ibm.com> 4 * Cornelia Huck <cornelia.huck@de.ibm.com>
7 * Arnd Bergmann <arndb@de.ibm.com> 5 * Arnd Bergmann <arndb@de.ibm.com>
diff --git a/arch/s390/include/asm/appldata.h b/arch/s390/include/asm/appldata.h
index 79283dac8281..f328294faeae 100644
--- a/arch/s390/include/asm/appldata.h
+++ b/arch/s390/include/asm/appldata.h
@@ -1,7 +1,5 @@
1/* 1/*
2 * include/asm-s390/appldata.h 2 * Copyright IBM Corp. 2006
3 *
4 * Copyright (C) IBM Corp. 2006
5 * 3 *
6 * Author(s): Melissa Howland <melissah@us.ibm.com> 4 * Author(s): Melissa Howland <melissah@us.ibm.com>
7 */ 5 */
diff --git a/arch/s390/include/asm/atomic.h b/arch/s390/include/asm/atomic.h
index 748347baecb8..c797832daa5f 100644
--- a/arch/s390/include/asm/atomic.h
+++ b/arch/s390/include/asm/atomic.h
@@ -1,8 +1,5 @@
1#ifndef __ARCH_S390_ATOMIC__
2#define __ARCH_S390_ATOMIC__
3
4/* 1/*
5 * Copyright 1999,2009 IBM Corp. 2 * Copyright IBM Corp. 1999, 2009
6 * Author(s): Martin Schwidefsky <schwidefsky@de.ibm.com>, 3 * Author(s): Martin Schwidefsky <schwidefsky@de.ibm.com>,
7 * Denis Joseph Barrow, 4 * Denis Joseph Barrow,
8 * Arnd Bergmann <arndb@de.ibm.com>, 5 * Arnd Bergmann <arndb@de.ibm.com>,
@@ -13,6 +10,9 @@
13 * 10 *
14 */ 11 */
15 12
13#ifndef __ARCH_S390_ATOMIC__
14#define __ARCH_S390_ATOMIC__
15
16#include <linux/compiler.h> 16#include <linux/compiler.h>
17#include <linux/types.h> 17#include <linux/types.h>
18#include <asm/cmpxchg.h> 18#include <asm/cmpxchg.h>
diff --git a/arch/s390/include/asm/bitops.h b/arch/s390/include/asm/bitops.h
index a6ff5a83e227..6f573890fb28 100644
--- a/arch/s390/include/asm/bitops.h
+++ b/arch/s390/include/asm/bitops.h
@@ -1,11 +1,6 @@
1#ifndef _S390_BITOPS_H
2#define _S390_BITOPS_H
3
4/* 1/*
5 * include/asm-s390/bitops.h
6 *
7 * S390 version 2 * S390 version
8 * Copyright (C) 1999 IBM Deutschland Entwicklung GmbH, IBM Corporation 3 * Copyright IBM Corp. 1999
9 * Author(s): Martin Schwidefsky (schwidefsky@de.ibm.com) 4 * Author(s): Martin Schwidefsky (schwidefsky@de.ibm.com)
10 * 5 *
11 * Derived from "include/asm-i386/bitops.h" 6 * Derived from "include/asm-i386/bitops.h"
@@ -13,6 +8,9 @@
13 * 8 *
14 */ 9 */
15 10
11#ifndef _S390_BITOPS_H
12#define _S390_BITOPS_H
13
16#ifndef _LINUX_BITOPS_H 14#ifndef _LINUX_BITOPS_H
17#error only <linux/bitops.h> can be included directly 15#error only <linux/bitops.h> can be included directly
18#endif 16#endif
diff --git a/arch/s390/include/asm/bugs.h b/arch/s390/include/asm/bugs.h
index 011f1e6a2a6c..0f5bd894f4dc 100644
--- a/arch/s390/include/asm/bugs.h
+++ b/arch/s390/include/asm/bugs.h
@@ -1,8 +1,6 @@
1/* 1/*
2 * include/asm-s390/bugs.h
3 *
4 * S390 version 2 * S390 version
5 * Copyright (C) 1999 IBM Deutschland Entwicklung GmbH, IBM Corporation 3 * Copyright IBM Corp. 1999
6 * Author(s): Martin Schwidefsky (schwidefsky@de.ibm.com) 4 * Author(s): Martin Schwidefsky (schwidefsky@de.ibm.com)
7 * 5 *
8 * Derived from "include/asm-i386/bugs.h" 6 * Derived from "include/asm-i386/bugs.h"
diff --git a/arch/s390/include/asm/cache.h b/arch/s390/include/asm/cache.h
index 2a30d5ac0667..4d7ccac5fd1d 100644
--- a/arch/s390/include/asm/cache.h
+++ b/arch/s390/include/asm/cache.h
@@ -1,8 +1,6 @@
1/* 1/*
2 * include/asm-s390/cache.h
3 *
4 * S390 version 2 * S390 version
5 * Copyright (C) 1999 IBM Deutschland Entwicklung GmbH, IBM Corporation 3 * Copyright IBM Corp. 1999
6 * 4 *
7 * Derived from "include/asm-i386/cache.h" 5 * Derived from "include/asm-i386/cache.h"
8 * Copyright (C) 1992, Linus Torvalds 6 * Copyright (C) 1992, Linus Torvalds
diff --git a/arch/s390/include/asm/ccwdev.h b/arch/s390/include/asm/ccwdev.h
index 9381c92cc779..1cb4bb3f32d9 100644
--- a/arch/s390/include/asm/ccwdev.h
+++ b/arch/s390/include/asm/ccwdev.h
@@ -1,5 +1,5 @@
1/* 1/*
2 * Copyright IBM Corp. 2002, 2009 2 * Copyright IBM Corp. 2002, 2009
3 * 3 *
4 * Author(s): Arnd Bergmann <arndb@de.ibm.com> 4 * Author(s): Arnd Bergmann <arndb@de.ibm.com>
5 * 5 *
diff --git a/arch/s390/include/asm/ccwgroup.h b/arch/s390/include/asm/ccwgroup.h
index f2ef34f6d6e5..01a905eb11e0 100644
--- a/arch/s390/include/asm/ccwgroup.h
+++ b/arch/s390/include/asm/ccwgroup.h
@@ -6,14 +6,12 @@ struct ccw_driver;
6 6
7/** 7/**
8 * struct ccwgroup_device - ccw group device 8 * struct ccwgroup_device - ccw group device
9 * @creator_id: unique number of the driver
10 * @state: online/offline state 9 * @state: online/offline state
11 * @count: number of attached slave devices 10 * @count: number of attached slave devices
12 * @dev: embedded device structure 11 * @dev: embedded device structure
13 * @cdev: variable number of slave devices, allocated as needed 12 * @cdev: variable number of slave devices, allocated as needed
14 */ 13 */
15struct ccwgroup_device { 14struct ccwgroup_device {
16 unsigned long creator_id;
17 enum { 15 enum {
18 CCWGROUP_OFFLINE, 16 CCWGROUP_OFFLINE,
19 CCWGROUP_ONLINE, 17 CCWGROUP_ONLINE,
diff --git a/arch/s390/include/asm/checksum.h b/arch/s390/include/asm/checksum.h
index 6c00f6800a34..4f57a4f3909a 100644
--- a/arch/s390/include/asm/checksum.h
+++ b/arch/s390/include/asm/checksum.h
@@ -1,18 +1,16 @@
1#ifndef _S390_CHECKSUM_H
2#define _S390_CHECKSUM_H
3
4/* 1/*
5 * include/asm-s390/checksum.h
6 * S390 fast network checksum routines 2 * S390 fast network checksum routines
7 * see also arch/S390/lib/checksum.c
8 * 3 *
9 * S390 version 4 * S390 version
10 * Copyright (C) 1999 IBM Deutschland Entwicklung GmbH, IBM Corporation 5 * Copyright IBM Corp. 1999
11 * Author(s): Ulrich Hild (first version) 6 * Author(s): Ulrich Hild (first version)
12 * Martin Schwidefsky (heavily optimized CKSM version) 7 * Martin Schwidefsky (heavily optimized CKSM version)
13 * D.J. Barrow (third attempt) 8 * D.J. Barrow (third attempt)
14 */ 9 */
15 10
11#ifndef _S390_CHECKSUM_H
12#define _S390_CHECKSUM_H
13
16#include <asm/uaccess.h> 14#include <asm/uaccess.h>
17 15
18/* 16/*
diff --git a/arch/s390/include/asm/chpid.h b/arch/s390/include/asm/chpid.h
index 8e88e2221771..e5bde9f9291f 100644
--- a/arch/s390/include/asm/chpid.h
+++ b/arch/s390/include/asm/chpid.h
@@ -1,6 +1,4 @@
1/* 1/*
2 * drivers/s390/cio/chpid.h
3 *
4 * Copyright IBM Corp. 2007 2 * Copyright IBM Corp. 2007
5 * Author(s): Peter Oberparleiter <peter.oberparleiter@de.ibm.com> 3 * Author(s): Peter Oberparleiter <peter.oberparleiter@de.ibm.com>
6 */ 4 */
diff --git a/arch/s390/include/asm/chsc.h b/arch/s390/include/asm/chsc.h
index 4943654ed7fd..bf115b49f444 100644
--- a/arch/s390/include/asm/chsc.h
+++ b/arch/s390/include/asm/chsc.h
@@ -1,7 +1,7 @@
1/* 1/*
2 * ioctl interface for /dev/chsc 2 * ioctl interface for /dev/chsc
3 * 3 *
4 * Copyright 2008 IBM Corp. 4 * Copyright IBM Corp. 2008
5 * Author(s): Cornelia Huck <cornelia.huck@de.ibm.com> 5 * Author(s): Cornelia Huck <cornelia.huck@de.ibm.com>
6 */ 6 */
7 7
diff --git a/arch/s390/include/asm/cio.h b/arch/s390/include/asm/cio.h
index 4c8d4d5b8bd2..77043aa44d67 100644
--- a/arch/s390/include/asm/cio.h
+++ b/arch/s390/include/asm/cio.h
@@ -1,7 +1,4 @@
1/* 1/*
2 * include/asm-s390/cio.h
3 * include/asm-s390x/cio.h
4 *
5 * Common interface for I/O on S/390 2 * Common interface for I/O on S/390
6 */ 3 */
7#ifndef _ASM_S390_CIO_H_ 4#ifndef _ASM_S390_CIO_H_
diff --git a/arch/s390/include/asm/cpcmd.h b/arch/s390/include/asm/cpcmd.h
index 48a9eab16429..3dfadb5d648f 100644
--- a/arch/s390/include/asm/cpcmd.h
+++ b/arch/s390/include/asm/cpcmd.h
@@ -1,8 +1,6 @@
1/* 1/*
2 * arch/s390/kernel/cpcmd.h
3 *
4 * S390 version 2 * S390 version
5 * Copyright (C) 1999 IBM Deutschland Entwicklung GmbH, IBM Corporation 3 * Copyright IBM Corp. 1999
6 * Author(s): Martin Schwidefsky (schwidefsky@de.ibm.com), 4 * Author(s): Martin Schwidefsky (schwidefsky@de.ibm.com),
7 * Christian Borntraeger (cborntra@de.ibm.com), 5 * Christian Borntraeger (cborntra@de.ibm.com),
8 */ 6 */
diff --git a/arch/s390/include/asm/cpu.h b/arch/s390/include/asm/cpu.h
index e0b69540216f..f5a8e2fcde0c 100644
--- a/arch/s390/include/asm/cpu.h
+++ b/arch/s390/include/asm/cpu.h
@@ -1,5 +1,5 @@
1/* 1/*
2 * Copyright IBM Corp. 2000,2009 2 * Copyright IBM Corp. 2000, 2009
3 * Author(s): Hartmut Penner <hp@de.ibm.com>, 3 * Author(s): Hartmut Penner <hp@de.ibm.com>,
4 * Martin Schwidefsky <schwidefsky@de.ibm.com>, 4 * Martin Schwidefsky <schwidefsky@de.ibm.com>,
5 * Christian Ehrhardt <ehrhardt@de.ibm.com>, 5 * Christian Ehrhardt <ehrhardt@de.ibm.com>,
diff --git a/arch/s390/include/asm/cputime.h b/arch/s390/include/asm/cputime.h
index 718374de9c7f..8709bdef233c 100644
--- a/arch/s390/include/asm/cputime.h
+++ b/arch/s390/include/asm/cputime.h
@@ -1,7 +1,5 @@
1/* 1/*
2 * include/asm-s390/cputime.h 2 * Copyright IBM Corp. 2004
3 *
4 * (C) Copyright IBM Corp. 2004
5 * 3 *
6 * Author: Martin Schwidefsky <schwidefsky@de.ibm.com> 4 * Author: Martin Schwidefsky <schwidefsky@de.ibm.com>
7 */ 5 */
@@ -167,12 +165,14 @@ static inline clock_t cputime64_to_clock_t(cputime64_t cputime)
167} 165}
168 166
169struct s390_idle_data { 167struct s390_idle_data {
168 int nohz_delay;
170 unsigned int sequence; 169 unsigned int sequence;
171 unsigned long long idle_count; 170 unsigned long long idle_count;
172 unsigned long long idle_enter;
173 unsigned long long idle_exit;
174 unsigned long long idle_time; 171 unsigned long long idle_time;
175 int nohz_delay; 172 unsigned long long clock_idle_enter;
173 unsigned long long clock_idle_exit;
174 unsigned long long timer_idle_enter;
175 unsigned long long timer_idle_exit;
176}; 176};
177 177
178DECLARE_PER_CPU(struct s390_idle_data, s390_idle); 178DECLARE_PER_CPU(struct s390_idle_data, s390_idle);
diff --git a/arch/s390/include/asm/crw.h b/arch/s390/include/asm/crw.h
index 749a97e61bea..7c31d3e25cd1 100644
--- a/arch/s390/include/asm/crw.h
+++ b/arch/s390/include/asm/crw.h
@@ -1,6 +1,6 @@
1/* 1/*
2 * Data definitions for channel report processing 2 * Data definitions for channel report processing
3 * Copyright IBM Corp. 2000,2009 3 * Copyright IBM Corp. 2000, 2009
4 * Author(s): Ingo Adlung <adlung@de.ibm.com>, 4 * Author(s): Ingo Adlung <adlung@de.ibm.com>,
5 * Martin Schwidefsky <schwidefsky@de.ibm.com>, 5 * Martin Schwidefsky <schwidefsky@de.ibm.com>,
6 * Cornelia Huck <cornelia.huck@de.ibm.com>, 6 * Cornelia Huck <cornelia.huck@de.ibm.com>,
diff --git a/arch/s390/include/asm/current.h b/arch/s390/include/asm/current.h
index 7a68084ec2f0..b80941f30df5 100644
--- a/arch/s390/include/asm/current.h
+++ b/arch/s390/include/asm/current.h
@@ -1,8 +1,6 @@
1/* 1/*
2 * include/asm-s390/current.h
3 *
4 * S390 version 2 * S390 version
5 * Copyright (C) 1999 IBM Deutschland Entwicklung GmbH, IBM Corporation 3 * Copyright IBM Corp. 1999
6 * Author(s): Martin Schwidefsky (schwidefsky@de.ibm.com) 4 * Author(s): Martin Schwidefsky (schwidefsky@de.ibm.com)
7 * 5 *
8 * Derived from "include/asm-i386/current.h" 6 * Derived from "include/asm-i386/current.h"
diff --git a/arch/s390/include/asm/dasd.h b/arch/s390/include/asm/dasd.h
index 0be28efe5b66..38eca3ba40e2 100644
--- a/arch/s390/include/asm/dasd.h
+++ b/arch/s390/include/asm/dasd.h
@@ -1,8 +1,7 @@
1/* 1/*
2 * File...........: linux/drivers/s390/block/dasd.c
3 * Author(s)......: Holger Smolinski <Holger.Smolinski@de.ibm.com> 2 * Author(s)......: Holger Smolinski <Holger.Smolinski@de.ibm.com>
4 * Bugreports.to..: <Linux390@de.ibm.com> 3 * Bugreports.to..: <Linux390@de.ibm.com>
5 * (C) IBM Corporation, IBM Deutschland Entwicklung GmbH, 1999,2000 4 * Copyright IBM Corp. 1999, 2000
6 * EMC Symmetrix ioctl Copyright EMC Corporation, 2008 5 * EMC Symmetrix ioctl Copyright EMC Corporation, 2008
7 * Author.........: Nigel Hislop <hislop_nigel@emc.com> 6 * Author.........: Nigel Hislop <hislop_nigel@emc.com>
8 * 7 *
diff --git a/arch/s390/include/asm/debug.h b/arch/s390/include/asm/debug.h
index 8a8245ed14d2..f39677e6ccde 100644
--- a/arch/s390/include/asm/debug.h
+++ b/arch/s390/include/asm/debug.h
@@ -1,9 +1,7 @@
1/* 1/*
2 * include/asm-s390/debug.h
3 * S/390 debug facility 2 * S/390 debug facility
4 * 3 *
5 * Copyright (C) 1999, 2000 IBM Deutschland Entwicklung GmbH, 4 * Copyright IBM Corp. 1999, 2000
6 * IBM Corporation
7 */ 5 */
8 6
9#ifndef DEBUG_H 7#ifndef DEBUG_H
diff --git a/arch/s390/include/asm/delay.h b/arch/s390/include/asm/delay.h
index 0e3b35f96be1..3f6e4095f471 100644
--- a/arch/s390/include/asm/delay.h
+++ b/arch/s390/include/asm/delay.h
@@ -1,8 +1,6 @@
1/* 1/*
2 * include/asm-s390/delay.h
3 *
4 * S390 version 2 * S390 version
5 * Copyright (C) 1999 IBM Deutschland Entwicklung GmbH, IBM Corporation 3 * Copyright IBM Corp. 1999
6 * Author(s): Martin Schwidefsky (schwidefsky@de.ibm.com) 4 * Author(s): Martin Schwidefsky (schwidefsky@de.ibm.com)
7 * 5 *
8 * Derived from "include/asm-i386/delay.h" 6 * Derived from "include/asm-i386/delay.h"
diff --git a/arch/s390/include/asm/dma.h b/arch/s390/include/asm/dma.h
index 7425c6af6cd4..6fb6de4f15b0 100644
--- a/arch/s390/include/asm/dma.h
+++ b/arch/s390/include/asm/dma.h
@@ -1,6 +1,4 @@
1/* 1/*
2 * include/asm-s390/dma.h
3 *
4 * S390 version 2 * S390 version
5 */ 3 */
6 4
diff --git a/arch/s390/include/asm/ebcdic.h b/arch/s390/include/asm/ebcdic.h
index 7f6f641d32f4..c5befc5a3bf5 100644
--- a/arch/s390/include/asm/ebcdic.h
+++ b/arch/s390/include/asm/ebcdic.h
@@ -1,9 +1,8 @@
1/* 1/*
2 * include/asm-s390/ebcdic.h
3 * EBCDIC -> ASCII, ASCII -> EBCDIC conversion routines. 2 * EBCDIC -> ASCII, ASCII -> EBCDIC conversion routines.
4 * 3 *
5 * S390 version 4 * S390 version
6 * Copyright (C) 1999 IBM Deutschland Entwicklung GmbH, IBM Corporation 5 * Copyright IBM Corp. 1999
7 * Author(s): Martin Schwidefsky <schwidefsky@de.ibm.com> 6 * Author(s): Martin Schwidefsky <schwidefsky@de.ibm.com>
8 */ 7 */
9 8
diff --git a/arch/s390/include/asm/elf.h b/arch/s390/include/asm/elf.h
index 06151e6a3098..32e8449640fa 100644
--- a/arch/s390/include/asm/elf.h
+++ b/arch/s390/include/asm/elf.h
@@ -1,6 +1,4 @@
1/* 1/*
2 * include/asm-s390/elf.h
3 *
4 * S390 version 2 * S390 version
5 * 3 *
6 * Derived from "include/asm-i386/elf.h" 4 * Derived from "include/asm-i386/elf.h"
diff --git a/arch/s390/include/asm/errno.h b/arch/s390/include/asm/errno.h
index e41d5b37c4d6..395e97d8005e 100644
--- a/arch/s390/include/asm/errno.h
+++ b/arch/s390/include/asm/errno.h
@@ -1,6 +1,4 @@
1/* 1/*
2 * include/asm-s390/errno.h
3 *
4 * S390 version 2 * S390 version
5 * 3 *
6 */ 4 */
diff --git a/arch/s390/include/asm/etr.h b/arch/s390/include/asm/etr.h
index 538e1b36a726..a24b03b9fb64 100644
--- a/arch/s390/include/asm/etr.h
+++ b/arch/s390/include/asm/etr.h
@@ -1,6 +1,4 @@
1/* 1/*
2 * include/asm-s390/etr.h
3 *
4 * Copyright IBM Corp. 2006 2 * Copyright IBM Corp. 2006
5 * Author(s): Martin Schwidefsky (schwidefsky@de.ibm.com) 3 * Author(s): Martin Schwidefsky (schwidefsky@de.ibm.com)
6 */ 4 */
diff --git a/arch/s390/include/asm/extmem.h b/arch/s390/include/asm/extmem.h
index 33837d756184..6276002d76ba 100644
--- a/arch/s390/include/asm/extmem.h
+++ b/arch/s390/include/asm/extmem.h
@@ -1,8 +1,6 @@
1/* 1/*
2 * include/asm-s390x/extmem.h
3 *
4 * definitions for external memory segment support 2 * definitions for external memory segment support
5 * Copyright (C) 2003 IBM Deutschland Entwicklung GmbH, IBM Corporation 3 * Copyright IBM Corp. 2003
6 */ 4 */
7 5
8#ifndef _ASM_S390X_DCSS_H 6#ifndef _ASM_S390X_DCSS_H
diff --git a/arch/s390/include/asm/hardirq.h b/arch/s390/include/asm/hardirq.h
index 510ba9ef4248..0c82ba86e997 100644
--- a/arch/s390/include/asm/hardirq.h
+++ b/arch/s390/include/asm/hardirq.h
@@ -1,8 +1,6 @@
1/* 1/*
2 * include/asm-s390/hardirq.h
3 *
4 * S390 version 2 * S390 version
5 * Copyright (C) 1999,2000 IBM Deutschland Entwicklung GmbH, IBM Corporation 3 * Copyright IBM Corp. 1999, 2000
6 * Author(s): Martin Schwidefsky (schwidefsky@de.ibm.com), 4 * Author(s): Martin Schwidefsky (schwidefsky@de.ibm.com),
7 * Denis Joseph Barrow (djbarrow@de.ibm.com,barrow_dj@yahoo.com) 5 * Denis Joseph Barrow (djbarrow@de.ibm.com,barrow_dj@yahoo.com)
8 * 6 *
diff --git a/arch/s390/include/asm/idals.h b/arch/s390/include/asm/idals.h
index aef0dde340d1..ea5a6e45fd93 100644
--- a/arch/s390/include/asm/idals.h
+++ b/arch/s390/include/asm/idals.h
@@ -1,10 +1,9 @@
1/* 1/*
2 * File...........: linux/include/asm-s390x/idals.h
3 * Author(s)......: Holger Smolinski <Holger.Smolinski@de.ibm.com> 2 * Author(s)......: Holger Smolinski <Holger.Smolinski@de.ibm.com>
4 * Martin Schwidefsky <schwidefsky@de.ibm.com> 3 * Martin Schwidefsky <schwidefsky@de.ibm.com>
5 * Bugreports.to..: <Linux390@de.ibm.com> 4 * Bugreports.to..: <Linux390@de.ibm.com>
6 * (C) IBM Corporation, IBM Deutschland Entwicklung GmbH, 2000a 5 * Copyright IBM Corp. 2000
7 6 *
8 * History of changes 7 * History of changes
9 * 07/24/00 new file 8 * 07/24/00 new file
10 * 05/04/02 code restructuring. 9 * 05/04/02 code restructuring.
diff --git a/arch/s390/include/asm/io.h b/arch/s390/include/asm/io.h
index f81a0975cbea..559e921a6bba 100644
--- a/arch/s390/include/asm/io.h
+++ b/arch/s390/include/asm/io.h
@@ -1,8 +1,6 @@
1/* 1/*
2 * include/asm-s390/io.h
3 *
4 * S390 version 2 * S390 version
5 * Copyright (C) 1999 IBM Deutschland Entwicklung GmbH, IBM Corporation 3 * Copyright IBM Corp. 1999
6 * Author(s): Martin Schwidefsky (schwidefsky@de.ibm.com) 4 * Author(s): Martin Schwidefsky (schwidefsky@de.ibm.com)
7 * 5 *
8 * Derived from "include/asm-i386/io.h" 6 * Derived from "include/asm-i386/io.h"
diff --git a/arch/s390/include/asm/irqflags.h b/arch/s390/include/asm/irqflags.h
index 38fdf451febb..37b9091ab8c0 100644
--- a/arch/s390/include/asm/irqflags.h
+++ b/arch/s390/include/asm/irqflags.h
@@ -1,5 +1,5 @@
1/* 1/*
2 * Copyright IBM Corp. 2006,2010 2 * Copyright IBM Corp. 2006, 2010
3 * Author(s): Martin Schwidefsky <schwidefsky@de.ibm.com> 3 * Author(s): Martin Schwidefsky <schwidefsky@de.ibm.com>
4 */ 4 */
5 5
diff --git a/arch/s390/include/asm/kexec.h b/arch/s390/include/asm/kexec.h
index f4f38826eebb..694bcd6bd927 100644
--- a/arch/s390/include/asm/kexec.h
+++ b/arch/s390/include/asm/kexec.h
@@ -1,7 +1,5 @@
1/* 1/*
2 * include/asm-s390/kexec.h 2 * Copyright IBM Corp. 2005
3 *
4 * (C) Copyright IBM Corp. 2005
5 * 3 *
6 * Author(s): Rolf Adelsberger <adelsberger@de.ibm.com> 4 * Author(s): Rolf Adelsberger <adelsberger@de.ibm.com>
7 * 5 *
diff --git a/arch/s390/include/asm/kprobes.h b/arch/s390/include/asm/kprobes.h
index a231a9439c4b..dcf6948a875c 100644
--- a/arch/s390/include/asm/kprobes.h
+++ b/arch/s390/include/asm/kprobes.h
@@ -17,7 +17,7 @@
17 * along with this program; if not, write to the Free Software 17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 18 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
19 * 19 *
20 * Copyright (C) IBM Corporation, 2002, 2006 20 * Copyright IBM Corp. 2002, 2006
21 * 21 *
22 * 2002-Oct Created by Vamsi Krishna S <vamsi_krishna@in.ibm.com> Kernel 22 * 2002-Oct Created by Vamsi Krishna S <vamsi_krishna@in.ibm.com> Kernel
23 * Probes initial implementation ( includes suggestions from 23 * Probes initial implementation ( includes suggestions from
diff --git a/arch/s390/include/asm/kvm.h b/arch/s390/include/asm/kvm.h
index bdcbe0f8dd7b..d25da598ec62 100644
--- a/arch/s390/include/asm/kvm.h
+++ b/arch/s390/include/asm/kvm.h
@@ -1,7 +1,7 @@
1#ifndef __LINUX_KVM_S390_H 1#ifndef __LINUX_KVM_S390_H
2#define __LINUX_KVM_S390_H 2#define __LINUX_KVM_S390_H
3/* 3/*
4 * asm-s390/kvm.h - KVM s390 specific structures and definitions 4 * KVM s390 specific structures and definitions
5 * 5 *
6 * Copyright IBM Corp. 2008 6 * Copyright IBM Corp. 2008
7 * 7 *
diff --git a/arch/s390/include/asm/kvm_host.h b/arch/s390/include/asm/kvm_host.h
index dd17537b9a9d..b7841546991f 100644
--- a/arch/s390/include/asm/kvm_host.h
+++ b/arch/s390/include/asm/kvm_host.h
@@ -1,7 +1,7 @@
1/* 1/*
2 * asm-s390/kvm_host.h - definition for kernel virtual machines on s390 2 * definition for kernel virtual machines on s390
3 * 3 *
4 * Copyright IBM Corp. 2008,2009 4 * Copyright IBM Corp. 2008, 2009
5 * 5 *
6 * This program is free software; you can redistribute it and/or modify 6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License (version 2 only) 7 * it under the terms of the GNU General Public License (version 2 only)
diff --git a/arch/s390/include/asm/kvm_para.h b/arch/s390/include/asm/kvm_para.h
index a98832961035..da44867de60f 100644
--- a/arch/s390/include/asm/kvm_para.h
+++ b/arch/s390/include/asm/kvm_para.h
@@ -1,5 +1,5 @@
1/* 1/*
2 * asm-s390/kvm_para.h - definition for paravirtual devices on s390 2 * definition for paravirtual devices on s390
3 * 3 *
4 * Copyright IBM Corp. 2008 4 * Copyright IBM Corp. 2008
5 * 5 *
diff --git a/arch/s390/include/asm/kvm_virtio.h b/arch/s390/include/asm/kvm_virtio.h
index 72f614181eff..44a438ca9e72 100644
--- a/arch/s390/include/asm/kvm_virtio.h
+++ b/arch/s390/include/asm/kvm_virtio.h
@@ -1,5 +1,5 @@
1/* 1/*
2 * kvm_virtio.h - definition for virtio for kvm on s390 2 * definition for virtio for kvm on s390
3 * 3 *
4 * Copyright IBM Corp. 2008 4 * Copyright IBM Corp. 2008
5 * 5 *
diff --git a/arch/s390/include/asm/lowcore.h b/arch/s390/include/asm/lowcore.h
index 47853debb3b9..aab5555bbbda 100644
--- a/arch/s390/include/asm/lowcore.h
+++ b/arch/s390/include/asm/lowcore.h
@@ -1,5 +1,5 @@
1/* 1/*
2 * Copyright IBM Corp. 1999,2012 2 * Copyright IBM Corp. 1999, 2012
3 * Author(s): Hartmut Penner <hp@de.ibm.com>, 3 * Author(s): Hartmut Penner <hp@de.ibm.com>,
4 * Martin Schwidefsky <schwidefsky@de.ibm.com>, 4 * Martin Schwidefsky <schwidefsky@de.ibm.com>,
5 * Denis Joseph Barrow, 5 * Denis Joseph Barrow,
@@ -302,12 +302,7 @@ struct _lowcore {
302 */ 302 */
303 __u64 ipib; /* 0x0e00 */ 303 __u64 ipib; /* 0x0e00 */
304 __u32 ipib_checksum; /* 0x0e08 */ 304 __u32 ipib_checksum; /* 0x0e08 */
305 /* 305 __u64 vmcore_info; /* 0x0e0c */
306 * Because the vmcore_info pointer is not 8 byte aligned it never
307 * should not be accessed directly. For accessing the pointer, first
308 * copy it to a local pointer variable.
309 */
310 __u8 vmcore_info[8]; /* 0x0e0c */
311 __u8 pad_0x0e14[0x0e18-0x0e14]; /* 0x0e14 */ 306 __u8 pad_0x0e14[0x0e18-0x0e14]; /* 0x0e14 */
312 __u64 os_info; /* 0x0e18 */ 307 __u64 os_info; /* 0x0e18 */
313 __u8 pad_0x0e20[0x0f00-0x0e20]; /* 0x0e20 */ 308 __u8 pad_0x0e20[0x0f00-0x0e20]; /* 0x0e20 */
diff --git a/arch/s390/include/asm/mathemu.h b/arch/s390/include/asm/mathemu.h
index e8dd1ba8edb0..614dfaf47f71 100644
--- a/arch/s390/include/asm/mathemu.h
+++ b/arch/s390/include/asm/mathemu.h
@@ -1,9 +1,8 @@
1/* 1/*
2 * arch/s390/kernel/mathemu.h
3 * IEEE floating point emulation. 2 * IEEE floating point emulation.
4 * 3 *
5 * S390 version 4 * S390 version
6 * Copyright (C) 1999 IBM Deutschland Entwicklung GmbH, IBM Corporation 5 * Copyright IBM Corp. 1999
7 * Author(s): Martin Schwidefsky (schwidefsky@de.ibm.com) 6 * Author(s): Martin Schwidefsky (schwidefsky@de.ibm.com)
8 */ 7 */
9 8
diff --git a/arch/s390/include/asm/mman.h b/arch/s390/include/asm/mman.h
index d49760e63506..abc1932ac4e1 100644
--- a/arch/s390/include/asm/mman.h
+++ b/arch/s390/include/asm/mman.h
@@ -1,6 +1,4 @@
1/* 1/*
2 * include/asm-s390/mman.h
3 *
4 * S390 version 2 * S390 version
5 * 3 *
6 * Derived from "include/asm-i386/mman.h" 4 * Derived from "include/asm-i386/mman.h"
diff --git a/arch/s390/include/asm/mmu_context.h b/arch/s390/include/asm/mmu_context.h
index 69bdf72e95ec..5c63615f1349 100644
--- a/arch/s390/include/asm/mmu_context.h
+++ b/arch/s390/include/asm/mmu_context.h
@@ -1,6 +1,4 @@
1/* 1/*
2 * include/asm-s390/mmu_context.h
3 *
4 * S390 version 2 * S390 version
5 * 3 *
6 * Derived from "include/asm-i386/mmu_context.h" 4 * Derived from "include/asm-i386/mmu_context.h"
diff --git a/arch/s390/include/asm/monwriter.h b/arch/s390/include/asm/monwriter.h
index f0cbf96c52e6..f845c8e2f861 100644
--- a/arch/s390/include/asm/monwriter.h
+++ b/arch/s390/include/asm/monwriter.h
@@ -1,7 +1,5 @@
1/* 1/*
2 * include/asm-s390/monwriter.h 2 * Copyright IBM Corp. 2006
3 *
4 * Copyright (C) IBM Corp. 2006
5 * Character device driver for writing z/VM APPLDATA monitor records 3 * Character device driver for writing z/VM APPLDATA monitor records
6 * Version 1.0 4 * Version 1.0
7 * Author(s): Melissa Howland <melissah@us.ibm.com> 5 * Author(s): Melissa Howland <melissah@us.ibm.com>
diff --git a/arch/s390/include/asm/nmi.h b/arch/s390/include/asm/nmi.h
index f4b60441adca..35f8ec185616 100644
--- a/arch/s390/include/asm/nmi.h
+++ b/arch/s390/include/asm/nmi.h
@@ -1,7 +1,7 @@
1/* 1/*
2 * Machine check handler definitions 2 * Machine check handler definitions
3 * 3 *
4 * Copyright IBM Corp. 2000,2009 4 * Copyright IBM Corp. 2000, 2009
5 * Author(s): Ingo Adlung <adlung@de.ibm.com>, 5 * Author(s): Ingo Adlung <adlung@de.ibm.com>,
6 * Martin Schwidefsky <schwidefsky@de.ibm.com>, 6 * Martin Schwidefsky <schwidefsky@de.ibm.com>,
7 * Cornelia Huck <cornelia.huck@de.ibm.com>, 7 * Cornelia Huck <cornelia.huck@de.ibm.com>,
diff --git a/arch/s390/include/asm/page.h b/arch/s390/include/asm/page.h
index f7ec548c2b9d..27ab3c7c1e8b 100644
--- a/arch/s390/include/asm/page.h
+++ b/arch/s390/include/asm/page.h
@@ -1,8 +1,6 @@
1/* 1/*
2 * include/asm-s390/page.h
3 *
4 * S390 version 2 * S390 version
5 * Copyright (C) 1999,2000 IBM Deutschland Entwicklung GmbH, IBM Corporation 3 * Copyright IBM Corp. 1999, 2000
6 * Author(s): Hartmut Penner (hp@de.ibm.com) 4 * Author(s): Hartmut Penner (hp@de.ibm.com)
7 */ 5 */
8 6
diff --git a/arch/s390/include/asm/pgalloc.h b/arch/s390/include/asm/pgalloc.h
index 43078c194394..590c3219c634 100644
--- a/arch/s390/include/asm/pgalloc.h
+++ b/arch/s390/include/asm/pgalloc.h
@@ -1,8 +1,6 @@
1/* 1/*
2 * include/asm-s390/pgalloc.h
3 *
4 * S390 version 2 * S390 version
5 * Copyright (C) 1999,2000 IBM Deutschland Entwicklung GmbH, IBM Corporation 3 * Copyright IBM Corp. 1999, 2000
6 * Author(s): Hartmut Penner (hp@de.ibm.com) 4 * Author(s): Hartmut Penner (hp@de.ibm.com)
7 * Martin Schwidefsky (schwidefsky@de.ibm.com) 5 * Martin Schwidefsky (schwidefsky@de.ibm.com)
8 * 6 *
diff --git a/arch/s390/include/asm/pgtable.h b/arch/s390/include/asm/pgtable.h
index b3227415abda..6bd7d7483017 100644
--- a/arch/s390/include/asm/pgtable.h
+++ b/arch/s390/include/asm/pgtable.h
@@ -1,8 +1,6 @@
1/* 1/*
2 * include/asm-s390/pgtable.h
3 *
4 * S390 version 2 * S390 version
5 * Copyright (C) 1999,2000 IBM Deutschland Entwicklung GmbH, IBM Corporation 3 * Copyright IBM Corp. 1999, 2000
6 * Author(s): Hartmut Penner (hp@de.ibm.com) 4 * Author(s): Hartmut Penner (hp@de.ibm.com)
7 * Ulrich Weigand (weigand@de.ibm.com) 5 * Ulrich Weigand (weigand@de.ibm.com)
8 * Martin Schwidefsky (schwidefsky@de.ibm.com) 6 * Martin Schwidefsky (schwidefsky@de.ibm.com)
diff --git a/arch/s390/include/asm/posix_types.h b/arch/s390/include/asm/posix_types.h
index 7be104c0f192..7bcc14e395f0 100644
--- a/arch/s390/include/asm/posix_types.h
+++ b/arch/s390/include/asm/posix_types.h
@@ -1,6 +1,4 @@
1/* 1/*
2 * include/asm-s390/posix_types.h
3 *
4 * S390 version 2 * S390 version
5 * 3 *
6 */ 4 */
diff --git a/arch/s390/include/asm/processor.h b/arch/s390/include/asm/processor.h
index 20d0585cf905..c40fa91e38a8 100644
--- a/arch/s390/include/asm/processor.h
+++ b/arch/s390/include/asm/processor.h
@@ -1,8 +1,6 @@
1/* 1/*
2 * include/asm-s390/processor.h
3 *
4 * S390 version 2 * S390 version
5 * Copyright (C) 1999 IBM Deutschland Entwicklung GmbH, IBM Corporation 3 * Copyright IBM Corp. 1999
6 * Author(s): Hartmut Penner (hp@de.ibm.com), 4 * Author(s): Hartmut Penner (hp@de.ibm.com),
7 * Martin Schwidefsky (schwidefsky@de.ibm.com) 5 * Martin Schwidefsky (schwidefsky@de.ibm.com)
8 * 6 *
@@ -348,4 +346,14 @@ extern void (*s390_base_ext_handler_fn)(void);
348 ".previous\n" 346 ".previous\n"
349#endif 347#endif
350 348
349extern int memcpy_real(void *, void *, size_t);
350extern void memcpy_absolute(void *, void *, size_t);
351
352#define mem_assign_absolute(dest, val) { \
353 __typeof__(dest) __tmp = (val); \
354 \
355 BUILD_BUG_ON(sizeof(__tmp) != sizeof(val)); \
356 memcpy_absolute(&(dest), &__tmp, sizeof(__tmp)); \
357}
358
351#endif /* __ASM_S390_PROCESSOR_H */ 359#endif /* __ASM_S390_PROCESSOR_H */
diff --git a/arch/s390/include/asm/ptrace.h b/arch/s390/include/asm/ptrace.h
index aeb77f017985..d5f08ea566ed 100644
--- a/arch/s390/include/asm/ptrace.h
+++ b/arch/s390/include/asm/ptrace.h
@@ -1,8 +1,6 @@
1/* 1/*
2 * include/asm-s390/ptrace.h
3 *
4 * S390 version 2 * S390 version
5 * Copyright (C) 1999,2000 IBM Deutschland Entwicklung GmbH, IBM Corporation 3 * Copyright IBM Corp. 1999, 2000
6 * Author(s): Denis Joseph Barrow (djbarrow@de.ibm.com,barrow_dj@yahoo.com) 4 * Author(s): Denis Joseph Barrow (djbarrow@de.ibm.com,barrow_dj@yahoo.com)
7 */ 5 */
8 6
diff --git a/arch/s390/include/asm/qdio.h b/arch/s390/include/asm/qdio.h
index f039d86adf67..57d0d7e794b1 100644
--- a/arch/s390/include/asm/qdio.h
+++ b/arch/s390/include/asm/qdio.h
@@ -1,7 +1,5 @@
1/* 1/*
2 * linux/include/asm-s390/qdio.h 2 * Copyright IBM Corp. 2000, 2008
3 *
4 * Copyright 2000,2008 IBM Corp.
5 * Author(s): Utz Bacher <utz.bacher@de.ibm.com> 3 * Author(s): Utz Bacher <utz.bacher@de.ibm.com>
6 * Jan Glauber <jang@linux.vnet.ibm.com> 4 * Jan Glauber <jang@linux.vnet.ibm.com>
7 * 5 *
diff --git a/arch/s390/include/asm/qeth.h b/arch/s390/include/asm/qeth.h
index 2c7c898c03e4..3a896cf52589 100644
--- a/arch/s390/include/asm/qeth.h
+++ b/arch/s390/include/asm/qeth.h
@@ -1,9 +1,7 @@
1/* 1/*
2 * include/asm-s390/qeth.h
3 *
4 * ioctl definitions for qeth driver 2 * ioctl definitions for qeth driver
5 * 3 *
6 * Copyright (C) 2004 IBM Corporation 4 * Copyright IBM Corp. 2004
7 * 5 *
8 * Author(s): Thomas Spatzier <tspat@de.ibm.com> 6 * Author(s): Thomas Spatzier <tspat@de.ibm.com>
9 * 7 *
diff --git a/arch/s390/include/asm/reset.h b/arch/s390/include/asm/reset.h
index 3d6ad4ad2a3f..804578587a7a 100644
--- a/arch/s390/include/asm/reset.h
+++ b/arch/s390/include/asm/reset.h
@@ -1,6 +1,4 @@
1/* 1/*
2 * include/asm-s390/reset.h
3 *
4 * Copyright IBM Corp. 2006 2 * Copyright IBM Corp. 2006
5 * Author(s): Heiko Carstens <heiko.carstens@de.ibm.com> 3 * Author(s): Heiko Carstens <heiko.carstens@de.ibm.com>
6 */ 4 */
diff --git a/arch/s390/include/asm/resource.h b/arch/s390/include/asm/resource.h
index 366c01de04f2..ec23d1c73c92 100644
--- a/arch/s390/include/asm/resource.h
+++ b/arch/s390/include/asm/resource.h
@@ -1,6 +1,4 @@
1/* 1/*
2 * include/asm-s390/resource.h
3 *
4 * S390 version 2 * S390 version
5 * 3 *
6 * Derived from "include/asm-i386/resources.h" 4 * Derived from "include/asm-i386/resources.h"
diff --git a/arch/s390/include/asm/rwsem.h b/arch/s390/include/asm/rwsem.h
index 1ceee10264c3..487f9b64efb9 100644
--- a/arch/s390/include/asm/rwsem.h
+++ b/arch/s390/include/asm/rwsem.h
@@ -2,10 +2,8 @@
2#define _S390_RWSEM_H 2#define _S390_RWSEM_H
3 3
4/* 4/*
5 * include/asm-s390/rwsem.h
6 *
7 * S390 version 5 * S390 version
8 * Copyright (C) 2002 IBM Deutschland Entwicklung GmbH, IBM Corporation 6 * Copyright IBM Corp. 2002
9 * Author(s): Martin Schwidefsky (schwidefsky@de.ibm.com) 7 * Author(s): Martin Schwidefsky (schwidefsky@de.ibm.com)
10 * 8 *
11 * Based on asm-alpha/semaphore.h and asm-i386/rwsem.h 9 * Based on asm-alpha/semaphore.h and asm-i386/rwsem.h
diff --git a/arch/s390/include/asm/sclp.h b/arch/s390/include/asm/sclp.h
index bf238c55740b..e62a555557ee 100644
--- a/arch/s390/include/asm/sclp.h
+++ b/arch/s390/include/asm/sclp.h
@@ -1,6 +1,4 @@
1/* 1/*
2 * include/asm-s390/sclp.h
3 *
4 * Copyright IBM Corp. 2007 2 * Copyright IBM Corp. 2007
5 * Author(s): Heiko Carstens <heiko.carstens@de.ibm.com> 3 * Author(s): Heiko Carstens <heiko.carstens@de.ibm.com>
6 */ 4 */
@@ -55,5 +53,7 @@ int sclp_chp_configure(struct chp_id chpid);
55int sclp_chp_deconfigure(struct chp_id chpid); 53int sclp_chp_deconfigure(struct chp_id chpid);
56int sclp_chp_read_info(struct sclp_chp_info *info); 54int sclp_chp_read_info(struct sclp_chp_info *info);
57void sclp_get_ipl_info(struct sclp_ipl_info *info); 55void sclp_get_ipl_info(struct sclp_ipl_info *info);
56bool sclp_has_linemode(void);
57bool sclp_has_vt220(void);
58 58
59#endif /* _ASM_S390_SCLP_H */ 59#endif /* _ASM_S390_SCLP_H */
diff --git a/arch/s390/include/asm/scsw.h b/arch/s390/include/asm/scsw.h
index de389cb54d28..4071d00978cb 100644
--- a/arch/s390/include/asm/scsw.h
+++ b/arch/s390/include/asm/scsw.h
@@ -1,7 +1,7 @@
1/* 1/*
2 * Helper functions for scsw access. 2 * Helper functions for scsw access.
3 * 3 *
4 * Copyright IBM Corp. 2008,2009 4 * Copyright IBM Corp. 2008, 2009
5 * Author(s): Peter Oberparleiter <peter.oberparleiter@de.ibm.com> 5 * Author(s): Peter Oberparleiter <peter.oberparleiter@de.ibm.com>
6 */ 6 */
7 7
diff --git a/arch/s390/include/asm/setup.h b/arch/s390/include/asm/setup.h
index 40eb2ff88e9e..57e80534375a 100644
--- a/arch/s390/include/asm/setup.h
+++ b/arch/s390/include/asm/setup.h
@@ -1,8 +1,6 @@
1/* 1/*
2 * include/asm-s390/setup.h
3 *
4 * S390 version 2 * S390 version
5 * Copyright IBM Corp. 1999,2010 3 * Copyright IBM Corp. 1999, 2010
6 */ 4 */
7 5
8#ifndef _ASM_S390_SETUP_H 6#ifndef _ASM_S390_SETUP_H
diff --git a/arch/s390/include/asm/shmparam.h b/arch/s390/include/asm/shmparam.h
index c2e0c0508e73..e985182738f8 100644
--- a/arch/s390/include/asm/shmparam.h
+++ b/arch/s390/include/asm/shmparam.h
@@ -1,6 +1,4 @@
1/* 1/*
2 * include/asm-s390/shmparam.h
3 *
4 * S390 version 2 * S390 version
5 * 3 *
6 * Derived from "include/asm-i386/shmparam.h" 4 * Derived from "include/asm-i386/shmparam.h"
diff --git a/arch/s390/include/asm/sigcontext.h b/arch/s390/include/asm/sigcontext.h
index aeb6e0b13329..584787f6ce44 100644
--- a/arch/s390/include/asm/sigcontext.h
+++ b/arch/s390/include/asm/sigcontext.h
@@ -1,8 +1,6 @@
1/* 1/*
2 * include/asm-s390/sigcontext.h
3 *
4 * S390 version 2 * S390 version
5 * Copyright (C) 1999,2000 IBM Deutschland Entwicklung GmbH, IBM Corporation 3 * Copyright IBM Corp. 1999, 2000
6 */ 4 */
7 5
8#ifndef _ASM_S390_SIGCONTEXT_H 6#ifndef _ASM_S390_SIGCONTEXT_H
diff --git a/arch/s390/include/asm/siginfo.h b/arch/s390/include/asm/siginfo.h
index e0ff1ab054be..91fd3e4b70ce 100644
--- a/arch/s390/include/asm/siginfo.h
+++ b/arch/s390/include/asm/siginfo.h
@@ -1,6 +1,4 @@
1/* 1/*
2 * include/asm-s390/siginfo.h
3 *
4 * S390 version 2 * S390 version
5 * 3 *
6 * Derived from "include/asm-i386/siginfo.h" 4 * Derived from "include/asm-i386/siginfo.h"
diff --git a/arch/s390/include/asm/signal.h b/arch/s390/include/asm/signal.h
index cdf5cb2fe03f..6d4d9d1faee9 100644
--- a/arch/s390/include/asm/signal.h
+++ b/arch/s390/include/asm/signal.h
@@ -1,6 +1,4 @@
1/* 1/*
2 * include/asm-s390/signal.h
3 *
4 * S390 version 2 * S390 version
5 * 3 *
6 * Derived from "include/asm-i386/signal.h" 4 * Derived from "include/asm-i386/signal.h"
diff --git a/arch/s390/include/asm/sigp.h b/arch/s390/include/asm/sigp.h
new file mode 100644
index 000000000000..5a87d16d3e7c
--- /dev/null
+++ b/arch/s390/include/asm/sigp.h
@@ -0,0 +1,32 @@
1#ifndef __S390_ASM_SIGP_H
2#define __S390_ASM_SIGP_H
3
4/* SIGP order codes */
5#define SIGP_SENSE 1
6#define SIGP_EXTERNAL_CALL 2
7#define SIGP_EMERGENCY_SIGNAL 3
8#define SIGP_STOP 5
9#define SIGP_RESTART 6
10#define SIGP_STOP_AND_STORE_STATUS 9
11#define SIGP_INITIAL_CPU_RESET 11
12#define SIGP_SET_PREFIX 13
13#define SIGP_STORE_STATUS_AT_ADDRESS 14
14#define SIGP_SET_ARCHITECTURE 18
15#define SIGP_SENSE_RUNNING 21
16
17/* SIGP condition codes */
18#define SIGP_CC_ORDER_CODE_ACCEPTED 0
19#define SIGP_CC_STATUS_STORED 1
20#define SIGP_CC_BUSY 2
21#define SIGP_CC_NOT_OPERATIONAL 3
22
23/* SIGP cpu status bits */
24
25#define SIGP_STATUS_CHECK_STOP 0x00000010UL
26#define SIGP_STATUS_STOPPED 0x00000040UL
27#define SIGP_STATUS_EXT_CALL_PENDING 0x00000080UL
28#define SIGP_STATUS_INVALID_PARAMETER 0x00000100UL
29#define SIGP_STATUS_INCORRECT_STATE 0x00000200UL
30#define SIGP_STATUS_NOT_RUNNING 0x00000400UL
31
32#endif /* __S390_ASM_SIGP_H */
diff --git a/arch/s390/include/asm/smp.h b/arch/s390/include/asm/smp.h
index 0b6f586c1383..a0a8340daafa 100644
--- a/arch/s390/include/asm/smp.h
+++ b/arch/s390/include/asm/smp.h
@@ -1,5 +1,5 @@
1/* 1/*
2 * Copyright IBM Corp. 1999,2012 2 * Copyright IBM Corp. 1999, 2012
3 * Author(s): Denis Joseph Barrow, 3 * Author(s): Denis Joseph Barrow,
4 * Martin Schwidefsky <schwidefsky@de.ibm.com>, 4 * Martin Schwidefsky <schwidefsky@de.ibm.com>,
5 * Heiko Carstens <heiko.carstens@de.ibm.com>, 5 * Heiko Carstens <heiko.carstens@de.ibm.com>,
diff --git a/arch/s390/include/asm/socket.h b/arch/s390/include/asm/socket.h
index c91b720965c0..69718cd6d635 100644
--- a/arch/s390/include/asm/socket.h
+++ b/arch/s390/include/asm/socket.h
@@ -1,6 +1,4 @@
1/* 1/*
2 * include/asm-s390/socket.h
3 *
4 * S390 version 2 * S390 version
5 * 3 *
6 * Derived from "include/asm-i386/socket.h" 4 * Derived from "include/asm-i386/socket.h"
diff --git a/arch/s390/include/asm/spinlock.h b/arch/s390/include/asm/spinlock.h
index fd94dfec8d08..701fe8c59e1f 100644
--- a/arch/s390/include/asm/spinlock.h
+++ b/arch/s390/include/asm/spinlock.h
@@ -1,8 +1,6 @@
1/* 1/*
2 * include/asm-s390/spinlock.h
3 *
4 * S390 version 2 * S390 version
5 * Copyright (C) 1999 IBM Deutschland Entwicklung GmbH, IBM Corporation 3 * Copyright IBM Corp. 1999
6 * Author(s): Martin Schwidefsky (schwidefsky@de.ibm.com) 4 * Author(s): Martin Schwidefsky (schwidefsky@de.ibm.com)
7 * 5 *
8 * Derived from "include/asm-i386/spinlock.h" 6 * Derived from "include/asm-i386/spinlock.h"
diff --git a/arch/s390/include/asm/stat.h b/arch/s390/include/asm/stat.h
index d92959eebb65..b4ca97d91466 100644
--- a/arch/s390/include/asm/stat.h
+++ b/arch/s390/include/asm/stat.h
@@ -1,6 +1,4 @@
1/* 1/*
2 * include/asm-s390/stat.h
3 *
4 * S390 version 2 * S390 version
5 * 3 *
6 * Derived from "include/asm-i386/stat.h" 4 * Derived from "include/asm-i386/stat.h"
diff --git a/arch/s390/include/asm/statfs.h b/arch/s390/include/asm/statfs.h
index 3be7fbd406c8..5acca0a34c20 100644
--- a/arch/s390/include/asm/statfs.h
+++ b/arch/s390/include/asm/statfs.h
@@ -1,6 +1,4 @@
1/* 1/*
2 * include/asm-s390/statfs.h
3 *
4 * S390 version 2 * S390 version
5 * 3 *
6 * Derived from "include/asm-i386/statfs.h" 4 * Derived from "include/asm-i386/statfs.h"
diff --git a/arch/s390/include/asm/string.h b/arch/s390/include/asm/string.h
index 8cc160c9e1cb..1bd1352fa3b5 100644
--- a/arch/s390/include/asm/string.h
+++ b/arch/s390/include/asm/string.h
@@ -1,8 +1,6 @@
1/* 1/*
2 * include/asm-s390/string.h
3 *
4 * S390 version 2 * S390 version
5 * Copyright (C) 1999 IBM Deutschland Entwicklung GmbH, IBM Corporation 3 * Copyright IBM Corp. 1999
6 * Author(s): Martin Schwidefsky (schwidefsky@de.ibm.com), 4 * Author(s): Martin Schwidefsky (schwidefsky@de.ibm.com),
7 */ 5 */
8 6
diff --git a/arch/s390/include/asm/swab.h b/arch/s390/include/asm/swab.h
index a3e4ebb32090..da3bfe5cc161 100644
--- a/arch/s390/include/asm/swab.h
+++ b/arch/s390/include/asm/swab.h
@@ -2,10 +2,8 @@
2#define _S390_SWAB_H 2#define _S390_SWAB_H
3 3
4/* 4/*
5 * include/asm-s390/swab.h
6 *
7 * S390 version 5 * S390 version
8 * Copyright (C) 1999 IBM Deutschland Entwicklung GmbH, IBM Corporation 6 * Copyright IBM Corp. 1999
9 * Author(s): Martin Schwidefsky (schwidefsky@de.ibm.com) 7 * Author(s): Martin Schwidefsky (schwidefsky@de.ibm.com)
10 */ 8 */
11 9
diff --git a/arch/s390/include/asm/sysinfo.h b/arch/s390/include/asm/sysinfo.h
index 79d3d6e2e9c5..282ee36f6162 100644
--- a/arch/s390/include/asm/sysinfo.h
+++ b/arch/s390/include/asm/sysinfo.h
@@ -1,7 +1,7 @@
1/* 1/*
2 * definition for store system information stsi 2 * definition for store system information stsi
3 * 3 *
4 * Copyright IBM Corp. 2001,2008 4 * Copyright IBM Corp. 2001, 2008
5 * 5 *
6 * This program is free software; you can redistribute it and/or modify 6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License (version 2 only) 7 * it under the terms of the GNU General Public License (version 2 only)
diff --git a/arch/s390/include/asm/tape390.h b/arch/s390/include/asm/tape390.h
index 884fba48f1ff..b2bc4bab7929 100644
--- a/arch/s390/include/asm/tape390.h
+++ b/arch/s390/include/asm/tape390.h
@@ -1,10 +1,9 @@
1/************************************************************************* 1/*************************************************************************
2 * 2 *
3 * tape390.h
4 * enables user programs to display messages and control encryption 3 * enables user programs to display messages and control encryption
5 * on s390 tape devices 4 * on s390 tape devices
6 * 5 *
7 * Copyright IBM Corp. 2001,2006 6 * Copyright IBM Corp. 2001, 2006
8 * Author(s): Michael Holzheu <holzheu@de.ibm.com> 7 * Author(s): Michael Holzheu <holzheu@de.ibm.com>
9 * 8 *
10 *************************************************************************/ 9 *************************************************************************/
diff --git a/arch/s390/include/asm/termios.h b/arch/s390/include/asm/termios.h
index bc3a35cefc96..cb9fe2786b81 100644
--- a/arch/s390/include/asm/termios.h
+++ b/arch/s390/include/asm/termios.h
@@ -1,6 +1,4 @@
1/* 1/*
2 * include/asm-s390/termios.h
3 *
4 * S390 version 2 * S390 version
5 * 3 *
6 * Derived from "include/asm-i386/termios.h" 4 * Derived from "include/asm-i386/termios.h"
diff --git a/arch/s390/include/asm/thread_info.h b/arch/s390/include/asm/thread_info.h
index 4e40b25cd060..bb08e2afc5de 100644
--- a/arch/s390/include/asm/thread_info.h
+++ b/arch/s390/include/asm/thread_info.h
@@ -1,8 +1,6 @@
1/* 1/*
2 * include/asm-s390/thread_info.h
3 *
4 * S390 version 2 * S390 version
5 * Copyright (C) IBM Corp. 2002,2006 3 * Copyright IBM Corp. 2002, 2006
6 * Author(s): Martin Schwidefsky (schwidefsky@de.ibm.com) 4 * Author(s): Martin Schwidefsky (schwidefsky@de.ibm.com)
7 */ 5 */
8 6
diff --git a/arch/s390/include/asm/timer.h b/arch/s390/include/asm/timer.h
deleted file mode 100644
index 15d647901e5c..000000000000
--- a/arch/s390/include/asm/timer.h
+++ /dev/null
@@ -1,51 +0,0 @@
1/*
2 * include/asm-s390/timer.h
3 *
4 * (C) Copyright IBM Corp. 2003,2006
5 * Virtual CPU timer
6 *
7 * Author: Jan Glauber (jang@de.ibm.com)
8 */
9
10#ifndef _ASM_S390_TIMER_H
11#define _ASM_S390_TIMER_H
12
13#include <linux/timer.h>
14
15#define VTIMER_MAX_SLICE (0x7ffffffffffff000LL)
16
17struct vtimer_list {
18 struct list_head entry;
19
20 int cpu;
21 __u64 expires;
22 __u64 interval;
23
24 void (*function)(unsigned long);
25 unsigned long data;
26};
27
28/* the vtimer value will wrap after ca. 71 years */
29struct vtimer_queue {
30 struct list_head list;
31 spinlock_t lock;
32 __u64 timer; /* last programmed timer */
33 __u64 elapsed; /* elapsed time of timer expire values */
34 __u64 idle_enter; /* cpu timer on idle enter */
35 __u64 idle_exit; /* cpu timer on idle exit */
36};
37
38extern void init_virt_timer(struct vtimer_list *timer);
39extern void add_virt_timer(void *new);
40extern void add_virt_timer_periodic(void *new);
41extern int mod_virt_timer(struct vtimer_list *timer, __u64 expires);
42extern int mod_virt_timer_periodic(struct vtimer_list *timer, __u64 expires);
43extern int del_virt_timer(struct vtimer_list *timer);
44
45extern void init_cpu_vtimer(void);
46extern void vtime_init(void);
47
48extern void vtime_stop_cpu(void);
49extern void vtime_start_leave(void);
50
51#endif /* _ASM_S390_TIMER_H */
diff --git a/arch/s390/include/asm/timex.h b/arch/s390/include/asm/timex.h
index 239ece9e53c1..fba4d66788a2 100644
--- a/arch/s390/include/asm/timex.h
+++ b/arch/s390/include/asm/timex.h
@@ -1,8 +1,6 @@
1/* 1/*
2 * include/asm-s390/timex.h
3 *
4 * S390 version 2 * S390 version
5 * Copyright (C) 1999 IBM Deutschland Entwicklung GmbH, IBM Corporation 3 * Copyright IBM Corp. 1999
6 * 4 *
7 * Derived from "include/asm-i386/timex.h" 5 * Derived from "include/asm-i386/timex.h"
8 * Copyright (C) 1992, Linus Torvalds 6 * Copyright (C) 1992, Linus Torvalds
diff --git a/arch/s390/include/asm/types.h b/arch/s390/include/asm/types.h
index 6c8c35f8df14..6ba7c2c7217a 100644
--- a/arch/s390/include/asm/types.h
+++ b/arch/s390/include/asm/types.h
@@ -1,6 +1,4 @@
1/* 1/*
2 * include/asm-s390/types.h
3 *
4 * S390 version 2 * S390 version
5 * 3 *
6 * Derived from "include/asm-i386/types.h" 4 * Derived from "include/asm-i386/types.h"
diff --git a/arch/s390/include/asm/uaccess.h b/arch/s390/include/asm/uaccess.h
index 1f3a79bcd262..a8ab18b18b54 100644
--- a/arch/s390/include/asm/uaccess.h
+++ b/arch/s390/include/asm/uaccess.h
@@ -1,8 +1,6 @@
1/* 1/*
2 * include/asm-s390/uaccess.h
3 *
4 * S390 version 2 * S390 version
5 * Copyright (C) 1999,2000 IBM Deutschland Entwicklung GmbH, IBM Corporation 3 * Copyright IBM Corp. 1999, 2000
6 * Author(s): Hartmut Penner (hp@de.ibm.com), 4 * Author(s): Hartmut Penner (hp@de.ibm.com),
7 * Martin Schwidefsky (schwidefsky@de.ibm.com) 5 * Martin Schwidefsky (schwidefsky@de.ibm.com)
8 * 6 *
@@ -381,8 +379,6 @@ clear_user(void __user *to, unsigned long n)
381 return n; 379 return n;
382} 380}
383 381
384extern int memcpy_real(void *, void *, size_t);
385extern void memcpy_absolute(void *, void *, size_t);
386extern int copy_to_user_real(void __user *dest, void *src, size_t count); 382extern int copy_to_user_real(void __user *dest, void *src, size_t count);
387extern int copy_from_user_real(void *dest, void __user *src, size_t count); 383extern int copy_from_user_real(void *dest, void __user *src, size_t count);
388 384
diff --git a/arch/s390/include/asm/ucontext.h b/arch/s390/include/asm/ucontext.h
index cfb874e66c9a..200e06325c6a 100644
--- a/arch/s390/include/asm/ucontext.h
+++ b/arch/s390/include/asm/ucontext.h
@@ -1,6 +1,4 @@
1/* 1/*
2 * include/asm-s390/ucontext.h
3 *
4 * S390 version 2 * S390 version
5 * 3 *
6 * Derived from "include/asm-i386/ucontext.h" 4 * Derived from "include/asm-i386/ucontext.h"
diff --git a/arch/s390/include/asm/unistd.h b/arch/s390/include/asm/unistd.h
index 8a8008fe7b8f..2e37157ba6a9 100644
--- a/arch/s390/include/asm/unistd.h
+++ b/arch/s390/include/asm/unistd.h
@@ -1,6 +1,4 @@
1/* 1/*
2 * include/asm-s390/unistd.h
3 *
4 * S390 version 2 * S390 version
5 * 3 *
6 * Derived from "include/asm-i386/unistd.h" 4 * Derived from "include/asm-i386/unistd.h"
diff --git a/arch/s390/include/asm/user.h b/arch/s390/include/asm/user.h
index 1b050e35fdc6..6ed1d1886333 100644
--- a/arch/s390/include/asm/user.h
+++ b/arch/s390/include/asm/user.h
@@ -1,6 +1,4 @@
1/* 1/*
2 * include/asm-s390/user.h
3 *
4 * S390 version 2 * S390 version
5 * 3 *
6 * Derived from "include/asm-i386/usr.h" 4 * Derived from "include/asm-i386/usr.h"
diff --git a/arch/s390/include/asm/vtimer.h b/arch/s390/include/asm/vtimer.h
new file mode 100644
index 000000000000..bfe25d513ad2
--- /dev/null
+++ b/arch/s390/include/asm/vtimer.h
@@ -0,0 +1,33 @@
1/*
2 * Copyright IBM Corp. 2003, 2012
3 * Virtual CPU timer
4 *
5 * Author(s): Jan Glauber <jan.glauber@de.ibm.com>
6 */
7
8#ifndef _ASM_S390_TIMER_H
9#define _ASM_S390_TIMER_H
10
11#define VTIMER_MAX_SLICE (0x7fffffffffffffffULL)
12
13struct vtimer_list {
14 struct list_head entry;
15 u64 expires;
16 u64 interval;
17 void (*function)(unsigned long);
18 unsigned long data;
19};
20
21extern void init_virt_timer(struct vtimer_list *timer);
22extern void add_virt_timer(struct vtimer_list *timer);
23extern void add_virt_timer_periodic(struct vtimer_list *timer);
24extern int mod_virt_timer(struct vtimer_list *timer, u64 expires);
25extern int mod_virt_timer_periodic(struct vtimer_list *timer, u64 expires);
26extern int del_virt_timer(struct vtimer_list *timer);
27
28extern void init_cpu_vtimer(void);
29extern void vtime_init(void);
30
31extern void vtime_stop_cpu(void);
32
33#endif /* _ASM_S390_TIMER_H */
diff --git a/arch/s390/include/asm/vtoc.h b/arch/s390/include/asm/vtoc.h
index 8406a2b3157a..221419de275e 100644
--- a/arch/s390/include/asm/vtoc.h
+++ b/arch/s390/include/asm/vtoc.h
@@ -1,9 +1,7 @@
1/* 1/*
2 * include/asm-s390/vtoc.h
3 *
4 * This file contains volume label definitions for DASD devices. 2 * This file contains volume label definitions for DASD devices.
5 * 3 *
6 * (C) Copyright IBM Corp. 2005 4 * Copyright IBM Corp. 2005
7 * 5 *
8 * Author(s): Volker Sameske <sameske@de.ibm.com> 6 * Author(s): Volker Sameske <sameske@de.ibm.com>
9 * 7 *
diff --git a/arch/s390/include/asm/zcrypt.h b/arch/s390/include/asm/zcrypt.h
index 00d3bbd44117..e83fc116f5bf 100644
--- a/arch/s390/include/asm/zcrypt.h
+++ b/arch/s390/include/asm/zcrypt.h
@@ -3,7 +3,7 @@
3 * 3 *
4 * zcrypt 2.1.0 (user-visible header) 4 * zcrypt 2.1.0 (user-visible header)
5 * 5 *
6 * Copyright (C) 2001, 2006 IBM Corporation 6 * Copyright IBM Corp. 2001, 2006
7 * Author(s): Robert Burroughs 7 * Author(s): Robert Burroughs
8 * Eric Rossman (edrossma@us.ibm.com) 8 * Eric Rossman (edrossma@us.ibm.com)
9 * 9 *
diff --git a/arch/s390/kernel/asm-offsets.c b/arch/s390/kernel/asm-offsets.c
index 83e6edf5cf17..45ef1a7b08f9 100644
--- a/arch/s390/kernel/asm-offsets.c
+++ b/arch/s390/kernel/asm-offsets.c
@@ -9,7 +9,6 @@
9#include <linux/kbuild.h> 9#include <linux/kbuild.h>
10#include <linux/sched.h> 10#include <linux/sched.h>
11#include <asm/cputime.h> 11#include <asm/cputime.h>
12#include <asm/timer.h>
13#include <asm/vdso.h> 12#include <asm/vdso.h>
14#include <asm/pgtable.h> 13#include <asm/pgtable.h>
15 14
@@ -72,11 +71,10 @@ int main(void)
72 DEFINE(__CLOCK_REALTIME_RES, MONOTONIC_RES_NSEC); 71 DEFINE(__CLOCK_REALTIME_RES, MONOTONIC_RES_NSEC);
73 BLANK(); 72 BLANK();
74 /* idle data offsets */ 73 /* idle data offsets */
75 DEFINE(__IDLE_ENTER, offsetof(struct s390_idle_data, idle_enter)); 74 DEFINE(__CLOCK_IDLE_ENTER, offsetof(struct s390_idle_data, clock_idle_enter));
76 DEFINE(__IDLE_EXIT, offsetof(struct s390_idle_data, idle_exit)); 75 DEFINE(__CLOCK_IDLE_EXIT, offsetof(struct s390_idle_data, clock_idle_exit));
77 /* vtimer queue offsets */ 76 DEFINE(__TIMER_IDLE_ENTER, offsetof(struct s390_idle_data, timer_idle_enter));
78 DEFINE(__VQ_IDLE_ENTER, offsetof(struct vtimer_queue, idle_enter)); 77 DEFINE(__TIMER_IDLE_EXIT, offsetof(struct s390_idle_data, timer_idle_exit));
79 DEFINE(__VQ_IDLE_EXIT, offsetof(struct vtimer_queue, idle_exit));
80 /* lowcore offsets */ 78 /* lowcore offsets */
81 DEFINE(__LC_EXT_PARAMS, offsetof(struct _lowcore, ext_params)); 79 DEFINE(__LC_EXT_PARAMS, offsetof(struct _lowcore, ext_params));
82 DEFINE(__LC_EXT_CPU_ADDR, offsetof(struct _lowcore, ext_cpu_addr)); 80 DEFINE(__LC_EXT_CPU_ADDR, offsetof(struct _lowcore, ext_cpu_addr));
@@ -131,6 +129,8 @@ int main(void)
131 DEFINE(__LC_PANIC_STACK, offsetof(struct _lowcore, panic_stack)); 129 DEFINE(__LC_PANIC_STACK, offsetof(struct _lowcore, panic_stack));
132 DEFINE(__LC_RESTART_STACK, offsetof(struct _lowcore, restart_stack)); 130 DEFINE(__LC_RESTART_STACK, offsetof(struct _lowcore, restart_stack));
133 DEFINE(__LC_RESTART_FN, offsetof(struct _lowcore, restart_fn)); 131 DEFINE(__LC_RESTART_FN, offsetof(struct _lowcore, restart_fn));
132 DEFINE(__LC_RESTART_DATA, offsetof(struct _lowcore, restart_data));
133 DEFINE(__LC_RESTART_SOURCE, offsetof(struct _lowcore, restart_source));
134 DEFINE(__LC_USER_ASCE, offsetof(struct _lowcore, user_asce)); 134 DEFINE(__LC_USER_ASCE, offsetof(struct _lowcore, user_asce));
135 DEFINE(__LC_INT_CLOCK, offsetof(struct _lowcore, int_clock)); 135 DEFINE(__LC_INT_CLOCK, offsetof(struct _lowcore, int_clock));
136 DEFINE(__LC_MCCK_CLOCK, offsetof(struct _lowcore, mcck_clock)); 136 DEFINE(__LC_MCCK_CLOCK, offsetof(struct _lowcore, mcck_clock));
diff --git a/arch/s390/kernel/base.S b/arch/s390/kernel/base.S
index c880ff72db44..797a823a2275 100644
--- a/arch/s390/kernel/base.S
+++ b/arch/s390/kernel/base.S
@@ -1,7 +1,7 @@
1/* 1/*
2 * arch/s390/kernel/base.S 2 * arch/s390/kernel/base.S
3 * 3 *
4 * Copyright IBM Corp. 2006,2007 4 * Copyright IBM Corp. 2006, 2007
5 * Author(s): Heiko Carstens <heiko.carstens@de.ibm.com> 5 * Author(s): Heiko Carstens <heiko.carstens@de.ibm.com>
6 * Michael Holzheu <holzheu@de.ibm.com> 6 * Michael Holzheu <holzheu@de.ibm.com>
7 */ 7 */
@@ -9,6 +9,7 @@
9#include <linux/linkage.h> 9#include <linux/linkage.h>
10#include <asm/asm-offsets.h> 10#include <asm/asm-offsets.h>
11#include <asm/ptrace.h> 11#include <asm/ptrace.h>
12#include <asm/sigp.h>
12 13
13#ifdef CONFIG_64BIT 14#ifdef CONFIG_64BIT
14 15
@@ -100,7 +101,7 @@ ENTRY(diag308_reset)
100.Lrestart_part2: 101.Lrestart_part2:
101 lhi %r0,0 # Load r0 with zero 102 lhi %r0,0 # Load r0 with zero
102 lhi %r1,2 # Use mode 2 = ESAME (dump) 103 lhi %r1,2 # Use mode 2 = ESAME (dump)
103 sigp %r1,%r0,0x12 # Switch to ESAME mode 104 sigp %r1,%r0,SIGP_SET_ARCHITECTURE # Switch to ESAME mode
104 sam64 # Switch to 64 bit addressing mode 105 sam64 # Switch to 64 bit addressing mode
105 larl %r4,.Lctlregs # Restore control registers 106 larl %r4,.Lctlregs # Restore control registers
106 lctlg %c0,%c15,0(%r4) 107 lctlg %c0,%c15,0(%r4)
diff --git a/arch/s390/kernel/bitmap.c b/arch/s390/kernel/bitmap.c
index 3ae4757b006a..102da5e23037 100644
--- a/arch/s390/kernel/bitmap.c
+++ b/arch/s390/kernel/bitmap.c
@@ -2,7 +2,7 @@
2 * Bitmaps for set_bit, clear_bit, test_and_set_bit, ... 2 * Bitmaps for set_bit, clear_bit, test_and_set_bit, ...
3 * See include/asm/{bitops.h|posix_types.h} for details 3 * See include/asm/{bitops.h|posix_types.h} for details
4 * 4 *
5 * Copyright IBM Corp. 1999,2009 5 * Copyright IBM Corp. 1999, 2009
6 * Author(s): Martin Schwidefsky <schwidefsky@de.ibm.com>, 6 * Author(s): Martin Schwidefsky <schwidefsky@de.ibm.com>,
7 */ 7 */
8 8
diff --git a/arch/s390/kernel/compat_exec_domain.c b/arch/s390/kernel/compat_exec_domain.c
index 914d49444f92..765fabdada9f 100644
--- a/arch/s390/kernel/compat_exec_domain.c
+++ b/arch/s390/kernel/compat_exec_domain.c
@@ -1,7 +1,7 @@
1/* 1/*
2 * Support for 32-bit Linux for S390 personality. 2 * Support for 32-bit Linux for S390 personality.
3 * 3 *
4 * Copyright (C) 2000 IBM Deutschland Entwicklung GmbH, IBM Corporation 4 * Copyright IBM Corp. 2000
5 * Author(s): Gerhard Tonn (ton@de.ibm.com) 5 * Author(s): Gerhard Tonn (ton@de.ibm.com)
6 * 6 *
7 * 7 *
diff --git a/arch/s390/kernel/compat_linux.c b/arch/s390/kernel/compat_linux.c
index 65426525d9f2..d1225089a4bb 100644
--- a/arch/s390/kernel/compat_linux.c
+++ b/arch/s390/kernel/compat_linux.c
@@ -1,8 +1,6 @@
1/* 1/*
2 * arch/s390x/kernel/linux32.c
3 *
4 * S390 version 2 * S390 version
5 * Copyright (C) 2000 IBM Deutschland Entwicklung GmbH, IBM Corporation 3 * Copyright IBM Corp. 2000
6 * Author(s): Martin Schwidefsky (schwidefsky@de.ibm.com), 4 * Author(s): Martin Schwidefsky (schwidefsky@de.ibm.com),
7 * Gerhard Tonn (ton@de.ibm.com) 5 * Gerhard Tonn (ton@de.ibm.com)
8 * Thomas Spatzier (tspat@de.ibm.com) 6 * Thomas Spatzier (tspat@de.ibm.com)
diff --git a/arch/s390/kernel/compat_signal.c b/arch/s390/kernel/compat_signal.c
index 3c0c19830c37..a1e8a8694bb7 100644
--- a/arch/s390/kernel/compat_signal.c
+++ b/arch/s390/kernel/compat_signal.c
@@ -1,7 +1,5 @@
1/* 1/*
2 * arch/s390/kernel/compat_signal.c 2 * Copyright IBM Corp. 2000, 2006
3 *
4 * Copyright (C) IBM Corp. 2000,2006
5 * Author(s): Denis Joseph Barrow (djbarrow@de.ibm.com,barrow_dj@yahoo.com) 3 * Author(s): Denis Joseph Barrow (djbarrow@de.ibm.com,barrow_dj@yahoo.com)
6 * Gerhard Tonn (ton@de.ibm.com) 4 * Gerhard Tonn (ton@de.ibm.com)
7 * 5 *
diff --git a/arch/s390/kernel/compat_wrapper.S b/arch/s390/kernel/compat_wrapper.S
index ff605a39cf43..e835d6d5b7fd 100644
--- a/arch/s390/kernel/compat_wrapper.S
+++ b/arch/s390/kernel/compat_wrapper.S
@@ -1,8 +1,7 @@
1/* 1/*
2* arch/s390/kernel/compat_wrapper.S
3* wrapper for 31 bit compatible system calls. 2* wrapper for 31 bit compatible system calls.
4* 3*
5* Copyright (C) IBM Corp. 2000,2006 4* Copyright IBM Corp. 2000, 2006
6* Author(s): Gerhard Tonn (ton@de.ibm.com), 5* Author(s): Gerhard Tonn (ton@de.ibm.com),
7* Thomas Spatzier (tspat@de.ibm.com) 6* Thomas Spatzier (tspat@de.ibm.com)
8*/ 7*/
diff --git a/arch/s390/kernel/cpcmd.c b/arch/s390/kernel/cpcmd.c
index e3dd886e1b32..d7b0c4d27880 100644
--- a/arch/s390/kernel/cpcmd.c
+++ b/arch/s390/kernel/cpcmd.c
@@ -1,8 +1,6 @@
1/* 1/*
2 * arch/s390/kernel/cpcmd.c
3 *
4 * S390 version 2 * S390 version
5 * Copyright IBM Corp. 1999,2007 3 * Copyright IBM Corp. 1999, 2007
6 * Author(s): Martin Schwidefsky (schwidefsky@de.ibm.com), 4 * Author(s): Martin Schwidefsky (schwidefsky@de.ibm.com),
7 * Christian Borntraeger (cborntra@de.ibm.com), 5 * Christian Borntraeger (cborntra@de.ibm.com),
8 */ 6 */
diff --git a/arch/s390/kernel/crash.c b/arch/s390/kernel/crash.c
index 8cc7c9fa64f5..3819153de8bd 100644
--- a/arch/s390/kernel/crash.c
+++ b/arch/s390/kernel/crash.c
@@ -1,7 +1,5 @@
1/* 1/*
2 * arch/s390/kernel/crash.c 2 * Copyright IBM Corp. 2005
3 *
4 * (C) Copyright IBM Corp. 2005
5 * 3 *
6 * Author(s): Heiko Carstens <heiko.carstens@de.ibm.com> 4 * Author(s): Heiko Carstens <heiko.carstens@de.ibm.com>
7 * 5 *
diff --git a/arch/s390/kernel/debug.c b/arch/s390/kernel/debug.c
index 19e5e9eba546..21be961e8a43 100644
--- a/arch/s390/kernel/debug.c
+++ b/arch/s390/kernel/debug.c
@@ -1,5 +1,4 @@
1/* 1/*
2 * arch/s390/kernel/debug.c
3 * S/390 debug facility 2 * S/390 debug facility
4 * 3 *
5 * Copyright IBM Corp. 1999, 2012 4 * Copyright IBM Corp. 1999, 2012
diff --git a/arch/s390/kernel/dis.c b/arch/s390/kernel/dis.c
index 3221c6fca8bb..1f6b428e2762 100644
--- a/arch/s390/kernel/dis.c
+++ b/arch/s390/kernel/dis.c
@@ -1,6 +1,4 @@
1/* 1/*
2 * arch/s390/kernel/dis.c
3 *
4 * Disassemble s390 instructions. 2 * Disassemble s390 instructions.
5 * 3 *
6 * Copyright IBM Corp. 2007 4 * Copyright IBM Corp. 2007
@@ -613,6 +611,7 @@ static struct insn opcode_b2[] = {
613 { "sie", 0x14, INSTR_S_RD }, 611 { "sie", 0x14, INSTR_S_RD },
614 { "pc", 0x18, INSTR_S_RD }, 612 { "pc", 0x18, INSTR_S_RD },
615 { "sac", 0x19, INSTR_S_RD }, 613 { "sac", 0x19, INSTR_S_RD },
614 { "servc", 0x20, INSTR_RRE_RR },
616 { "cfc", 0x1a, INSTR_S_RD }, 615 { "cfc", 0x1a, INSTR_S_RD },
617 { "ipte", 0x21, INSTR_RRE_RR }, 616 { "ipte", 0x21, INSTR_RRE_RR },
618 { "ipm", 0x22, INSTR_RRE_R0 }, 617 { "ipm", 0x22, INSTR_RRE_R0 },
diff --git a/arch/s390/kernel/early.c b/arch/s390/kernel/early.c
index 6684fff17558..bc95a8ebd9cc 100644
--- a/arch/s390/kernel/early.c
+++ b/arch/s390/kernel/early.c
@@ -1,6 +1,4 @@
1/* 1/*
2 * arch/s390/kernel/early.c
3 *
4 * Copyright IBM Corp. 2007, 2009 2 * Copyright IBM Corp. 2007, 2009
5 * Author(s): Hongjie Yang <hongjie@us.ibm.com>, 3 * Author(s): Hongjie Yang <hongjie@us.ibm.com>,
6 * Heiko Carstens <heiko.carstens@de.ibm.com> 4 * Heiko Carstens <heiko.carstens@de.ibm.com>
diff --git a/arch/s390/kernel/ebcdic.c b/arch/s390/kernel/ebcdic.c
index cc0dc609d738..b971c6be6298 100644
--- a/arch/s390/kernel/ebcdic.c
+++ b/arch/s390/kernel/ebcdic.c
@@ -1,10 +1,9 @@
1/* 1/*
2 * arch/s390/kernel/ebcdic.c
3 * ECBDIC -> ASCII, ASCII -> ECBDIC, 2 * ECBDIC -> ASCII, ASCII -> ECBDIC,
4 * upper to lower case (EBCDIC) conversion tables. 3 * upper to lower case (EBCDIC) conversion tables.
5 * 4 *
6 * S390 version 5 * S390 version
7 * Copyright (C) 1999 IBM Deutschland Entwicklung GmbH, IBM Corporation 6 * Copyright IBM Corp. 1999
8 * Author(s): Martin Schwidefsky <schwidefsky@de.ibm.com> 7 * Author(s): Martin Schwidefsky <schwidefsky@de.ibm.com>
9 * Martin Peschke <peschke@fh-brandenburg.de> 8 * Martin Peschke <peschke@fh-brandenburg.de>
10 */ 9 */
diff --git a/arch/s390/kernel/entry.S b/arch/s390/kernel/entry.S
index 1ae93b573d7d..870bad6d56fc 100644
--- a/arch/s390/kernel/entry.S
+++ b/arch/s390/kernel/entry.S
@@ -1,8 +1,7 @@
1/* 1/*
2 * arch/s390/kernel/entry.S
3 * S390 low-level entry points. 2 * S390 low-level entry points.
4 * 3 *
5 * Copyright (C) IBM Corp. 1999,2012 4 * Copyright IBM Corp. 1999, 2012
6 * Author(s): Martin Schwidefsky (schwidefsky@de.ibm.com), 5 * Author(s): Martin Schwidefsky (schwidefsky@de.ibm.com),
7 * Hartmut Penner (hp@de.ibm.com), 6 * Hartmut Penner (hp@de.ibm.com),
8 * Denis Joseph Barrow (djbarrow@de.ibm.com,barrow_dj@yahoo.com), 7 * Denis Joseph Barrow (djbarrow@de.ibm.com,barrow_dj@yahoo.com),
@@ -18,6 +17,7 @@
18#include <asm/asm-offsets.h> 17#include <asm/asm-offsets.h>
19#include <asm/unistd.h> 18#include <asm/unistd.h>
20#include <asm/page.h> 19#include <asm/page.h>
20#include <asm/sigp.h>
21 21
22__PT_R0 = __PT_GPRS 22__PT_R0 = __PT_GPRS
23__PT_R1 = __PT_GPRS + 4 23__PT_R1 = __PT_GPRS + 4
@@ -616,17 +616,13 @@ ext_skip:
616 * Load idle PSW. The second "half" of this function is in cleanup_idle. 616 * Load idle PSW. The second "half" of this function is in cleanup_idle.
617 */ 617 */
618ENTRY(psw_idle) 618ENTRY(psw_idle)
619 st %r4,__SF_EMPTY(%r15) 619 st %r3,__SF_EMPTY(%r15)
620 basr %r1,0 620 basr %r1,0
621 la %r1,psw_idle_lpsw+4-.(%r1) 621 la %r1,psw_idle_lpsw+4-.(%r1)
622 st %r1,__SF_EMPTY+4(%r15) 622 st %r1,__SF_EMPTY+4(%r15)
623 oi __SF_EMPTY+4(%r15),0x80 623 oi __SF_EMPTY+4(%r15),0x80
624 la %r1,.Lvtimer_max-psw_idle_lpsw-4(%r1) 624 stck __CLOCK_IDLE_ENTER(%r2)
625 stck __IDLE_ENTER(%r2) 625 stpt __TIMER_IDLE_ENTER(%r2)
626 ltr %r5,%r5
627 stpt __VQ_IDLE_ENTER(%r3)
628 jz psw_idle_lpsw
629 spt 0(%r1)
630psw_idle_lpsw: 626psw_idle_lpsw:
631 lpsw __SF_EMPTY(%r15) 627 lpsw __SF_EMPTY(%r15)
632 br %r14 628 br %r14
@@ -723,15 +719,17 @@ ENTRY(restart_int_handler)
723 mvc __PT_PSW(8,%r15),__LC_RST_OLD_PSW # store restart old psw 719 mvc __PT_PSW(8,%r15),__LC_RST_OLD_PSW # store restart old psw
724 ahi %r15,-STACK_FRAME_OVERHEAD # create stack frame on stack 720 ahi %r15,-STACK_FRAME_OVERHEAD # create stack frame on stack
725 xc 0(STACK_FRAME_OVERHEAD,%r15),0(%r15) 721 xc 0(STACK_FRAME_OVERHEAD,%r15),0(%r15)
726 lm %r1,%r3,__LC_RESTART_FN # load fn, parm & source cpu 722 l %r1,__LC_RESTART_FN # load fn, parm & source cpu
723 l %r2,__LC_RESTART_DATA
724 l %r3,__LC_RESTART_SOURCE
727 ltr %r3,%r3 # test source cpu address 725 ltr %r3,%r3 # test source cpu address
728 jm 1f # negative -> skip source stop 726 jm 1f # negative -> skip source stop
7290: sigp %r4,%r3,1 # sigp sense to source cpu 7270: sigp %r4,%r3,SIGP_SENSE # sigp sense to source cpu
730 brc 10,0b # wait for status stored 728 brc 10,0b # wait for status stored
7311: basr %r14,%r1 # call function 7291: basr %r14,%r1 # call function
732 stap __SF_EMPTY(%r15) # store cpu address 730 stap __SF_EMPTY(%r15) # store cpu address
733 lh %r3,__SF_EMPTY(%r15) 731 lh %r3,__SF_EMPTY(%r15)
7342: sigp %r4,%r3,5 # sigp stop to current cpu 7322: sigp %r4,%r3,SIGP_STOP # sigp stop to current cpu
735 brc 2,2b 733 brc 2,2b
7363: j 3b 7343: j 3b
737 735
@@ -883,33 +881,28 @@ cleanup_io_restore_insn:
883 881
884cleanup_idle: 882cleanup_idle:
885 # copy interrupt clock & cpu timer 883 # copy interrupt clock & cpu timer
886 mvc __IDLE_EXIT(8,%r2),__LC_INT_CLOCK 884 mvc __CLOCK_IDLE_EXIT(8,%r2),__LC_INT_CLOCK
887 mvc __VQ_IDLE_EXIT(8,%r3),__LC_ASYNC_ENTER_TIMER 885 mvc __TIMER_IDLE_EXIT(8,%r2),__LC_ASYNC_ENTER_TIMER
888 chi %r11,__LC_SAVE_AREA_ASYNC 886 chi %r11,__LC_SAVE_AREA_ASYNC
889 je 0f 887 je 0f
890 mvc __IDLE_EXIT(8,%r2),__LC_MCCK_CLOCK 888 mvc __CLOCK_IDLE_EXIT(8,%r2),__LC_MCCK_CLOCK
891 mvc __VQ_IDLE_EXIT(8,%r3),__LC_MCCK_ENTER_TIMER 889 mvc __TIMER_IDLE_EXIT(8,%r2),__LC_MCCK_ENTER_TIMER
8920: # check if stck has been executed 8900: # check if stck has been executed
893 cl %r9,BASED(cleanup_idle_insn) 891 cl %r9,BASED(cleanup_idle_insn)
894 jhe 1f 892 jhe 1f
895 mvc __IDLE_ENTER(8,%r2),__IDLE_EXIT(%r2) 893 mvc __CLOCK_IDLE_ENTER(8,%r2),__CLOCK_IDLE_EXIT(%r2)
896 mvc __VQ_IDLE_ENTER(8,%r3),__VQ_IDLE_EXIT(%r3) 894 mvc __TIMER_IDLE_ENTER(8,%r2),__TIMER_IDLE_EXIT(%r3)
897 j 2f 8951: # account system time going idle
8981: # check if the cpu timer has been reprogrammed
899 ltr %r5,%r5
900 jz 2f
901 spt __VQ_IDLE_ENTER(%r3)
9022: # account system time going idle
903 lm %r9,%r10,__LC_STEAL_TIMER 896 lm %r9,%r10,__LC_STEAL_TIMER
904 ADD64 %r9,%r10,__IDLE_ENTER(%r2) 897 ADD64 %r9,%r10,__CLOCK_IDLE_ENTER(%r2)
905 SUB64 %r9,%r10,__LC_LAST_UPDATE_CLOCK 898 SUB64 %r9,%r10,__LC_LAST_UPDATE_CLOCK
906 stm %r9,%r10,__LC_STEAL_TIMER 899 stm %r9,%r10,__LC_STEAL_TIMER
907 mvc __LC_LAST_UPDATE_CLOCK(8),__IDLE_EXIT(%r2) 900 mvc __LC_LAST_UPDATE_CLOCK(8),__CLOCK_IDLE_EXIT(%r2)
908 lm %r9,%r10,__LC_SYSTEM_TIMER 901 lm %r9,%r10,__LC_SYSTEM_TIMER
909 ADD64 %r9,%r10,__LC_LAST_UPDATE_TIMER 902 ADD64 %r9,%r10,__LC_LAST_UPDATE_TIMER
910 SUB64 %r9,%r10,__VQ_IDLE_ENTER(%r3) 903 SUB64 %r9,%r10,__TIMER_IDLE_ENTER(%r2)
911 stm %r9,%r10,__LC_SYSTEM_TIMER 904 stm %r9,%r10,__LC_SYSTEM_TIMER
912 mvc __LC_LAST_UPDATE_TIMER(8),__VQ_IDLE_EXIT(%r3) 905 mvc __LC_LAST_UPDATE_TIMER(8),__TIMER_IDLE_EXIT(%r2)
913 # prepare return psw 906 # prepare return psw
914 n %r8,BASED(cleanup_idle_wait) # clear wait state bit 907 n %r8,BASED(cleanup_idle_wait) # clear wait state bit
915 l %r9,24(%r11) # return from psw_idle 908 l %r9,24(%r11) # return from psw_idle
diff --git a/arch/s390/kernel/entry.h b/arch/s390/kernel/entry.h
index f66a229ab0b3..a5f4dc42a5db 100644
--- a/arch/s390/kernel/entry.h
+++ b/arch/s390/kernel/entry.h
@@ -5,7 +5,6 @@
5#include <linux/signal.h> 5#include <linux/signal.h>
6#include <asm/ptrace.h> 6#include <asm/ptrace.h>
7#include <asm/cputime.h> 7#include <asm/cputime.h>
8#include <asm/timer.h>
9 8
10extern void (*pgm_check_table[128])(struct pt_regs *); 9extern void (*pgm_check_table[128])(struct pt_regs *);
11extern void *restart_stack; 10extern void *restart_stack;
@@ -17,8 +16,7 @@ void io_int_handler(void);
17void mcck_int_handler(void); 16void mcck_int_handler(void);
18void restart_int_handler(void); 17void restart_int_handler(void);
19void restart_call_handler(void); 18void restart_call_handler(void);
20void psw_idle(struct s390_idle_data *, struct vtimer_queue *, 19void psw_idle(struct s390_idle_data *, unsigned long);
21 unsigned long, int);
22 20
23asmlinkage long do_syscall_trace_enter(struct pt_regs *regs); 21asmlinkage long do_syscall_trace_enter(struct pt_regs *regs);
24asmlinkage void do_syscall_trace_exit(struct pt_regs *regs); 22asmlinkage void do_syscall_trace_exit(struct pt_regs *regs);
diff --git a/arch/s390/kernel/entry64.S b/arch/s390/kernel/entry64.S
index 229fe1d07749..349b7eeb348a 100644
--- a/arch/s390/kernel/entry64.S
+++ b/arch/s390/kernel/entry64.S
@@ -1,8 +1,7 @@
1/* 1/*
2 * arch/s390/kernel/entry64.S
3 * S390 low-level entry points. 2 * S390 low-level entry points.
4 * 3 *
5 * Copyright (C) IBM Corp. 1999,2012 4 * Copyright IBM Corp. 1999, 2012
6 * Author(s): Martin Schwidefsky (schwidefsky@de.ibm.com), 5 * Author(s): Martin Schwidefsky (schwidefsky@de.ibm.com),
7 * Hartmut Penner (hp@de.ibm.com), 6 * Hartmut Penner (hp@de.ibm.com),
8 * Denis Joseph Barrow (djbarrow@de.ibm.com,barrow_dj@yahoo.com), 7 * Denis Joseph Barrow (djbarrow@de.ibm.com,barrow_dj@yahoo.com),
@@ -18,6 +17,7 @@
18#include <asm/asm-offsets.h> 17#include <asm/asm-offsets.h>
19#include <asm/unistd.h> 18#include <asm/unistd.h>
20#include <asm/page.h> 19#include <asm/page.h>
20#include <asm/sigp.h>
21 21
22__PT_R0 = __PT_GPRS 22__PT_R0 = __PT_GPRS
23__PT_R1 = __PT_GPRS + 8 23__PT_R1 = __PT_GPRS + 8
@@ -642,15 +642,11 @@ ext_skip:
642 * Load idle PSW. The second "half" of this function is in cleanup_idle. 642 * Load idle PSW. The second "half" of this function is in cleanup_idle.
643 */ 643 */
644ENTRY(psw_idle) 644ENTRY(psw_idle)
645 stg %r4,__SF_EMPTY(%r15) 645 stg %r3,__SF_EMPTY(%r15)
646 larl %r1,psw_idle_lpsw+4 646 larl %r1,psw_idle_lpsw+4
647 stg %r1,__SF_EMPTY+8(%r15) 647 stg %r1,__SF_EMPTY+8(%r15)
648 larl %r1,.Lvtimer_max 648 STCK __CLOCK_IDLE_ENTER(%r2)
649 STCK __IDLE_ENTER(%r2) 649 stpt __TIMER_IDLE_ENTER(%r2)
650 ltr %r5,%r5
651 stpt __VQ_IDLE_ENTER(%r3)
652 jz psw_idle_lpsw
653 spt 0(%r1)
654psw_idle_lpsw: 650psw_idle_lpsw:
655 lpswe __SF_EMPTY(%r15) 651 lpswe __SF_EMPTY(%r15)
656 br %r14 652 br %r14
@@ -750,15 +746,17 @@ ENTRY(restart_int_handler)
750 mvc __PT_PSW(16,%r15),__LC_RST_OLD_PSW # store restart old psw 746 mvc __PT_PSW(16,%r15),__LC_RST_OLD_PSW # store restart old psw
751 aghi %r15,-STACK_FRAME_OVERHEAD # create stack frame on stack 747 aghi %r15,-STACK_FRAME_OVERHEAD # create stack frame on stack
752 xc 0(STACK_FRAME_OVERHEAD,%r15),0(%r15) 748 xc 0(STACK_FRAME_OVERHEAD,%r15),0(%r15)
753 lmg %r1,%r3,__LC_RESTART_FN # load fn, parm & source cpu 749 lg %r1,__LC_RESTART_FN # load fn, parm & source cpu
750 lg %r2,__LC_RESTART_DATA
751 lg %r3,__LC_RESTART_SOURCE
754 ltgr %r3,%r3 # test source cpu address 752 ltgr %r3,%r3 # test source cpu address
755 jm 1f # negative -> skip source stop 753 jm 1f # negative -> skip source stop
7560: sigp %r4,%r3,1 # sigp sense to source cpu 7540: sigp %r4,%r3,SIGP_SENSE # sigp sense to source cpu
757 brc 10,0b # wait for status stored 755 brc 10,0b # wait for status stored
7581: basr %r14,%r1 # call function 7561: basr %r14,%r1 # call function
759 stap __SF_EMPTY(%r15) # store cpu address 757 stap __SF_EMPTY(%r15) # store cpu address
760 llgh %r3,__SF_EMPTY(%r15) 758 llgh %r3,__SF_EMPTY(%r15)
7612: sigp %r4,%r3,5 # sigp stop to current cpu 7592: sigp %r4,%r3,SIGP_STOP # sigp stop to current cpu
762 brc 2,2b 760 brc 2,2b
7633: j 3b 7613: j 3b
764 762
@@ -916,33 +914,28 @@ cleanup_io_restore_insn:
916 914
917cleanup_idle: 915cleanup_idle:
918 # copy interrupt clock & cpu timer 916 # copy interrupt clock & cpu timer
919 mvc __IDLE_EXIT(8,%r2),__LC_INT_CLOCK 917 mvc __CLOCK_IDLE_EXIT(8,%r2),__LC_INT_CLOCK
920 mvc __VQ_IDLE_EXIT(8,%r3),__LC_ASYNC_ENTER_TIMER 918 mvc __TIMER_IDLE_EXIT(8,%r2),__LC_ASYNC_ENTER_TIMER
921 cghi %r11,__LC_SAVE_AREA_ASYNC 919 cghi %r11,__LC_SAVE_AREA_ASYNC
922 je 0f 920 je 0f
923 mvc __IDLE_EXIT(8,%r2),__LC_MCCK_CLOCK 921 mvc __CLOCK_IDLE_EXIT(8,%r2),__LC_MCCK_CLOCK
924 mvc __VQ_IDLE_EXIT(8,%r3),__LC_MCCK_ENTER_TIMER 922 mvc __TIMER_IDLE_EXIT(8,%r2),__LC_MCCK_ENTER_TIMER
9250: # check if stck & stpt have been executed 9230: # check if stck & stpt have been executed
926 clg %r9,BASED(cleanup_idle_insn) 924 clg %r9,BASED(cleanup_idle_insn)
927 jhe 1f 925 jhe 1f
928 mvc __IDLE_ENTER(8,%r2),__IDLE_EXIT(%r2) 926 mvc __CLOCK_IDLE_ENTER(8,%r2),__CLOCK_IDLE_EXIT(%r2)
929 mvc __VQ_IDLE_ENTER(8,%r3),__VQ_IDLE_EXIT(%r3) 927 mvc __TIMER_IDLE_ENTER(8,%r2),__TIMER_IDLE_EXIT(%r2)
930 j 2f 9281: # account system time going idle
9311: # check if the cpu timer has been reprogrammed
932 ltr %r5,%r5
933 jz 2f
934 spt __VQ_IDLE_ENTER(%r3)
9352: # account system time going idle
936 lg %r9,__LC_STEAL_TIMER 929 lg %r9,__LC_STEAL_TIMER
937 alg %r9,__IDLE_ENTER(%r2) 930 alg %r9,__CLOCK_IDLE_ENTER(%r2)
938 slg %r9,__LC_LAST_UPDATE_CLOCK 931 slg %r9,__LC_LAST_UPDATE_CLOCK
939 stg %r9,__LC_STEAL_TIMER 932 stg %r9,__LC_STEAL_TIMER
940 mvc __LC_LAST_UPDATE_CLOCK(8),__IDLE_EXIT(%r2) 933 mvc __LC_LAST_UPDATE_CLOCK(8),__CLOCK_IDLE_EXIT(%r2)
941 lg %r9,__LC_SYSTEM_TIMER 934 lg %r9,__LC_SYSTEM_TIMER
942 alg %r9,__LC_LAST_UPDATE_TIMER 935 alg %r9,__LC_LAST_UPDATE_TIMER
943 slg %r9,__VQ_IDLE_ENTER(%r3) 936 slg %r9,__TIMER_IDLE_ENTER(%r2)
944 stg %r9,__LC_SYSTEM_TIMER 937 stg %r9,__LC_SYSTEM_TIMER
945 mvc __LC_LAST_UPDATE_TIMER(8),__VQ_IDLE_EXIT(%r3) 938 mvc __LC_LAST_UPDATE_TIMER(8),__TIMER_IDLE_EXIT(%r2)
946 # prepare return psw 939 # prepare return psw
947 nihh %r8,0xfffd # clear wait state bit 940 nihh %r8,0xfffd # clear wait state bit
948 lg %r9,48(%r11) # return from psw_idle 941 lg %r9,48(%r11) # return from psw_idle
@@ -958,8 +951,6 @@ cleanup_idle_insn:
958 .quad __critical_start 951 .quad __critical_start
959.Lcritical_length: 952.Lcritical_length:
960 .quad __critical_end - __critical_start 953 .quad __critical_end - __critical_start
961.Lvtimer_max:
962 .quad 0x7fffffffffffffff
963 954
964 955
965#if defined(CONFIG_KVM) || defined(CONFIG_KVM_MODULE) 956#if defined(CONFIG_KVM) || defined(CONFIG_KVM_MODULE)
@@ -974,7 +965,6 @@ ENTRY(sie64a)
974 stg %r3,__SF_EMPTY+8(%r15) # save guest register save area 965 stg %r3,__SF_EMPTY+8(%r15) # save guest register save area
975 xc __SF_EMPTY+16(8,%r15),__SF_EMPTY+16(%r15) # host id == 0 966 xc __SF_EMPTY+16(8,%r15),__SF_EMPTY+16(%r15) # host id == 0
976 lmg %r0,%r13,0(%r3) # load guest gprs 0-13 967 lmg %r0,%r13,0(%r3) # load guest gprs 0-13
977 lg %r14,__LC_THREAD_INFO # pointer thread_info struct
978sie_loop: 968sie_loop:
979 lg %r14,__LC_THREAD_INFO # pointer thread_info struct 969 lg %r14,__LC_THREAD_INFO # pointer thread_info struct
980 tm __TI_flags+7(%r14),_TIF_EXIT_SIE 970 tm __TI_flags+7(%r14),_TIF_EXIT_SIE
diff --git a/arch/s390/kernel/head.S b/arch/s390/kernel/head.S
index 4939d15375aa..805b6686b641 100644
--- a/arch/s390/kernel/head.S
+++ b/arch/s390/kernel/head.S
@@ -1,5 +1,5 @@
1/* 1/*
2 * Copyright IBM Corp. 1999,2010 2 * Copyright IBM Corp. 1999, 2010
3 * 3 *
4 * Author(s): Hartmut Penner <hp@de.ibm.com> 4 * Author(s): Hartmut Penner <hp@de.ibm.com>
5 * Martin Schwidefsky <schwidefsky@de.ibm.com> 5 * Martin Schwidefsky <schwidefsky@de.ibm.com>
diff --git a/arch/s390/kernel/head31.S b/arch/s390/kernel/head31.S
index d3f1ab7d90ad..a1372ae24ae1 100644
--- a/arch/s390/kernel/head31.S
+++ b/arch/s390/kernel/head31.S
@@ -1,7 +1,5 @@
1/* 1/*
2 * arch/s390/kernel/head31.S 2 * Copyright IBM Corp. 2005, 2010
3 *
4 * Copyright (C) IBM Corp. 2005,2010
5 * 3 *
6 * Author(s): Hartmut Penner <hp@de.ibm.com> 4 * Author(s): Hartmut Penner <hp@de.ibm.com>
7 * Martin Schwidefsky <schwidefsky@de.ibm.com> 5 * Martin Schwidefsky <schwidefsky@de.ibm.com>
diff --git a/arch/s390/kernel/head64.S b/arch/s390/kernel/head64.S
index 99348c0eaa41..c108af28bbe8 100644
--- a/arch/s390/kernel/head64.S
+++ b/arch/s390/kernel/head64.S
@@ -1,7 +1,5 @@
1/* 1/*
2 * arch/s390/kernel/head64.S 2 * Copyright IBM Corp. 1999, 2010
3 *
4 * Copyright (C) IBM Corp. 1999,2010
5 * 3 *
6 * Author(s): Hartmut Penner <hp@de.ibm.com> 4 * Author(s): Hartmut Penner <hp@de.ibm.com>
7 * Martin Schwidefsky <schwidefsky@de.ibm.com> 5 * Martin Schwidefsky <schwidefsky@de.ibm.com>
diff --git a/arch/s390/kernel/head_kdump.S b/arch/s390/kernel/head_kdump.S
index 796c976b5fdc..acaaaf4b7055 100644
--- a/arch/s390/kernel/head_kdump.S
+++ b/arch/s390/kernel/head_kdump.S
@@ -5,6 +5,8 @@
5 * Author(s): Michael Holzheu <holzheu@linux.vnet.ibm.com> 5 * Author(s): Michael Holzheu <holzheu@linux.vnet.ibm.com>
6 */ 6 */
7 7
8#include <asm/sigp.h>
9
8#define DATAMOVER_ADDR 0x4000 10#define DATAMOVER_ADDR 0x4000
9#define COPY_PAGE_ADDR 0x6000 11#define COPY_PAGE_ADDR 0x6000
10 12
@@ -19,7 +21,7 @@
19.align 2 21.align 2
20.Lep_startup_kdump: 22.Lep_startup_kdump:
21 lhi %r1,2 # mode 2 = esame (dump) 23 lhi %r1,2 # mode 2 = esame (dump)
22 sigp %r1,%r0,0x12 # Switch to esame mode 24 sigp %r1,%r0,SIGP_SET_ARCHITECTURE # Switch to esame mode
23 sam64 # Switch to 64 bit addressing 25 sam64 # Switch to 64 bit addressing
24 basr %r13,0 26 basr %r13,0
25.Lbase: 27.Lbase:
@@ -88,7 +90,7 @@ startup_kdump_relocated:
88 sam31 # Switch to 31 bit addr mode 90 sam31 # Switch to 31 bit addr mode
89 sr %r1,%r1 # Erase register r1 91 sr %r1,%r1 # Erase register r1
90 sr %r2,%r2 # Erase register r2 92 sr %r2,%r2 # Erase register r2
91 sigp %r1,%r2,0x12 # Switch to 31 bit arch mode 93 sigp %r1,%r2,SIGP_SET_ARCHITECTURE # Switch to 31 bit arch mode
92 lpsw 0 # Start new kernel... 94 lpsw 0 # Start new kernel...
93.align 8 95.align 8
94.Lrestart_psw: 96.Lrestart_psw:
diff --git a/arch/s390/kernel/ipl.c b/arch/s390/kernel/ipl.c
index 2f6cfd460cb6..e64d141555ce 100644
--- a/arch/s390/kernel/ipl.c
+++ b/arch/s390/kernel/ipl.c
@@ -1,8 +1,7 @@
1/* 1/*
2 * arch/s390/kernel/ipl.c
3 * ipl/reipl/dump support for Linux on s390. 2 * ipl/reipl/dump support for Linux on s390.
4 * 3 *
5 * Copyright IBM Corp. 2005,2012 4 * Copyright IBM Corp. 2005, 2012
6 * Author(s): Michael Holzheu <holzheu@de.ibm.com> 5 * Author(s): Michael Holzheu <holzheu@de.ibm.com>
7 * Heiko Carstens <heiko.carstens@de.ibm.com> 6 * Heiko Carstens <heiko.carstens@de.ibm.com>
8 * Volker Sameske <sameske@de.ibm.com> 7 * Volker Sameske <sameske@de.ibm.com>
@@ -1528,15 +1527,12 @@ static struct shutdown_action __refdata dump_action = {
1528 1527
1529static void dump_reipl_run(struct shutdown_trigger *trigger) 1528static void dump_reipl_run(struct shutdown_trigger *trigger)
1530{ 1529{
1531 struct { 1530 unsigned long ipib = (unsigned long) reipl_block_actual;
1532 void *addr; 1531 unsigned int csum;
1533 __u32 csum;
1534 } __packed ipib;
1535 1532
1536 ipib.csum = csum_partial(reipl_block_actual, 1533 csum = csum_partial(reipl_block_actual, reipl_block_actual->hdr.len, 0);
1537 reipl_block_actual->hdr.len, 0); 1534 mem_assign_absolute(S390_lowcore.ipib, ipib);
1538 ipib.addr = reipl_block_actual; 1535 mem_assign_absolute(S390_lowcore.ipib_checksum, csum);
1539 memcpy_absolute(&S390_lowcore.ipib, &ipib, sizeof(ipib));
1540 dump_run(trigger); 1536 dump_run(trigger);
1541} 1537}
1542 1538
diff --git a/arch/s390/kernel/irq.c b/arch/s390/kernel/irq.c
index b4f4a7133fa1..dd7630d8aab7 100644
--- a/arch/s390/kernel/irq.c
+++ b/arch/s390/kernel/irq.c
@@ -1,5 +1,5 @@
1/* 1/*
2 * Copyright IBM Corp. 2004,2011 2 * Copyright IBM Corp. 2004, 2011
3 * Author(s): Martin Schwidefsky <schwidefsky@de.ibm.com>, 3 * Author(s): Martin Schwidefsky <schwidefsky@de.ibm.com>,
4 * Holger Smolinski <Holger.Smolinski@de.ibm.com>, 4 * Holger Smolinski <Holger.Smolinski@de.ibm.com>,
5 * Thomas Spatzier <tspat@de.ibm.com>, 5 * Thomas Spatzier <tspat@de.ibm.com>,
diff --git a/arch/s390/kernel/kprobes.c b/arch/s390/kernel/kprobes.c
index 64b761aef004..8aa634f5944b 100644
--- a/arch/s390/kernel/kprobes.c
+++ b/arch/s390/kernel/kprobes.c
@@ -15,7 +15,7 @@
15 * along with this program; if not, write to the Free Software 15 * along with this program; if not, write to the Free Software
16 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 16 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
17 * 17 *
18 * Copyright (C) IBM Corporation, 2002, 2006 18 * Copyright IBM Corp. 2002, 2006
19 * 19 *
20 * s390 port, used ppc64 as template. Mike Grundy <grundym@us.ibm.com> 20 * s390 port, used ppc64 as template. Mike Grundy <grundym@us.ibm.com>
21 */ 21 */
diff --git a/arch/s390/kernel/lgr.c b/arch/s390/kernel/lgr.c
index 87f080b17af1..eca94e74d19a 100644
--- a/arch/s390/kernel/lgr.c
+++ b/arch/s390/kernel/lgr.c
@@ -45,7 +45,7 @@ struct lgr_info {
45/* 45/*
46 * LGR globals 46 * LGR globals
47 */ 47 */
48static void *lgr_page; 48static char lgr_page[PAGE_SIZE] __aligned(PAGE_SIZE);
49static struct lgr_info lgr_info_last; 49static struct lgr_info lgr_info_last;
50static struct lgr_info lgr_info_cur; 50static struct lgr_info lgr_info_cur;
51static struct debug_info *lgr_dbf; 51static struct debug_info *lgr_dbf;
@@ -74,7 +74,7 @@ static void cpascii(char *dst, char *src, int size)
74 */ 74 */
75static void lgr_stsi_1_1_1(struct lgr_info *lgr_info) 75static void lgr_stsi_1_1_1(struct lgr_info *lgr_info)
76{ 76{
77 struct sysinfo_1_1_1 *si = lgr_page; 77 struct sysinfo_1_1_1 *si = (void *) lgr_page;
78 78
79 if (stsi(si, 1, 1, 1) == -ENOSYS) 79 if (stsi(si, 1, 1, 1) == -ENOSYS)
80 return; 80 return;
@@ -91,7 +91,7 @@ static void lgr_stsi_1_1_1(struct lgr_info *lgr_info)
91 */ 91 */
92static void lgr_stsi_2_2_2(struct lgr_info *lgr_info) 92static void lgr_stsi_2_2_2(struct lgr_info *lgr_info)
93{ 93{
94 struct sysinfo_2_2_2 *si = lgr_page; 94 struct sysinfo_2_2_2 *si = (void *) lgr_page;
95 95
96 if (stsi(si, 2, 2, 2) == -ENOSYS) 96 if (stsi(si, 2, 2, 2) == -ENOSYS)
97 return; 97 return;
@@ -105,7 +105,7 @@ static void lgr_stsi_2_2_2(struct lgr_info *lgr_info)
105 */ 105 */
106static void lgr_stsi_3_2_2(struct lgr_info *lgr_info) 106static void lgr_stsi_3_2_2(struct lgr_info *lgr_info)
107{ 107{
108 struct sysinfo_3_2_2 *si = lgr_page; 108 struct sysinfo_3_2_2 *si = (void *) lgr_page;
109 int i; 109 int i;
110 110
111 if (stsi(si, 3, 2, 2) == -ENOSYS) 111 if (stsi(si, 3, 2, 2) == -ENOSYS)
@@ -183,14 +183,9 @@ static void lgr_timer_set(void)
183 */ 183 */
184static int __init lgr_init(void) 184static int __init lgr_init(void)
185{ 185{
186 lgr_page = (void *) __get_free_pages(GFP_KERNEL, 0);
187 if (!lgr_page)
188 return -ENOMEM;
189 lgr_dbf = debug_register("lgr", 1, 1, sizeof(struct lgr_info)); 186 lgr_dbf = debug_register("lgr", 1, 1, sizeof(struct lgr_info));
190 if (!lgr_dbf) { 187 if (!lgr_dbf)
191 free_page((unsigned long) lgr_page);
192 return -ENOMEM; 188 return -ENOMEM;
193 }
194 debug_register_view(lgr_dbf, &debug_hex_ascii_view); 189 debug_register_view(lgr_dbf, &debug_hex_ascii_view);
195 lgr_info_get(&lgr_info_last); 190 lgr_info_get(&lgr_info_last);
196 debug_event(lgr_dbf, 1, &lgr_info_last, sizeof(lgr_info_last)); 191 debug_event(lgr_dbf, 1, &lgr_info_last, sizeof(lgr_info_last));
diff --git a/arch/s390/kernel/machine_kexec.c b/arch/s390/kernel/machine_kexec.c
index cdacf8f91b2d..493304bdf1c7 100644
--- a/arch/s390/kernel/machine_kexec.c
+++ b/arch/s390/kernel/machine_kexec.c
@@ -1,7 +1,5 @@
1/* 1/*
2 * arch/s390/kernel/machine_kexec.c 2 * Copyright IBM Corp. 2005, 2011
3 *
4 * Copyright IBM Corp. 2005,2011
5 * 3 *
6 * Author(s): Rolf Adelsberger, 4 * Author(s): Rolf Adelsberger,
7 * Heiko Carstens <heiko.carstens@de.ibm.com> 5 * Heiko Carstens <heiko.carstens@de.ibm.com>
diff --git a/arch/s390/kernel/mcount.S b/arch/s390/kernel/mcount.S
index 7e2c38ba1373..4567ce20d900 100644
--- a/arch/s390/kernel/mcount.S
+++ b/arch/s390/kernel/mcount.S
@@ -1,5 +1,5 @@
1/* 1/*
2 * Copyright IBM Corp. 2008,2009 2 * Copyright IBM Corp. 2008, 2009
3 * 3 *
4 * Author(s): Heiko Carstens <heiko.carstens@de.ibm.com>, 4 * Author(s): Heiko Carstens <heiko.carstens@de.ibm.com>,
5 * 5 *
diff --git a/arch/s390/kernel/mcount64.S b/arch/s390/kernel/mcount64.S
index f70cadec68fc..11332193db30 100644
--- a/arch/s390/kernel/mcount64.S
+++ b/arch/s390/kernel/mcount64.S
@@ -1,5 +1,5 @@
1/* 1/*
2 * Copyright IBM Corp. 2008,2009 2 * Copyright IBM Corp. 2008, 2009
3 * 3 *
4 * Author(s): Heiko Carstens <heiko.carstens@de.ibm.com>, 4 * Author(s): Heiko Carstens <heiko.carstens@de.ibm.com>,
5 * 5 *
diff --git a/arch/s390/kernel/module.c b/arch/s390/kernel/module.c
index dfcb3436bad0..46412b1d7e1e 100644
--- a/arch/s390/kernel/module.c
+++ b/arch/s390/kernel/module.c
@@ -1,9 +1,8 @@
1/* 1/*
2 * arch/s390/kernel/module.c - Kernel module help for s390. 2 * Kernel module help for s390.
3 * 3 *
4 * S390 version 4 * S390 version
5 * Copyright (C) 2002, 2003 IBM Deutschland Entwicklung GmbH, 5 * Copyright IBM Corp. 2002, 2003
6 * IBM Corporation
7 * Author(s): Arnd Bergmann (arndb@de.ibm.com) 6 * Author(s): Arnd Bergmann (arndb@de.ibm.com)
8 * Martin Schwidefsky (schwidefsky@de.ibm.com) 7 * Martin Schwidefsky (schwidefsky@de.ibm.com)
9 * 8 *
diff --git a/arch/s390/kernel/nmi.c b/arch/s390/kernel/nmi.c
index 8c372ca61350..a6daa5c5cdb0 100644
--- a/arch/s390/kernel/nmi.c
+++ b/arch/s390/kernel/nmi.c
@@ -1,7 +1,7 @@
1/* 1/*
2 * Machine check handler 2 * Machine check handler
3 * 3 *
4 * Copyright IBM Corp. 2000,2009 4 * Copyright IBM Corp. 2000, 2009
5 * Author(s): Ingo Adlung <adlung@de.ibm.com>, 5 * Author(s): Ingo Adlung <adlung@de.ibm.com>,
6 * Martin Schwidefsky <schwidefsky@de.ibm.com>, 6 * Martin Schwidefsky <schwidefsky@de.ibm.com>,
7 * Cornelia Huck <cornelia.huck@de.ibm.com>, 7 * Cornelia Huck <cornelia.huck@de.ibm.com>,
diff --git a/arch/s390/kernel/os_info.c b/arch/s390/kernel/os_info.c
index 95fa5ac6c4ce..46480d81df00 100644
--- a/arch/s390/kernel/os_info.c
+++ b/arch/s390/kernel/os_info.c
@@ -60,7 +60,7 @@ void __init os_info_init(void)
60 os_info.version_minor = OS_INFO_VERSION_MINOR; 60 os_info.version_minor = OS_INFO_VERSION_MINOR;
61 os_info.magic = OS_INFO_MAGIC; 61 os_info.magic = OS_INFO_MAGIC;
62 os_info.csum = os_info_csum(&os_info); 62 os_info.csum = os_info_csum(&os_info);
63 memcpy_absolute(&S390_lowcore.os_info, &ptr, sizeof(ptr)); 63 mem_assign_absolute(S390_lowcore.os_info, (unsigned long) ptr);
64} 64}
65 65
66#ifdef CONFIG_CRASH_DUMP 66#ifdef CONFIG_CRASH_DUMP
diff --git a/arch/s390/kernel/process.c b/arch/s390/kernel/process.c
index 60055cefdd04..733175373a4c 100644
--- a/arch/s390/kernel/process.c
+++ b/arch/s390/kernel/process.c
@@ -1,7 +1,7 @@
1/* 1/*
2 * This file handles the architecture dependent parts of process handling. 2 * This file handles the architecture dependent parts of process handling.
3 * 3 *
4 * Copyright IBM Corp. 1999,2009 4 * Copyright IBM Corp. 1999, 2009
5 * Author(s): Martin Schwidefsky <schwidefsky@de.ibm.com>, 5 * Author(s): Martin Schwidefsky <schwidefsky@de.ibm.com>,
6 * Hartmut Penner <hp@de.ibm.com>, 6 * Hartmut Penner <hp@de.ibm.com>,
7 * Denis Joseph Barrow, 7 * Denis Joseph Barrow,
@@ -25,8 +25,8 @@
25#include <linux/module.h> 25#include <linux/module.h>
26#include <asm/io.h> 26#include <asm/io.h>
27#include <asm/processor.h> 27#include <asm/processor.h>
28#include <asm/vtimer.h>
28#include <asm/irq.h> 29#include <asm/irq.h>
29#include <asm/timer.h>
30#include <asm/nmi.h> 30#include <asm/nmi.h>
31#include <asm/smp.h> 31#include <asm/smp.h>
32#include <asm/switch_to.h> 32#include <asm/switch_to.h>
diff --git a/arch/s390/kernel/processor.c b/arch/s390/kernel/processor.c
index 6e0073e43f54..572d4c9cb33b 100644
--- a/arch/s390/kernel/processor.c
+++ b/arch/s390/kernel/processor.c
@@ -1,6 +1,4 @@
1/* 1/*
2 * arch/s390/kernel/processor.c
3 *
4 * Copyright IBM Corp. 2008 2 * Copyright IBM Corp. 2008
5 * Author(s): Martin Schwidefsky (schwidefsky@de.ibm.com) 3 * Author(s): Martin Schwidefsky (schwidefsky@de.ibm.com)
6 */ 4 */
@@ -25,13 +23,15 @@ static DEFINE_PER_CPU(struct cpuid, cpu_id);
25 */ 23 */
26void __cpuinit cpu_init(void) 24void __cpuinit cpu_init(void)
27{ 25{
28 struct cpuid *id = &per_cpu(cpu_id, smp_processor_id()); 26 struct s390_idle_data *idle = &__get_cpu_var(s390_idle);
27 struct cpuid *id = &__get_cpu_var(cpu_id);
29 28
30 get_cpu_id(id); 29 get_cpu_id(id);
31 atomic_inc(&init_mm.mm_count); 30 atomic_inc(&init_mm.mm_count);
32 current->active_mm = &init_mm; 31 current->active_mm = &init_mm;
33 BUG_ON(current->mm); 32 BUG_ON(current->mm);
34 enter_lazy_tlb(&init_mm, current); 33 enter_lazy_tlb(&init_mm, current);
34 memset(idle, 0, sizeof(*idle));
35} 35}
36 36
37/* 37/*
diff --git a/arch/s390/kernel/ptrace.c b/arch/s390/kernel/ptrace.c
index 4993e689b2c2..f4eb37680b91 100644
--- a/arch/s390/kernel/ptrace.c
+++ b/arch/s390/kernel/ptrace.c
@@ -1,7 +1,7 @@
1/* 1/*
2 * Ptrace user space interface. 2 * Ptrace user space interface.
3 * 3 *
4 * Copyright IBM Corp. 1999,2010 4 * Copyright IBM Corp. 1999, 2010
5 * Author(s): Denis Joseph Barrow 5 * Author(s): Denis Joseph Barrow
6 * Martin Schwidefsky (schwidefsky@de.ibm.com) 6 * Martin Schwidefsky (schwidefsky@de.ibm.com)
7 */ 7 */
diff --git a/arch/s390/kernel/reipl.S b/arch/s390/kernel/reipl.S
index ad67c214be04..dd8016b0477e 100644
--- a/arch/s390/kernel/reipl.S
+++ b/arch/s390/kernel/reipl.S
@@ -1,13 +1,12 @@
1/* 1/*
2 * arch/s390/kernel/reipl.S
3 *
4 * S390 version 2 * S390 version
5 * Copyright (C) 2000 IBM Deutschland Entwicklung GmbH, IBM Corporation 3 * Copyright IBM Corp. 2000
6 * Author(s): Holger Smolinski (Holger.Smolinski@de.ibm.com) 4 * Author(s): Holger Smolinski (Holger.Smolinski@de.ibm.com)
7 */ 5 */
8 6
9#include <linux/linkage.h> 7#include <linux/linkage.h>
10#include <asm/asm-offsets.h> 8#include <asm/asm-offsets.h>
9#include <asm/sigp.h>
11 10
12# 11#
13# store_status: Empty implementation until kdump is supported on 31 bit 12# store_status: Empty implementation until kdump is supported on 31 bit
@@ -60,7 +59,7 @@ ENTRY(do_reipl_asm)
60 bas %r14,.Ldisab-.Lpg0(%r13) 59 bas %r14,.Ldisab-.Lpg0(%r13)
61.L003: st %r1,__LC_SUBCHANNEL_ID 60.L003: st %r1,__LC_SUBCHANNEL_ID
62 lpsw 0 61 lpsw 0
63 sigp 0,0,0(6) 62 sigp 0,0,SIGP_RESTART
64.Ldisab: st %r14,.Ldispsw+4-.Lpg0(%r13) 63.Ldisab: st %r14,.Ldispsw+4-.Lpg0(%r13)
65 lpsw .Ldispsw-.Lpg0(%r13) 64 lpsw .Ldispsw-.Lpg0(%r13)
66 .align 8 65 .align 8
diff --git a/arch/s390/kernel/reipl64.S b/arch/s390/kernel/reipl64.S
index 36b32658fb24..dc3b1273c4dc 100644
--- a/arch/s390/kernel/reipl64.S
+++ b/arch/s390/kernel/reipl64.S
@@ -1,11 +1,12 @@
1/* 1/*
2 * Copyright IBM Corp 2000,2011 2 * Copyright IBM Corp 2000, 2011
3 * Author(s): Holger Smolinski <Holger.Smolinski@de.ibm.com>, 3 * Author(s): Holger Smolinski <Holger.Smolinski@de.ibm.com>,
4 * Denis Joseph Barrow, 4 * Denis Joseph Barrow,
5 */ 5 */
6 6
7#include <linux/linkage.h> 7#include <linux/linkage.h>
8#include <asm/asm-offsets.h> 8#include <asm/asm-offsets.h>
9#include <asm/sigp.h>
9 10
10# 11#
11# store_status 12# store_status
@@ -106,7 +107,7 @@ ENTRY(do_reipl_asm)
106.L003: st %r1,__LC_SUBCHANNEL_ID 107.L003: st %r1,__LC_SUBCHANNEL_ID
107 lhi %r1,0 # mode 0 = esa 108 lhi %r1,0 # mode 0 = esa
108 slr %r0,%r0 # set cpuid to zero 109 slr %r0,%r0 # set cpuid to zero
109 sigp %r1,%r0,0x12 # switch to esa mode 110 sigp %r1,%r0,SIGP_SET_ARCHITECTURE # switch to esa mode
110 lpsw 0 111 lpsw 0
111.Ldisab: sll %r14,1 112.Ldisab: sll %r14,1
112 srl %r14,1 # need to kill hi bit to avoid specification exceptions. 113 srl %r14,1 # need to kill hi bit to avoid specification exceptions.
diff --git a/arch/s390/kernel/relocate_kernel.S b/arch/s390/kernel/relocate_kernel.S
index c91d70aede91..f4e6f20e117a 100644
--- a/arch/s390/kernel/relocate_kernel.S
+++ b/arch/s390/kernel/relocate_kernel.S
@@ -1,7 +1,5 @@
1/* 1/*
2 * arch/s390/kernel/relocate_kernel.S 2 * Copyright IBM Corp. 2005
3 *
4 * (C) Copyright IBM Corp. 2005
5 * 3 *
6 * Author(s): Rolf Adelsberger, 4 * Author(s): Rolf Adelsberger,
7 * Heiko Carstens <heiko.carstens@de.ibm.com> 5 * Heiko Carstens <heiko.carstens@de.ibm.com>
@@ -9,6 +7,7 @@
9 */ 7 */
10 8
11#include <linux/linkage.h> 9#include <linux/linkage.h>
10#include <asm/sigp.h>
12 11
13/* 12/*
14 * moves the new kernel to its destination... 13 * moves the new kernel to its destination...
@@ -93,7 +92,7 @@ ENTRY(relocate_kernel)
93 .no_diag308: 92 .no_diag308:
94 sr %r1,%r1 # clear %r1 93 sr %r1,%r1 # clear %r1
95 sr %r2,%r2 # clear %r2 94 sr %r2,%r2 # clear %r2
96 sigp %r1,%r2,0x12 # set cpuid to zero 95 sigp %r1,%r2,SIGP_SET_ARCHITECTURE # set cpuid to zero
97 lpsw 0 # hopefully start new kernel... 96 lpsw 0 # hopefully start new kernel...
98 97
99 .align 8 98 .align 8
diff --git a/arch/s390/kernel/relocate_kernel64.S b/arch/s390/kernel/relocate_kernel64.S
index 7c3ce589a7f0..cfac28330b03 100644
--- a/arch/s390/kernel/relocate_kernel64.S
+++ b/arch/s390/kernel/relocate_kernel64.S
@@ -1,7 +1,5 @@
1/* 1/*
2 * arch/s390/kernel/relocate_kernel64.S 2 * Copyright IBM Corp. 2005
3 *
4 * (C) Copyright IBM Corp. 2005
5 * 3 *
6 * Author(s): Rolf Adelsberger, 4 * Author(s): Rolf Adelsberger,
7 * Heiko Carstens <heiko.carstens@de.ibm.com> 5 * Heiko Carstens <heiko.carstens@de.ibm.com>
@@ -9,6 +7,7 @@
9 */ 7 */
10 8
11#include <linux/linkage.h> 9#include <linux/linkage.h>
10#include <asm/sigp.h>
12 11
13/* 12/*
14 * moves the new kernel to its destination... 13 * moves the new kernel to its destination...
@@ -45,7 +44,7 @@ ENTRY(relocate_kernel)
45 diag %r0,%r0,0x308 44 diag %r0,%r0,0x308
46 .back: 45 .back:
47 lhi %r1,1 # mode 1 = esame 46 lhi %r1,1 # mode 1 = esame
48 sigp %r1,%r0,0x12 # switch to esame mode 47 sigp %r1,%r0,SIGP_SET_ARCHITECTURE # switch to esame mode
49 sam64 # switch to 64 bit addressing mode 48 sam64 # switch to 64 bit addressing mode
50 basr %r13,0 49 basr %r13,0
51 .back_base: 50 .back_base:
@@ -96,7 +95,7 @@ ENTRY(relocate_kernel)
96 sam31 # 31 bit mode 95 sam31 # 31 bit mode
97 sr %r1,%r1 # erase register r1 96 sr %r1,%r1 # erase register r1
98 sr %r2,%r2 # erase register r2 97 sr %r2,%r2 # erase register r2
99 sigp %r1,%r2,0x12 # set cpuid to zero 98 sigp %r1,%r2,SIGP_SET_ARCHITECTURE # set cpuid to zero
100 lpsw 0 # hopefully start new kernel... 99 lpsw 0 # hopefully start new kernel...
101 100
102 .align 8 101 .align 8
diff --git a/arch/s390/kernel/sclp.S b/arch/s390/kernel/sclp.S
index 95792d846bb6..bf053898630d 100644
--- a/arch/s390/kernel/sclp.S
+++ b/arch/s390/kernel/sclp.S
@@ -1,7 +1,7 @@
1/* 1/*
2 * Mini SCLP driver. 2 * Mini SCLP driver.
3 * 3 *
4 * Copyright IBM Corp. 2004,2009 4 * Copyright IBM Corp. 2004, 2009
5 * 5 *
6 * Author(s): Peter Oberparleiter <Peter.Oberparleiter@de.ibm.com>, 6 * Author(s): Peter Oberparleiter <Peter.Oberparleiter@de.ibm.com>,
7 * Heiko Carstens <heiko.carstens@de.ibm.com>, 7 * Heiko Carstens <heiko.carstens@de.ibm.com>,
diff --git a/arch/s390/kernel/setup.c b/arch/s390/kernel/setup.c
index 489d1d8d96b0..743c0f32fe3b 100644
--- a/arch/s390/kernel/setup.c
+++ b/arch/s390/kernel/setup.c
@@ -1,8 +1,6 @@
1/* 1/*
2 * arch/s390/kernel/setup.c
3 *
4 * S390 version 2 * S390 version
5 * Copyright (C) IBM Corp. 1999,2012 3 * Copyright IBM Corp. 1999, 2012
6 * Author(s): Hartmut Penner (hp@de.ibm.com), 4 * Author(s): Hartmut Penner (hp@de.ibm.com),
7 * Martin Schwidefsky (schwidefsky@de.ibm.com) 5 * Martin Schwidefsky (schwidefsky@de.ibm.com)
8 * 6 *
@@ -63,6 +61,7 @@
63#include <asm/kvm_virtio.h> 61#include <asm/kvm_virtio.h>
64#include <asm/diag.h> 62#include <asm/diag.h>
65#include <asm/os_info.h> 63#include <asm/os_info.h>
64#include <asm/sclp.h>
66#include "entry.h" 65#include "entry.h"
67 66
68long psw_kernel_bits = PSW_DEFAULT_KEY | PSW_MASK_BASE | PSW_ASC_PRIMARY | 67long psw_kernel_bits = PSW_DEFAULT_KEY | PSW_MASK_BASE | PSW_ASC_PRIMARY |
@@ -138,9 +137,14 @@ __setup("condev=", condev_setup);
138 137
139static void __init set_preferred_console(void) 138static void __init set_preferred_console(void)
140{ 139{
141 if (MACHINE_IS_KVM) 140 if (MACHINE_IS_KVM) {
142 add_preferred_console("hvc", 0, NULL); 141 if (sclp_has_vt220())
143 else if (CONSOLE_IS_3215 || CONSOLE_IS_SCLP) 142 add_preferred_console("ttyS", 1, NULL);
143 else if (sclp_has_linemode())
144 add_preferred_console("ttyS", 0, NULL);
145 else
146 add_preferred_console("hvc", 0, NULL);
147 } else if (CONSOLE_IS_3215 || CONSOLE_IS_SCLP)
144 add_preferred_console("ttyS", 0, NULL); 148 add_preferred_console("ttyS", 0, NULL);
145 else if (CONSOLE_IS_3270) 149 else if (CONSOLE_IS_3270)
146 add_preferred_console("tty3270", 0, NULL); 150 add_preferred_console("tty3270", 0, NULL);
@@ -430,10 +434,11 @@ static void __init setup_lowcore(void)
430 lc->restart_source = -1UL; 434 lc->restart_source = -1UL;
431 435
432 /* Setup absolute zero lowcore */ 436 /* Setup absolute zero lowcore */
433 memcpy_absolute(&S390_lowcore.restart_stack, &lc->restart_stack, 437 mem_assign_absolute(S390_lowcore.restart_stack, lc->restart_stack);
434 4 * sizeof(unsigned long)); 438 mem_assign_absolute(S390_lowcore.restart_fn, lc->restart_fn);
435 memcpy_absolute(&S390_lowcore.restart_psw, &lc->restart_psw, 439 mem_assign_absolute(S390_lowcore.restart_data, lc->restart_data);
436 sizeof(lc->restart_psw)); 440 mem_assign_absolute(S390_lowcore.restart_source, lc->restart_source);
441 mem_assign_absolute(S390_lowcore.restart_psw, lc->restart_psw);
437 442
438 set_prefix((u32)(unsigned long) lc); 443 set_prefix((u32)(unsigned long) lc);
439 lowcore_ptr[0] = lc; 444 lowcore_ptr[0] = lc;
@@ -598,9 +603,7 @@ static void __init setup_memory_end(void)
598static void __init setup_vmcoreinfo(void) 603static void __init setup_vmcoreinfo(void)
599{ 604{
600#ifdef CONFIG_KEXEC 605#ifdef CONFIG_KEXEC
601 unsigned long ptr = paddr_vmcoreinfo_note(); 606 mem_assign_absolute(S390_lowcore.vmcore_info, paddr_vmcoreinfo_note());
602
603 memcpy_absolute(&S390_lowcore.vmcore_info, &ptr, sizeof(ptr));
604#endif 607#endif
605} 608}
606 609
diff --git a/arch/s390/kernel/signal.c b/arch/s390/kernel/signal.c
index ac565b44aabb..c13a2a37ef00 100644
--- a/arch/s390/kernel/signal.c
+++ b/arch/s390/kernel/signal.c
@@ -1,7 +1,5 @@
1/* 1/*
2 * arch/s390/kernel/signal.c 2 * Copyright IBM Corp. 1999, 2006
3 *
4 * Copyright (C) IBM Corp. 1999,2006
5 * Author(s): Denis Joseph Barrow (djbarrow@de.ibm.com,barrow_dj@yahoo.com) 3 * Author(s): Denis Joseph Barrow (djbarrow@de.ibm.com,barrow_dj@yahoo.com)
6 * 4 *
7 * Based on Intel version 5 * Based on Intel version
diff --git a/arch/s390/kernel/smp.c b/arch/s390/kernel/smp.c
index 15cca26ccb6c..720fda1620f2 100644
--- a/arch/s390/kernel/smp.c
+++ b/arch/s390/kernel/smp.c
@@ -1,7 +1,7 @@
1/* 1/*
2 * SMP related functions 2 * SMP related functions
3 * 3 *
4 * Copyright IBM Corp. 1999,2012 4 * Copyright IBM Corp. 1999, 2012
5 * Author(s): Denis Joseph Barrow, 5 * Author(s): Denis Joseph Barrow,
6 * Martin Schwidefsky <schwidefsky@de.ibm.com>, 6 * Martin Schwidefsky <schwidefsky@de.ibm.com>,
7 * Heiko Carstens <heiko.carstens@de.ibm.com>, 7 * Heiko Carstens <heiko.carstens@de.ibm.com>,
@@ -38,40 +38,16 @@
38#include <asm/setup.h> 38#include <asm/setup.h>
39#include <asm/irq.h> 39#include <asm/irq.h>
40#include <asm/tlbflush.h> 40#include <asm/tlbflush.h>
41#include <asm/timer.h> 41#include <asm/vtimer.h>
42#include <asm/lowcore.h> 42#include <asm/lowcore.h>
43#include <asm/sclp.h> 43#include <asm/sclp.h>
44#include <asm/vdso.h> 44#include <asm/vdso.h>
45#include <asm/debug.h> 45#include <asm/debug.h>
46#include <asm/os_info.h> 46#include <asm/os_info.h>
47#include <asm/sigp.h>
47#include "entry.h" 48#include "entry.h"
48 49
49enum { 50enum {
50 sigp_sense = 1,
51 sigp_external_call = 2,
52 sigp_emergency_signal = 3,
53 sigp_start = 4,
54 sigp_stop = 5,
55 sigp_restart = 6,
56 sigp_stop_and_store_status = 9,
57 sigp_initial_cpu_reset = 11,
58 sigp_cpu_reset = 12,
59 sigp_set_prefix = 13,
60 sigp_store_status_at_address = 14,
61 sigp_store_extended_status_at_address = 15,
62 sigp_set_architecture = 18,
63 sigp_conditional_emergency_signal = 19,
64 sigp_sense_running = 21,
65};
66
67enum {
68 sigp_order_code_accepted = 0,
69 sigp_status_stored = 1,
70 sigp_busy = 2,
71 sigp_not_operational = 3,
72};
73
74enum {
75 ec_schedule = 0, 51 ec_schedule = 0,
76 ec_call_function, 52 ec_call_function,
77 ec_call_function_single, 53 ec_call_function_single,
@@ -124,7 +100,7 @@ static inline int __pcpu_sigp_relax(u16 addr, u8 order, u32 parm, u32 *status)
124 100
125 while (1) { 101 while (1) {
126 cc = __pcpu_sigp(addr, order, parm, status); 102 cc = __pcpu_sigp(addr, order, parm, status);
127 if (cc != sigp_busy) 103 if (cc != SIGP_CC_BUSY)
128 return cc; 104 return cc;
129 cpu_relax(); 105 cpu_relax();
130 } 106 }
@@ -136,7 +112,7 @@ static int pcpu_sigp_retry(struct pcpu *pcpu, u8 order, u32 parm)
136 112
137 for (retry = 0; ; retry++) { 113 for (retry = 0; ; retry++) {
138 cc = __pcpu_sigp(pcpu->address, order, parm, &pcpu->status); 114 cc = __pcpu_sigp(pcpu->address, order, parm, &pcpu->status);
139 if (cc != sigp_busy) 115 if (cc != SIGP_CC_BUSY)
140 break; 116 break;
141 if (retry >= 3) 117 if (retry >= 3)
142 udelay(10); 118 udelay(10);
@@ -146,20 +122,19 @@ static int pcpu_sigp_retry(struct pcpu *pcpu, u8 order, u32 parm)
146 122
147static inline int pcpu_stopped(struct pcpu *pcpu) 123static inline int pcpu_stopped(struct pcpu *pcpu)
148{ 124{
149 if (__pcpu_sigp(pcpu->address, sigp_sense, 125 if (__pcpu_sigp(pcpu->address, SIGP_SENSE,
150 0, &pcpu->status) != sigp_status_stored) 126 0, &pcpu->status) != SIGP_CC_STATUS_STORED)
151 return 0; 127 return 0;
152 /* Check for stopped and check stop state */ 128 return !!(pcpu->status & (SIGP_STATUS_CHECK_STOP|SIGP_STATUS_STOPPED));
153 return !!(pcpu->status & 0x50);
154} 129}
155 130
156static inline int pcpu_running(struct pcpu *pcpu) 131static inline int pcpu_running(struct pcpu *pcpu)
157{ 132{
158 if (__pcpu_sigp(pcpu->address, sigp_sense_running, 133 if (__pcpu_sigp(pcpu->address, SIGP_SENSE_RUNNING,
159 0, &pcpu->status) != sigp_status_stored) 134 0, &pcpu->status) != SIGP_CC_STATUS_STORED)
160 return 1; 135 return 1;
161 /* Check for running status */ 136 /* Status stored condition code is equivalent to cpu not running. */
162 return !(pcpu->status & 0x400); 137 return 0;
163} 138}
164 139
165/* 140/*
@@ -181,7 +156,7 @@ static void pcpu_ec_call(struct pcpu *pcpu, int ec_bit)
181 156
182 set_bit(ec_bit, &pcpu->ec_mask); 157 set_bit(ec_bit, &pcpu->ec_mask);
183 order = pcpu_running(pcpu) ? 158 order = pcpu_running(pcpu) ?
184 sigp_external_call : sigp_emergency_signal; 159 SIGP_EXTERNAL_CALL : SIGP_EMERGENCY_SIGNAL;
185 pcpu_sigp_retry(pcpu, order, 0); 160 pcpu_sigp_retry(pcpu, order, 0);
186} 161}
187 162
@@ -214,7 +189,7 @@ static int __cpuinit pcpu_alloc_lowcore(struct pcpu *pcpu, int cpu)
214 goto out; 189 goto out;
215#endif 190#endif
216 lowcore_ptr[cpu] = lc; 191 lowcore_ptr[cpu] = lc;
217 pcpu_sigp_retry(pcpu, sigp_set_prefix, (u32)(unsigned long) lc); 192 pcpu_sigp_retry(pcpu, SIGP_SET_PREFIX, (u32)(unsigned long) lc);
218 return 0; 193 return 0;
219out: 194out:
220 if (pcpu != &pcpu_devices[0]) { 195 if (pcpu != &pcpu_devices[0]) {
@@ -229,7 +204,7 @@ out:
229 204
230static void pcpu_free_lowcore(struct pcpu *pcpu) 205static void pcpu_free_lowcore(struct pcpu *pcpu)
231{ 206{
232 pcpu_sigp_retry(pcpu, sigp_set_prefix, 0); 207 pcpu_sigp_retry(pcpu, SIGP_SET_PREFIX, 0);
233 lowcore_ptr[pcpu - pcpu_devices] = NULL; 208 lowcore_ptr[pcpu - pcpu_devices] = NULL;
234#ifndef CONFIG_64BIT 209#ifndef CONFIG_64BIT
235 if (MACHINE_HAS_IEEE) { 210 if (MACHINE_HAS_IEEE) {
@@ -288,7 +263,7 @@ static void pcpu_start_fn(struct pcpu *pcpu, void (*func)(void *), void *data)
288 lc->restart_fn = (unsigned long) func; 263 lc->restart_fn = (unsigned long) func;
289 lc->restart_data = (unsigned long) data; 264 lc->restart_data = (unsigned long) data;
290 lc->restart_source = -1UL; 265 lc->restart_source = -1UL;
291 pcpu_sigp_retry(pcpu, sigp_restart, 0); 266 pcpu_sigp_retry(pcpu, SIGP_RESTART, 0);
292} 267}
293 268
294/* 269/*
@@ -298,26 +273,26 @@ static void pcpu_delegate(struct pcpu *pcpu, void (*func)(void *),
298 void *data, unsigned long stack) 273 void *data, unsigned long stack)
299{ 274{
300 struct _lowcore *lc = lowcore_ptr[pcpu - pcpu_devices]; 275 struct _lowcore *lc = lowcore_ptr[pcpu - pcpu_devices];
301 struct { 276 unsigned long source_cpu = stap();
302 unsigned long stack;
303 void *func;
304 void *data;
305 unsigned long source;
306 } restart = { stack, func, data, stap() };
307 277
308 __load_psw_mask(psw_kernel_bits); 278 __load_psw_mask(psw_kernel_bits);
309 if (pcpu->address == restart.source) 279 if (pcpu->address == source_cpu)
310 func(data); /* should not return */ 280 func(data); /* should not return */
311 /* Stop target cpu (if func returns this stops the current cpu). */ 281 /* Stop target cpu (if func returns this stops the current cpu). */
312 pcpu_sigp_retry(pcpu, sigp_stop, 0); 282 pcpu_sigp_retry(pcpu, SIGP_STOP, 0);
313 /* Restart func on the target cpu and stop the current cpu. */ 283 /* Restart func on the target cpu and stop the current cpu. */
314 memcpy_absolute(&lc->restart_stack, &restart, sizeof(restart)); 284 mem_assign_absolute(lc->restart_stack, stack);
285 mem_assign_absolute(lc->restart_fn, (unsigned long) func);
286 mem_assign_absolute(lc->restart_data, (unsigned long) data);
287 mem_assign_absolute(lc->restart_source, source_cpu);
315 asm volatile( 288 asm volatile(
316 "0: sigp 0,%0,6 # sigp restart to target cpu\n" 289 "0: sigp 0,%0,%2 # sigp restart to target cpu\n"
317 " brc 2,0b # busy, try again\n" 290 " brc 2,0b # busy, try again\n"
318 "1: sigp 0,%1,5 # sigp stop to current cpu\n" 291 "1: sigp 0,%1,%3 # sigp stop to current cpu\n"
319 " brc 2,1b # busy, try again\n" 292 " brc 2,1b # busy, try again\n"
320 : : "d" (pcpu->address), "d" (restart.source) : "0", "1", "cc"); 293 : : "d" (pcpu->address), "d" (source_cpu),
294 "K" (SIGP_RESTART), "K" (SIGP_STOP)
295 : "0", "1", "cc");
321 for (;;) ; 296 for (;;) ;
322} 297}
323 298
@@ -388,8 +363,8 @@ void smp_emergency_stop(cpumask_t *cpumask)
388 for_each_cpu(cpu, cpumask) { 363 for_each_cpu(cpu, cpumask) {
389 struct pcpu *pcpu = pcpu_devices + cpu; 364 struct pcpu *pcpu = pcpu_devices + cpu;
390 set_bit(ec_stop_cpu, &pcpu->ec_mask); 365 set_bit(ec_stop_cpu, &pcpu->ec_mask);
391 while (__pcpu_sigp(pcpu->address, sigp_emergency_signal, 366 while (__pcpu_sigp(pcpu->address, SIGP_EMERGENCY_SIGNAL,
392 0, NULL) == sigp_busy && 367 0, NULL) == SIGP_CC_BUSY &&
393 get_clock() < end) 368 get_clock() < end)
394 cpu_relax(); 369 cpu_relax();
395 } 370 }
@@ -425,7 +400,7 @@ void smp_send_stop(void)
425 /* stop all processors */ 400 /* stop all processors */
426 for_each_cpu(cpu, &cpumask) { 401 for_each_cpu(cpu, &cpumask) {
427 struct pcpu *pcpu = pcpu_devices + cpu; 402 struct pcpu *pcpu = pcpu_devices + cpu;
428 pcpu_sigp_retry(pcpu, sigp_stop, 0); 403 pcpu_sigp_retry(pcpu, SIGP_STOP, 0);
429 while (!pcpu_stopped(pcpu)) 404 while (!pcpu_stopped(pcpu))
430 cpu_relax(); 405 cpu_relax();
431 } 406 }
@@ -436,7 +411,7 @@ void smp_send_stop(void)
436 */ 411 */
437void smp_stop_cpu(void) 412void smp_stop_cpu(void)
438{ 413{
439 pcpu_sigp_retry(pcpu_devices + smp_processor_id(), sigp_stop, 0); 414 pcpu_sigp_retry(pcpu_devices + smp_processor_id(), SIGP_STOP, 0);
440 for (;;) ; 415 for (;;) ;
441} 416}
442 417
@@ -590,7 +565,7 @@ static void __init smp_get_save_area(int cpu, u16 address)
590 } 565 }
591#endif 566#endif
592 /* Get the registers of a non-boot cpu. */ 567 /* Get the registers of a non-boot cpu. */
593 __pcpu_sigp_relax(address, sigp_stop_and_store_status, 0, NULL); 568 __pcpu_sigp_relax(address, SIGP_STOP_AND_STORE_STATUS, 0, NULL);
594 memcpy_real(save_area, lc + SAVE_AREA_BASE, sizeof(*save_area)); 569 memcpy_real(save_area, lc + SAVE_AREA_BASE, sizeof(*save_area));
595} 570}
596 571
@@ -599,8 +574,8 @@ int smp_store_status(int cpu)
599 struct pcpu *pcpu; 574 struct pcpu *pcpu;
600 575
601 pcpu = pcpu_devices + cpu; 576 pcpu = pcpu_devices + cpu;
602 if (__pcpu_sigp_relax(pcpu->address, sigp_stop_and_store_status, 577 if (__pcpu_sigp_relax(pcpu->address, SIGP_STOP_AND_STORE_STATUS,
603 0, NULL) != sigp_order_code_accepted) 578 0, NULL) != SIGP_CC_ORDER_CODE_ACCEPTED)
604 return -EIO; 579 return -EIO;
605 return 0; 580 return 0;
606} 581}
@@ -621,8 +596,8 @@ static struct sclp_cpu_info *smp_get_cpu_info(void)
621 if (info && (use_sigp_detection || sclp_get_cpu_info(info))) { 596 if (info && (use_sigp_detection || sclp_get_cpu_info(info))) {
622 use_sigp_detection = 1; 597 use_sigp_detection = 1;
623 for (address = 0; address <= MAX_CPU_ADDRESS; address++) { 598 for (address = 0; address <= MAX_CPU_ADDRESS; address++) {
624 if (__pcpu_sigp_relax(address, sigp_sense, 0, NULL) == 599 if (__pcpu_sigp_relax(address, SIGP_SENSE, 0, NULL) ==
625 sigp_not_operational) 600 SIGP_CC_NOT_OPERATIONAL)
626 continue; 601 continue;
627 info->cpu[info->configured].address = address; 602 info->cpu[info->configured].address = address;
628 info->configured++; 603 info->configured++;
@@ -717,9 +692,7 @@ static void __cpuinit smp_start_secondary(void *cpuvoid)
717 init_cpu_vtimer(); 692 init_cpu_vtimer();
718 pfault_init(); 693 pfault_init();
719 notify_cpu_starting(smp_processor_id()); 694 notify_cpu_starting(smp_processor_id());
720 ipi_call_lock();
721 set_cpu_online(smp_processor_id(), true); 695 set_cpu_online(smp_processor_id(), true);
722 ipi_call_unlock();
723 local_irq_enable(); 696 local_irq_enable();
724 /* cpu_idle will call schedule for us */ 697 /* cpu_idle will call schedule for us */
725 cpu_idle(); 698 cpu_idle();
@@ -734,8 +707,8 @@ int __cpuinit __cpu_up(unsigned int cpu, struct task_struct *tidle)
734 pcpu = pcpu_devices + cpu; 707 pcpu = pcpu_devices + cpu;
735 if (pcpu->state != CPU_STATE_CONFIGURED) 708 if (pcpu->state != CPU_STATE_CONFIGURED)
736 return -EIO; 709 return -EIO;
737 if (pcpu_sigp_retry(pcpu, sigp_initial_cpu_reset, 0) != 710 if (pcpu_sigp_retry(pcpu, SIGP_INITIAL_CPU_RESET, 0) !=
738 sigp_order_code_accepted) 711 SIGP_CC_ORDER_CODE_ACCEPTED)
739 return -EIO; 712 return -EIO;
740 713
741 rc = pcpu_alloc_lowcore(pcpu, cpu); 714 rc = pcpu_alloc_lowcore(pcpu, cpu);
@@ -795,7 +768,7 @@ void __cpu_die(unsigned int cpu)
795void __noreturn cpu_die(void) 768void __noreturn cpu_die(void)
796{ 769{
797 idle_task_exit(); 770 idle_task_exit();
798 pcpu_sigp_retry(pcpu_devices + smp_processor_id(), sigp_stop, 0); 771 pcpu_sigp_retry(pcpu_devices + smp_processor_id(), SIGP_STOP, 0);
799 for (;;) ; 772 for (;;) ;
800} 773}
801 774
@@ -942,7 +915,7 @@ static ssize_t show_idle_count(struct device *dev,
942 do { 915 do {
943 sequence = ACCESS_ONCE(idle->sequence); 916 sequence = ACCESS_ONCE(idle->sequence);
944 idle_count = ACCESS_ONCE(idle->idle_count); 917 idle_count = ACCESS_ONCE(idle->idle_count);
945 if (ACCESS_ONCE(idle->idle_enter)) 918 if (ACCESS_ONCE(idle->clock_idle_enter))
946 idle_count++; 919 idle_count++;
947 } while ((sequence & 1) || (idle->sequence != sequence)); 920 } while ((sequence & 1) || (idle->sequence != sequence));
948 return sprintf(buf, "%llu\n", idle_count); 921 return sprintf(buf, "%llu\n", idle_count);
@@ -960,8 +933,8 @@ static ssize_t show_idle_time(struct device *dev,
960 now = get_clock(); 933 now = get_clock();
961 sequence = ACCESS_ONCE(idle->sequence); 934 sequence = ACCESS_ONCE(idle->sequence);
962 idle_time = ACCESS_ONCE(idle->idle_time); 935 idle_time = ACCESS_ONCE(idle->idle_time);
963 idle_enter = ACCESS_ONCE(idle->idle_enter); 936 idle_enter = ACCESS_ONCE(idle->clock_idle_enter);
964 idle_exit = ACCESS_ONCE(idle->idle_exit); 937 idle_exit = ACCESS_ONCE(idle->clock_idle_exit);
965 } while ((sequence & 1) || (idle->sequence != sequence)); 938 } while ((sequence & 1) || (idle->sequence != sequence));
966 idle_time += idle_enter ? ((idle_exit ? : now) - idle_enter) : 0; 939 idle_time += idle_enter ? ((idle_exit ? : now) - idle_enter) : 0;
967 return sprintf(buf, "%llu\n", idle_time >> 12); 940 return sprintf(buf, "%llu\n", idle_time >> 12);
@@ -984,14 +957,11 @@ static int __cpuinit smp_cpu_notify(struct notifier_block *self,
984 unsigned int cpu = (unsigned int)(long)hcpu; 957 unsigned int cpu = (unsigned int)(long)hcpu;
985 struct cpu *c = &pcpu_devices[cpu].cpu; 958 struct cpu *c = &pcpu_devices[cpu].cpu;
986 struct device *s = &c->dev; 959 struct device *s = &c->dev;
987 struct s390_idle_data *idle;
988 int err = 0; 960 int err = 0;
989 961
990 switch (action) { 962 switch (action) {
991 case CPU_ONLINE: 963 case CPU_ONLINE:
992 case CPU_ONLINE_FROZEN: 964 case CPU_ONLINE_FROZEN:
993 idle = &per_cpu(s390_idle, cpu);
994 memset(idle, 0, sizeof(struct s390_idle_data));
995 err = sysfs_create_group(&s->kobj, &cpu_online_attr_group); 965 err = sysfs_create_group(&s->kobj, &cpu_online_attr_group);
996 break; 966 break;
997 case CPU_DEAD: 967 case CPU_DEAD:
diff --git a/arch/s390/kernel/stacktrace.c b/arch/s390/kernel/stacktrace.c
index 8841919ef7e6..1785cd82253c 100644
--- a/arch/s390/kernel/stacktrace.c
+++ b/arch/s390/kernel/stacktrace.c
@@ -1,9 +1,7 @@
1/* 1/*
2 * arch/s390/kernel/stacktrace.c
3 *
4 * Stack trace management functions 2 * Stack trace management functions
5 * 3 *
6 * Copyright (C) IBM Corp. 2006 4 * Copyright IBM Corp. 2006
7 * Author(s): Heiko Carstens <heiko.carstens@de.ibm.com> 5 * Author(s): Heiko Carstens <heiko.carstens@de.ibm.com>
8 */ 6 */
9 7
diff --git a/arch/s390/kernel/swsusp_asm64.S b/arch/s390/kernel/swsusp_asm64.S
index dd70ef046058..d4ca4e0617b5 100644
--- a/arch/s390/kernel/swsusp_asm64.S
+++ b/arch/s390/kernel/swsusp_asm64.S
@@ -12,6 +12,7 @@
12#include <asm/ptrace.h> 12#include <asm/ptrace.h>
13#include <asm/thread_info.h> 13#include <asm/thread_info.h>
14#include <asm/asm-offsets.h> 14#include <asm/asm-offsets.h>
15#include <asm/sigp.h>
15 16
16/* 17/*
17 * Save register context in absolute 0 lowcore and call swsusp_save() to 18 * Save register context in absolute 0 lowcore and call swsusp_save() to
@@ -163,7 +164,7 @@ ENTRY(swsusp_arch_resume)
163 diag %r0,%r0,0x308 164 diag %r0,%r0,0x308
164restart_entry: 165restart_entry:
165 lhi %r1,1 166 lhi %r1,1
166 sigp %r1,%r0,0x12 167 sigp %r1,%r0,SIGP_SET_ARCHITECTURE
167 sam64 168 sam64
168 larl %r1,.Lnew_pgm_check_psw 169 larl %r1,.Lnew_pgm_check_psw
169 lpswe 0(%r1) 170 lpswe 0(%r1)
@@ -179,7 +180,7 @@ pgm_check_entry:
179 larl %r4,.Lrestart_suspend_psw /* Set new restart PSW */ 180 larl %r4,.Lrestart_suspend_psw /* Set new restart PSW */
180 mvc __LC_RST_NEW_PSW(16,%r0),0(%r4) 181 mvc __LC_RST_NEW_PSW(16,%r0),0(%r4)
1813: 1823:
182 sigp %r9,%r1,11 /* sigp initial cpu reset */ 183 sigp %r9,%r1,SIGP_INITIAL_CPU_RESET /* sigp initial cpu reset */
183 brc 8,4f /* accepted */ 184 brc 8,4f /* accepted */
184 brc 2,3b /* busy, try again */ 185 brc 2,3b /* busy, try again */
185 186
@@ -190,16 +191,16 @@ pgm_check_entry:
190 larl %r3,_sclp_print_early 191 larl %r3,_sclp_print_early
191 lghi %r1,0 192 lghi %r1,0
192 sam31 193 sam31
193 sigp %r1,%r0,0x12 194 sigp %r1,%r0,SIGP_SET_ARCHITECTURE
194 basr %r14,%r3 195 basr %r14,%r3
195 larl %r3,.Ldisabled_wait_31 196 larl %r3,.Ldisabled_wait_31
196 lpsw 0(%r3) 197 lpsw 0(%r3)
1974: 1984:
198 /* Switch to suspend CPU */ 199 /* Switch to suspend CPU */
199 sigp %r9,%r1,6 /* sigp restart to suspend CPU */ 200 sigp %r9,%r1,SIGP_RESTART /* sigp restart to suspend CPU */
200 brc 2,4b /* busy, try again */ 201 brc 2,4b /* busy, try again */
2015: 2025:
202 sigp %r9,%r2,5 /* sigp stop to current resume CPU */ 203 sigp %r9,%r2,SIGP_STOP /* sigp stop to current resume CPU */
203 brc 2,5b /* busy, try again */ 204 brc 2,5b /* busy, try again */
2046: j 6b 2056: j 6b
205 206
@@ -207,7 +208,7 @@ restart_suspend:
207 larl %r1,.Lresume_cpu 208 larl %r1,.Lresume_cpu
208 llgh %r2,0(%r1) 209 llgh %r2,0(%r1)
2097: 2107:
210 sigp %r9,%r2,1 /* sigp sense, wait for resume CPU */ 211 sigp %r9,%r2,SIGP_SENSE /* sigp sense, wait for resume CPU */
211 brc 8,7b /* accepted, status 0, still running */ 212 brc 8,7b /* accepted, status 0, still running */
212 brc 2,7b /* busy, try again */ 213 brc 2,7b /* busy, try again */
213 tmll %r9,0x40 /* Test if resume CPU is stopped */ 214 tmll %r9,0x40 /* Test if resume CPU is stopped */
diff --git a/arch/s390/kernel/sys_s390.c b/arch/s390/kernel/sys_s390.c
index 78ea1948ff51..b4a29eee41b8 100644
--- a/arch/s390/kernel/sys_s390.c
+++ b/arch/s390/kernel/sys_s390.c
@@ -1,8 +1,6 @@
1/* 1/*
2 * arch/s390/kernel/sys_s390.c
3 *
4 * S390 version 2 * S390 version
5 * Copyright (C) 1999,2000 IBM Deutschland Entwicklung GmbH, IBM Corporation 3 * Copyright IBM Corp. 1999, 2000
6 * Author(s): Martin Schwidefsky (schwidefsky@de.ibm.com), 4 * Author(s): Martin Schwidefsky (schwidefsky@de.ibm.com),
7 * Thomas Spatzier (tspat@de.ibm.com) 5 * Thomas Spatzier (tspat@de.ibm.com)
8 * 6 *
diff --git a/arch/s390/kernel/time.c b/arch/s390/kernel/time.c
index d4e1cb1dbcd1..dcec960fc724 100644
--- a/arch/s390/kernel/time.c
+++ b/arch/s390/kernel/time.c
@@ -1,5 +1,4 @@
1/* 1/*
2 * arch/s390/kernel/time.c
3 * Time of day based timer functions. 2 * Time of day based timer functions.
4 * 3 *
5 * S390 version 4 * S390 version
@@ -45,7 +44,7 @@
45#include <asm/vdso.h> 44#include <asm/vdso.h>
46#include <asm/irq.h> 45#include <asm/irq.h>
47#include <asm/irq_regs.h> 46#include <asm/irq_regs.h>
48#include <asm/timer.h> 47#include <asm/vtimer.h>
49#include <asm/etr.h> 48#include <asm/etr.h>
50#include <asm/cio.h> 49#include <asm/cio.h>
51#include "entry.h" 50#include "entry.h"
diff --git a/arch/s390/kernel/topology.c b/arch/s390/kernel/topology.c
index 4f8dc942257c..05151e06c388 100644
--- a/arch/s390/kernel/topology.c
+++ b/arch/s390/kernel/topology.c
@@ -1,5 +1,5 @@
1/* 1/*
2 * Copyright IBM Corp. 2007,2011 2 * Copyright IBM Corp. 2007, 2011
3 * Author(s): Heiko Carstens <heiko.carstens@de.ibm.com> 3 * Author(s): Heiko Carstens <heiko.carstens@de.ibm.com>
4 */ 4 */
5 5
diff --git a/arch/s390/kernel/traps.c b/arch/s390/kernel/traps.c
index 77cdf4234ebc..af2421a0f315 100644
--- a/arch/s390/kernel/traps.c
+++ b/arch/s390/kernel/traps.c
@@ -1,8 +1,6 @@
1/* 1/*
2 * arch/s390/kernel/traps.c
3 *
4 * S390 version 2 * S390 version
5 * Copyright (C) 1999,2000 IBM Deutschland Entwicklung GmbH, IBM Corporation 3 * Copyright IBM Corp. 1999, 2000
6 * Author(s): Martin Schwidefsky (schwidefsky@de.ibm.com), 4 * Author(s): Martin Schwidefsky (schwidefsky@de.ibm.com),
7 * Denis Joseph Barrow (djbarrow@de.ibm.com,barrow_dj@yahoo.com), 5 * Denis Joseph Barrow (djbarrow@de.ibm.com,barrow_dj@yahoo.com),
8 * 6 *
diff --git a/arch/s390/kernel/vtime.c b/arch/s390/kernel/vtime.c
index 39ebff506946..4fc97b40a6e1 100644
--- a/arch/s390/kernel/vtime.c
+++ b/arch/s390/kernel/vtime.c
@@ -1,71 +1,82 @@
1/* 1/*
2 * arch/s390/kernel/vtime.c
3 * Virtual cpu timer based timer functions. 2 * Virtual cpu timer based timer functions.
4 * 3 *
5 * S390 version 4 * Copyright IBM Corp. 2004, 2012
6 * Copyright (C) 2004 IBM Deutschland Entwicklung GmbH, IBM Corporation
7 * Author(s): Jan Glauber <jan.glauber@de.ibm.com> 5 * Author(s): Jan Glauber <jan.glauber@de.ibm.com>
8 */ 6 */
9 7
10#include <linux/module.h> 8#include <linux/kernel_stat.h>
9#include <linux/notifier.h>
10#include <linux/kprobes.h>
11#include <linux/export.h>
11#include <linux/kernel.h> 12#include <linux/kernel.h>
12#include <linux/time.h>
13#include <linux/delay.h>
14#include <linux/init.h>
15#include <linux/smp.h>
16#include <linux/types.h>
17#include <linux/timex.h> 13#include <linux/timex.h>
18#include <linux/notifier.h> 14#include <linux/types.h>
19#include <linux/kernel_stat.h> 15#include <linux/time.h>
20#include <linux/rcupdate.h>
21#include <linux/posix-timers.h>
22#include <linux/cpu.h> 16#include <linux/cpu.h>
23#include <linux/kprobes.h> 17#include <linux/smp.h>
24 18
25#include <asm/timer.h>
26#include <asm/irq_regs.h> 19#include <asm/irq_regs.h>
27#include <asm/cputime.h> 20#include <asm/cputime.h>
21#include <asm/vtimer.h>
28#include <asm/irq.h> 22#include <asm/irq.h>
29#include "entry.h" 23#include "entry.h"
30 24
31static DEFINE_PER_CPU(struct vtimer_queue, virt_cpu_timer); 25static void virt_timer_expire(void);
32 26
33DEFINE_PER_CPU(struct s390_idle_data, s390_idle); 27DEFINE_PER_CPU(struct s390_idle_data, s390_idle);
34 28
35static inline __u64 get_vtimer(void) 29static LIST_HEAD(virt_timer_list);
30static DEFINE_SPINLOCK(virt_timer_lock);
31static atomic64_t virt_timer_current;
32static atomic64_t virt_timer_elapsed;
33
34static inline u64 get_vtimer(void)
36{ 35{
37 __u64 timer; 36 u64 timer;
38 37
39 asm volatile("STPT %0" : "=m" (timer)); 38 asm volatile("stpt %0" : "=m" (timer));
40 return timer; 39 return timer;
41} 40}
42 41
43static inline void set_vtimer(__u64 expires) 42static inline void set_vtimer(u64 expires)
44{ 43{
45 __u64 timer; 44 u64 timer;
46 45
47 asm volatile (" STPT %0\n" /* Store current cpu timer value */ 46 asm volatile(
48 " SPT %1" /* Set new value immediately afterwards */ 47 " stpt %0\n" /* Store current cpu timer value */
49 : "=m" (timer) : "m" (expires) ); 48 " spt %1" /* Set new value imm. afterwards */
49 : "=m" (timer) : "m" (expires));
50 S390_lowcore.system_timer += S390_lowcore.last_update_timer - timer; 50 S390_lowcore.system_timer += S390_lowcore.last_update_timer - timer;
51 S390_lowcore.last_update_timer = expires; 51 S390_lowcore.last_update_timer = expires;
52} 52}
53 53
54static inline int virt_timer_forward(u64 elapsed)
55{
56 BUG_ON(!irqs_disabled());
57
58 if (list_empty(&virt_timer_list))
59 return 0;
60 elapsed = atomic64_add_return(elapsed, &virt_timer_elapsed);
61 return elapsed >= atomic64_read(&virt_timer_current);
62}
63
54/* 64/*
55 * Update process times based on virtual cpu times stored by entry.S 65 * Update process times based on virtual cpu times stored by entry.S
56 * to the lowcore fields user_timer, system_timer & steal_clock. 66 * to the lowcore fields user_timer, system_timer & steal_clock.
57 */ 67 */
58static void do_account_vtime(struct task_struct *tsk, int hardirq_offset) 68static int do_account_vtime(struct task_struct *tsk, int hardirq_offset)
59{ 69{
60 struct thread_info *ti = task_thread_info(tsk); 70 struct thread_info *ti = task_thread_info(tsk);
61 __u64 timer, clock, user, system, steal; 71 u64 timer, clock, user, system, steal;
62 72
63 timer = S390_lowcore.last_update_timer; 73 timer = S390_lowcore.last_update_timer;
64 clock = S390_lowcore.last_update_clock; 74 clock = S390_lowcore.last_update_clock;
65 asm volatile (" STPT %0\n" /* Store current cpu timer value */ 75 asm volatile(
66 " STCK %1" /* Store current tod clock value */ 76 " stpt %0\n" /* Store current cpu timer value */
67 : "=m" (S390_lowcore.last_update_timer), 77 " stck %1" /* Store current tod clock value */
68 "=m" (S390_lowcore.last_update_clock) ); 78 : "=m" (S390_lowcore.last_update_timer),
79 "=m" (S390_lowcore.last_update_clock));
69 S390_lowcore.system_timer += timer - S390_lowcore.last_update_timer; 80 S390_lowcore.system_timer += timer - S390_lowcore.last_update_timer;
70 S390_lowcore.steal_timer += S390_lowcore.last_update_clock - clock; 81 S390_lowcore.steal_timer += S390_lowcore.last_update_clock - clock;
71 82
@@ -84,6 +95,8 @@ static void do_account_vtime(struct task_struct *tsk, int hardirq_offset)
84 S390_lowcore.steal_timer = 0; 95 S390_lowcore.steal_timer = 0;
85 account_steal_time(steal); 96 account_steal_time(steal);
86 } 97 }
98
99 return virt_timer_forward(user + system);
87} 100}
88 101
89void account_vtime(struct task_struct *prev, struct task_struct *next) 102void account_vtime(struct task_struct *prev, struct task_struct *next)
@@ -101,7 +114,8 @@ void account_vtime(struct task_struct *prev, struct task_struct *next)
101 114
102void account_process_tick(struct task_struct *tsk, int user_tick) 115void account_process_tick(struct task_struct *tsk, int user_tick)
103{ 116{
104 do_account_vtime(tsk, HARDIRQ_OFFSET); 117 if (do_account_vtime(tsk, HARDIRQ_OFFSET))
118 virt_timer_expire();
105} 119}
106 120
107/* 121/*
@@ -111,7 +125,7 @@ void account_process_tick(struct task_struct *tsk, int user_tick)
111void account_system_vtime(struct task_struct *tsk) 125void account_system_vtime(struct task_struct *tsk)
112{ 126{
113 struct thread_info *ti = task_thread_info(tsk); 127 struct thread_info *ti = task_thread_info(tsk);
114 __u64 timer, system; 128 u64 timer, system;
115 129
116 timer = S390_lowcore.last_update_timer; 130 timer = S390_lowcore.last_update_timer;
117 S390_lowcore.last_update_timer = get_vtimer(); 131 S390_lowcore.last_update_timer = get_vtimer();
@@ -121,13 +135,14 @@ void account_system_vtime(struct task_struct *tsk)
121 S390_lowcore.steal_timer -= system; 135 S390_lowcore.steal_timer -= system;
122 ti->system_timer = S390_lowcore.system_timer; 136 ti->system_timer = S390_lowcore.system_timer;
123 account_system_time(tsk, 0, system, system); 137 account_system_time(tsk, 0, system, system);
138
139 virt_timer_forward(system);
124} 140}
125EXPORT_SYMBOL_GPL(account_system_vtime); 141EXPORT_SYMBOL_GPL(account_system_vtime);
126 142
127void __kprobes vtime_stop_cpu(void) 143void __kprobes vtime_stop_cpu(void)
128{ 144{
129 struct s390_idle_data *idle = &__get_cpu_var(s390_idle); 145 struct s390_idle_data *idle = &__get_cpu_var(s390_idle);
130 struct vtimer_queue *vq = &__get_cpu_var(virt_cpu_timer);
131 unsigned long long idle_time; 146 unsigned long long idle_time;
132 unsigned long psw_mask; 147 unsigned long psw_mask;
133 148
@@ -141,7 +156,7 @@ void __kprobes vtime_stop_cpu(void)
141 idle->nohz_delay = 0; 156 idle->nohz_delay = 0;
142 157
143 /* Call the assembler magic in entry.S */ 158 /* Call the assembler magic in entry.S */
144 psw_idle(idle, vq, psw_mask, !list_empty(&vq->list)); 159 psw_idle(idle, psw_mask);
145 160
146 /* Reenable preemption tracer. */ 161 /* Reenable preemption tracer. */
147 start_critical_timings(); 162 start_critical_timings();
@@ -149,9 +164,9 @@ void __kprobes vtime_stop_cpu(void)
149 /* Account time spent with enabled wait psw loaded as idle time. */ 164 /* Account time spent with enabled wait psw loaded as idle time. */
150 idle->sequence++; 165 idle->sequence++;
151 smp_wmb(); 166 smp_wmb();
152 idle_time = idle->idle_exit - idle->idle_enter; 167 idle_time = idle->clock_idle_exit - idle->clock_idle_enter;
168 idle->clock_idle_enter = idle->clock_idle_exit = 0ULL;
153 idle->idle_time += idle_time; 169 idle->idle_time += idle_time;
154 idle->idle_enter = idle->idle_exit = 0ULL;
155 idle->idle_count++; 170 idle->idle_count++;
156 account_idle_time(idle_time); 171 account_idle_time(idle_time);
157 smp_wmb(); 172 smp_wmb();
@@ -167,10 +182,10 @@ cputime64_t s390_get_idle_time(int cpu)
167 do { 182 do {
168 now = get_clock(); 183 now = get_clock();
169 sequence = ACCESS_ONCE(idle->sequence); 184 sequence = ACCESS_ONCE(idle->sequence);
170 idle_enter = ACCESS_ONCE(idle->idle_enter); 185 idle_enter = ACCESS_ONCE(idle->clock_idle_enter);
171 idle_exit = ACCESS_ONCE(idle->idle_exit); 186 idle_exit = ACCESS_ONCE(idle->clock_idle_exit);
172 } while ((sequence & 1) || (idle->sequence != sequence)); 187 } while ((sequence & 1) || (idle->sequence != sequence));
173 return idle_enter ? ((idle_exit ? : now) - idle_enter) : 0; 188 return idle_enter ? ((idle_exit ?: now) - idle_enter) : 0;
174} 189}
175 190
176/* 191/*
@@ -179,11 +194,11 @@ cputime64_t s390_get_idle_time(int cpu)
179 */ 194 */
180static void list_add_sorted(struct vtimer_list *timer, struct list_head *head) 195static void list_add_sorted(struct vtimer_list *timer, struct list_head *head)
181{ 196{
182 struct vtimer_list *event; 197 struct vtimer_list *tmp;
183 198
184 list_for_each_entry(event, head, entry) { 199 list_for_each_entry(tmp, head, entry) {
185 if (event->expires > timer->expires) { 200 if (tmp->expires > timer->expires) {
186 list_add_tail(&timer->entry, &event->entry); 201 list_add_tail(&timer->entry, &tmp->entry);
187 return; 202 return;
188 } 203 }
189 } 204 }
@@ -191,82 +206,45 @@ static void list_add_sorted(struct vtimer_list *timer, struct list_head *head)
191} 206}
192 207
193/* 208/*
194 * Do the callback functions of expired vtimer events. 209 * Handler for expired virtual CPU timer.
195 * Called from within the interrupt handler.
196 */
197static void do_callbacks(struct list_head *cb_list)
198{
199 struct vtimer_queue *vq;
200 struct vtimer_list *event, *tmp;
201
202 if (list_empty(cb_list))
203 return;
204
205 vq = &__get_cpu_var(virt_cpu_timer);
206
207 list_for_each_entry_safe(event, tmp, cb_list, entry) {
208 list_del_init(&event->entry);
209 (event->function)(event->data);
210 if (event->interval) {
211 /* Recharge interval timer */
212 event->expires = event->interval + vq->elapsed;
213 spin_lock(&vq->lock);
214 list_add_sorted(event, &vq->list);
215 spin_unlock(&vq->lock);
216 }
217 }
218}
219
220/*
221 * Handler for the virtual CPU timer.
222 */ 210 */
223static void do_cpu_timer_interrupt(struct ext_code ext_code, 211static void virt_timer_expire(void)
224 unsigned int param32, unsigned long param64)
225{ 212{
226 struct vtimer_queue *vq; 213 struct vtimer_list *timer, *tmp;
227 struct vtimer_list *event, *tmp; 214 unsigned long elapsed;
228 struct list_head cb_list; /* the callback queue */ 215 LIST_HEAD(cb_list);
229 __u64 elapsed, next; 216
230 217 /* walk timer list, fire all expired timers */
231 kstat_cpu(smp_processor_id()).irqs[EXTINT_TMR]++; 218 spin_lock(&virt_timer_lock);
232 INIT_LIST_HEAD(&cb_list); 219 elapsed = atomic64_read(&virt_timer_elapsed);
233 vq = &__get_cpu_var(virt_cpu_timer); 220 list_for_each_entry_safe(timer, tmp, &virt_timer_list, entry) {
234 221 if (timer->expires < elapsed)
235 /* walk timer list, fire all expired events */
236 spin_lock(&vq->lock);
237
238 elapsed = vq->elapsed + (vq->timer - S390_lowcore.async_enter_timer);
239 BUG_ON((s64) elapsed < 0);
240 vq->elapsed = 0;
241 list_for_each_entry_safe(event, tmp, &vq->list, entry) {
242 if (event->expires < elapsed)
243 /* move expired timer to the callback queue */ 222 /* move expired timer to the callback queue */
244 list_move_tail(&event->entry, &cb_list); 223 list_move_tail(&timer->entry, &cb_list);
245 else 224 else
246 event->expires -= elapsed; 225 timer->expires -= elapsed;
247 } 226 }
248 spin_unlock(&vq->lock); 227 if (!list_empty(&virt_timer_list)) {
249 228 timer = list_first_entry(&virt_timer_list,
250 do_callbacks(&cb_list); 229 struct vtimer_list, entry);
251 230 atomic64_set(&virt_timer_current, timer->expires);
252 /* next event is first in list */ 231 }
253 next = VTIMER_MAX_SLICE; 232 atomic64_sub(elapsed, &virt_timer_elapsed);
254 spin_lock(&vq->lock); 233 spin_unlock(&virt_timer_lock);
255 if (!list_empty(&vq->list)) { 234
256 event = list_first_entry(&vq->list, struct vtimer_list, entry); 235 /* Do callbacks and recharge periodic timers */
257 next = event->expires; 236 list_for_each_entry_safe(timer, tmp, &cb_list, entry) {
237 list_del_init(&timer->entry);
238 timer->function(timer->data);
239 if (timer->interval) {
240 /* Recharge interval timer */
241 timer->expires = timer->interval +
242 atomic64_read(&virt_timer_elapsed);
243 spin_lock(&virt_timer_lock);
244 list_add_sorted(timer, &virt_timer_list);
245 spin_unlock(&virt_timer_lock);
246 }
258 } 247 }
259 spin_unlock(&vq->lock);
260 /*
261 * To improve precision add the time spent by the
262 * interrupt handler to the elapsed time.
263 * Note: CPU timer counts down and we got an interrupt,
264 * the current content is negative
265 */
266 elapsed = S390_lowcore.async_enter_timer - get_vtimer();
267 set_vtimer(next - elapsed);
268 vq->timer = next - elapsed;
269 vq->elapsed = elapsed;
270} 248}
271 249
272void init_virt_timer(struct vtimer_list *timer) 250void init_virt_timer(struct vtimer_list *timer)
@@ -278,179 +256,108 @@ EXPORT_SYMBOL(init_virt_timer);
278 256
279static inline int vtimer_pending(struct vtimer_list *timer) 257static inline int vtimer_pending(struct vtimer_list *timer)
280{ 258{
281 return (!list_empty(&timer->entry)); 259 return !list_empty(&timer->entry);
282} 260}
283 261
284/*
285 * this function should only run on the specified CPU
286 */
287static void internal_add_vtimer(struct vtimer_list *timer) 262static void internal_add_vtimer(struct vtimer_list *timer)
288{ 263{
289 struct vtimer_queue *vq; 264 if (list_empty(&virt_timer_list)) {
290 unsigned long flags; 265 /* First timer, just program it. */
291 __u64 left, expires; 266 atomic64_set(&virt_timer_current, timer->expires);
292 267 atomic64_set(&virt_timer_elapsed, 0);
293 vq = &per_cpu(virt_cpu_timer, timer->cpu); 268 list_add(&timer->entry, &virt_timer_list);
294 spin_lock_irqsave(&vq->lock, flags);
295
296 BUG_ON(timer->cpu != smp_processor_id());
297
298 if (list_empty(&vq->list)) {
299 /* First timer on this cpu, just program it. */
300 list_add(&timer->entry, &vq->list);
301 set_vtimer(timer->expires);
302 vq->timer = timer->expires;
303 vq->elapsed = 0;
304 } else { 269 } else {
305 /* Check progress of old timers. */ 270 /* Update timer against current base. */
306 expires = timer->expires; 271 timer->expires += atomic64_read(&virt_timer_elapsed);
307 left = get_vtimer(); 272 if (likely((s64) timer->expires <
308 if (likely((s64) expires < (s64) left)) { 273 (s64) atomic64_read(&virt_timer_current)))
309 /* The new timer expires before the current timer. */ 274 /* The new timer expires before the current timer. */
310 set_vtimer(expires); 275 atomic64_set(&virt_timer_current, timer->expires);
311 vq->elapsed += vq->timer - left; 276 /* Insert new timer into the list. */
312 vq->timer = expires; 277 list_add_sorted(timer, &virt_timer_list);
313 } else {
314 vq->elapsed += vq->timer - left;
315 vq->timer = left;
316 }
317 /* Insert new timer into per cpu list. */
318 timer->expires += vq->elapsed;
319 list_add_sorted(timer, &vq->list);
320 } 278 }
321
322 spin_unlock_irqrestore(&vq->lock, flags);
323 /* release CPU acquired in prepare_vtimer or mod_virt_timer() */
324 put_cpu();
325} 279}
326 280
327static inline void prepare_vtimer(struct vtimer_list *timer) 281static void __add_vtimer(struct vtimer_list *timer, int periodic)
328{ 282{
329 BUG_ON(!timer->function); 283 unsigned long flags;
330 BUG_ON(!timer->expires || timer->expires > VTIMER_MAX_SLICE); 284
331 BUG_ON(vtimer_pending(timer)); 285 timer->interval = periodic ? timer->expires : 0;
332 timer->cpu = get_cpu(); 286 spin_lock_irqsave(&virt_timer_lock, flags);
287 internal_add_vtimer(timer);
288 spin_unlock_irqrestore(&virt_timer_lock, flags);
333} 289}
334 290
335/* 291/*
336 * add_virt_timer - add an oneshot virtual CPU timer 292 * add_virt_timer - add an oneshot virtual CPU timer
337 */ 293 */
338void add_virt_timer(void *new) 294void add_virt_timer(struct vtimer_list *timer)
339{ 295{
340 struct vtimer_list *timer; 296 __add_vtimer(timer, 0);
341
342 timer = (struct vtimer_list *)new;
343 prepare_vtimer(timer);
344 timer->interval = 0;
345 internal_add_vtimer(timer);
346} 297}
347EXPORT_SYMBOL(add_virt_timer); 298EXPORT_SYMBOL(add_virt_timer);
348 299
349/* 300/*
350 * add_virt_timer_int - add an interval virtual CPU timer 301 * add_virt_timer_int - add an interval virtual CPU timer
351 */ 302 */
352void add_virt_timer_periodic(void *new) 303void add_virt_timer_periodic(struct vtimer_list *timer)
353{ 304{
354 struct vtimer_list *timer; 305 __add_vtimer(timer, 1);
355
356 timer = (struct vtimer_list *)new;
357 prepare_vtimer(timer);
358 timer->interval = timer->expires;
359 internal_add_vtimer(timer);
360} 306}
361EXPORT_SYMBOL(add_virt_timer_periodic); 307EXPORT_SYMBOL(add_virt_timer_periodic);
362 308
363static int __mod_vtimer(struct vtimer_list *timer, __u64 expires, int periodic) 309static int __mod_vtimer(struct vtimer_list *timer, u64 expires, int periodic)
364{ 310{
365 struct vtimer_queue *vq;
366 unsigned long flags; 311 unsigned long flags;
367 int cpu; 312 int rc;
368 313
369 BUG_ON(!timer->function); 314 BUG_ON(!timer->function);
370 BUG_ON(!expires || expires > VTIMER_MAX_SLICE);
371 315
372 if (timer->expires == expires && vtimer_pending(timer)) 316 if (timer->expires == expires && vtimer_pending(timer))
373 return 1; 317 return 1;
374 318 spin_lock_irqsave(&virt_timer_lock, flags);
375 cpu = get_cpu(); 319 rc = vtimer_pending(timer);
376 vq = &per_cpu(virt_cpu_timer, cpu); 320 if (rc)
377 321 list_del_init(&timer->entry);
378 /* disable interrupts before test if timer is pending */ 322 timer->interval = periodic ? expires : 0;
379 spin_lock_irqsave(&vq->lock, flags);
380
381 /* if timer isn't pending add it on the current CPU */
382 if (!vtimer_pending(timer)) {
383 spin_unlock_irqrestore(&vq->lock, flags);
384
385 if (periodic)
386 timer->interval = expires;
387 else
388 timer->interval = 0;
389 timer->expires = expires;
390 timer->cpu = cpu;
391 internal_add_vtimer(timer);
392 return 0;
393 }
394
395 /* check if we run on the right CPU */
396 BUG_ON(timer->cpu != cpu);
397
398 list_del_init(&timer->entry);
399 timer->expires = expires; 323 timer->expires = expires;
400 if (periodic)
401 timer->interval = expires;
402
403 /* the timer can't expire anymore so we can release the lock */
404 spin_unlock_irqrestore(&vq->lock, flags);
405 internal_add_vtimer(timer); 324 internal_add_vtimer(timer);
406 return 1; 325 spin_unlock_irqrestore(&virt_timer_lock, flags);
326 return rc;
407} 327}
408 328
409/* 329/*
410 * If we change a pending timer the function must be called on the CPU
411 * where the timer is running on.
412 *
413 * returns whether it has modified a pending timer (1) or not (0) 330 * returns whether it has modified a pending timer (1) or not (0)
414 */ 331 */
415int mod_virt_timer(struct vtimer_list *timer, __u64 expires) 332int mod_virt_timer(struct vtimer_list *timer, u64 expires)
416{ 333{
417 return __mod_vtimer(timer, expires, 0); 334 return __mod_vtimer(timer, expires, 0);
418} 335}
419EXPORT_SYMBOL(mod_virt_timer); 336EXPORT_SYMBOL(mod_virt_timer);
420 337
421/* 338/*
422 * If we change a pending timer the function must be called on the CPU
423 * where the timer is running on.
424 *
425 * returns whether it has modified a pending timer (1) or not (0) 339 * returns whether it has modified a pending timer (1) or not (0)
426 */ 340 */
427int mod_virt_timer_periodic(struct vtimer_list *timer, __u64 expires) 341int mod_virt_timer_periodic(struct vtimer_list *timer, u64 expires)
428{ 342{
429 return __mod_vtimer(timer, expires, 1); 343 return __mod_vtimer(timer, expires, 1);
430} 344}
431EXPORT_SYMBOL(mod_virt_timer_periodic); 345EXPORT_SYMBOL(mod_virt_timer_periodic);
432 346
433/* 347/*
434 * delete a virtual timer 348 * Delete a virtual timer.
435 * 349 *
436 * returns whether the deleted timer was pending (1) or not (0) 350 * returns whether the deleted timer was pending (1) or not (0)
437 */ 351 */
438int del_virt_timer(struct vtimer_list *timer) 352int del_virt_timer(struct vtimer_list *timer)
439{ 353{
440 unsigned long flags; 354 unsigned long flags;
441 struct vtimer_queue *vq;
442 355
443 /* check if timer is pending */
444 if (!vtimer_pending(timer)) 356 if (!vtimer_pending(timer))
445 return 0; 357 return 0;
446 358 spin_lock_irqsave(&virt_timer_lock, flags);
447 vq = &per_cpu(virt_cpu_timer, timer->cpu);
448 spin_lock_irqsave(&vq->lock, flags);
449
450 /* we don't interrupt a running timer, just let it expire! */
451 list_del_init(&timer->entry); 359 list_del_init(&timer->entry);
452 360 spin_unlock_irqrestore(&virt_timer_lock, flags);
453 spin_unlock_irqrestore(&vq->lock, flags);
454 return 1; 361 return 1;
455} 362}
456EXPORT_SYMBOL(del_virt_timer); 363EXPORT_SYMBOL(del_virt_timer);
@@ -458,20 +365,10 @@ EXPORT_SYMBOL(del_virt_timer);
458/* 365/*
459 * Start the virtual CPU timer on the current CPU. 366 * Start the virtual CPU timer on the current CPU.
460 */ 367 */
461void init_cpu_vtimer(void) 368void __cpuinit init_cpu_vtimer(void)
462{ 369{
463 struct vtimer_queue *vq;
464
465 /* initialize per cpu vtimer structure */
466 vq = &__get_cpu_var(virt_cpu_timer);
467 INIT_LIST_HEAD(&vq->list);
468 spin_lock_init(&vq->lock);
469
470 /* enable cpu timer interrupts */
471 __ctl_set_bit(0,10);
472
473 /* set initial cpu timer */ 370 /* set initial cpu timer */
474 set_vtimer(0x7fffffffffffffffULL); 371 set_vtimer(VTIMER_MAX_SLICE);
475} 372}
476 373
477static int __cpuinit s390_nohz_notify(struct notifier_block *self, 374static int __cpuinit s390_nohz_notify(struct notifier_block *self,
@@ -493,12 +390,7 @@ static int __cpuinit s390_nohz_notify(struct notifier_block *self,
493 390
494void __init vtime_init(void) 391void __init vtime_init(void)
495{ 392{
496 /* request the cpu timer external interrupt */
497 if (register_external_interrupt(0x1005, do_cpu_timer_interrupt))
498 panic("Couldn't request external interrupt 0x1005");
499
500 /* Enable cpu timer interrupts on the boot cpu. */ 393 /* Enable cpu timer interrupts on the boot cpu. */
501 init_cpu_vtimer(); 394 init_cpu_vtimer();
502 cpu_notifier(s390_nohz_notify, 0); 395 cpu_notifier(s390_nohz_notify, 0);
503} 396}
504
diff --git a/arch/s390/kvm/diag.c b/arch/s390/kvm/diag.c
index b23d9ac77dfc..c88bb7793390 100644
--- a/arch/s390/kvm/diag.c
+++ b/arch/s390/kvm/diag.c
@@ -1,7 +1,7 @@
1/* 1/*
2 * diag.c - handling diagnose instructions 2 * handling diagnose instructions
3 * 3 *
4 * Copyright IBM Corp. 2008,2011 4 * Copyright IBM Corp. 2008, 2011
5 * 5 *
6 * This program is free software; you can redistribute it and/or modify 6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License (version 2 only) 7 * it under the terms of the GNU General Public License (version 2 only)
diff --git a/arch/s390/kvm/gaccess.h b/arch/s390/kvm/gaccess.h
index c86f6ae43f76..4703f129e95e 100644
--- a/arch/s390/kvm/gaccess.h
+++ b/arch/s390/kvm/gaccess.h
@@ -1,7 +1,7 @@
1/* 1/*
2 * access.h - access guest memory 2 * access guest memory
3 * 3 *
4 * Copyright IBM Corp. 2008,2009 4 * Copyright IBM Corp. 2008, 2009
5 * 5 *
6 * This program is free software; you can redistribute it and/or modify 6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License (version 2 only) 7 * it under the terms of the GNU General Public License (version 2 only)
diff --git a/arch/s390/kvm/intercept.c b/arch/s390/kvm/intercept.c
index 979cbe55bf5e..adae539f12e2 100644
--- a/arch/s390/kvm/intercept.c
+++ b/arch/s390/kvm/intercept.c
@@ -1,7 +1,7 @@
1/* 1/*
2 * intercept.c - in-kernel handling for sie intercepts 2 * in-kernel handling for sie intercepts
3 * 3 *
4 * Copyright IBM Corp. 2008,2009 4 * Copyright IBM Corp. 2008, 2009
5 * 5 *
6 * This program is free software; you can redistribute it and/or modify 6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License (version 2 only) 7 * it under the terms of the GNU General Public License (version 2 only)
diff --git a/arch/s390/kvm/interrupt.c b/arch/s390/kvm/interrupt.c
index 2d9f9a72bb81..b7bc1aac8ed2 100644
--- a/arch/s390/kvm/interrupt.c
+++ b/arch/s390/kvm/interrupt.c
@@ -1,5 +1,5 @@
1/* 1/*
2 * interrupt.c - handling kvm guest interrupts 2 * handling kvm guest interrupts
3 * 3 *
4 * Copyright IBM Corp. 2008 4 * Copyright IBM Corp. 2008
5 * 5 *
diff --git a/arch/s390/kvm/kvm-s390.c b/arch/s390/kvm/kvm-s390.c
index 664766d0c83c..d470ccbfabae 100644
--- a/arch/s390/kvm/kvm-s390.c
+++ b/arch/s390/kvm/kvm-s390.c
@@ -1,7 +1,7 @@
1/* 1/*
2 * s390host.c -- hosting zSeries kernel virtual machines 2 * hosting zSeries kernel virtual machines
3 * 3 *
4 * Copyright IBM Corp. 2008,2009 4 * Copyright IBM Corp. 2008, 2009
5 * 5 *
6 * This program is free software; you can redistribute it and/or modify 6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License (version 2 only) 7 * it under the terms of the GNU General Public License (version 2 only)
@@ -347,6 +347,7 @@ static void kvm_s390_vcpu_initial_reset(struct kvm_vcpu *vcpu)
347 vcpu->arch.guest_fpregs.fpc = 0; 347 vcpu->arch.guest_fpregs.fpc = 0;
348 asm volatile("lfpc %0" : : "Q" (vcpu->arch.guest_fpregs.fpc)); 348 asm volatile("lfpc %0" : : "Q" (vcpu->arch.guest_fpregs.fpc));
349 vcpu->arch.sie_block->gbea = 1; 349 vcpu->arch.sie_block->gbea = 1;
350 atomic_set_mask(CPUSTAT_STOPPED, &vcpu->arch.sie_block->cpuflags);
350} 351}
351 352
352int kvm_arch_vcpu_setup(struct kvm_vcpu *vcpu) 353int kvm_arch_vcpu_setup(struct kvm_vcpu *vcpu)
diff --git a/arch/s390/kvm/kvm-s390.h b/arch/s390/kvm/kvm-s390.h
index 2294377975e8..d75bc5e92c5b 100644
--- a/arch/s390/kvm/kvm-s390.h
+++ b/arch/s390/kvm/kvm-s390.h
@@ -1,7 +1,7 @@
1/* 1/*
2 * kvm_s390.h - definition for kvm on s390 2 * definition for kvm on s390
3 * 3 *
4 * Copyright IBM Corp. 2008,2009 4 * Copyright IBM Corp. 2008, 2009
5 * 5 *
6 * This program is free software; you can redistribute it and/or modify 6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License (version 2 only) 7 * it under the terms of the GNU General Public License (version 2 only)
diff --git a/arch/s390/kvm/priv.c b/arch/s390/kvm/priv.c
index 68a6b2ed16bf..60da903d6f3e 100644
--- a/arch/s390/kvm/priv.c
+++ b/arch/s390/kvm/priv.c
@@ -1,5 +1,5 @@
1/* 1/*
2 * priv.c - handling privileged instructions 2 * handling privileged instructions
3 * 3 *
4 * Copyright IBM Corp. 2008 4 * Copyright IBM Corp. 2008
5 * 5 *
diff --git a/arch/s390/kvm/sigp.c b/arch/s390/kvm/sigp.c
index 0ad4cf238391..56f80e1f98f7 100644
--- a/arch/s390/kvm/sigp.c
+++ b/arch/s390/kvm/sigp.c
@@ -1,7 +1,7 @@
1/* 1/*
2 * sigp.c - handlinge interprocessor communication 2 * handling interprocessor communication
3 * 3 *
4 * Copyright IBM Corp. 2008,2009 4 * Copyright IBM Corp. 2008, 2009
5 * 5 *
6 * This program is free software; you can redistribute it and/or modify 6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License (version 2 only) 7 * it under the terms of the GNU General Public License (version 2 only)
@@ -15,38 +15,10 @@
15#include <linux/kvm.h> 15#include <linux/kvm.h>
16#include <linux/kvm_host.h> 16#include <linux/kvm_host.h>
17#include <linux/slab.h> 17#include <linux/slab.h>
18#include <asm/sigp.h>
18#include "gaccess.h" 19#include "gaccess.h"
19#include "kvm-s390.h" 20#include "kvm-s390.h"
20 21
21/* sigp order codes */
22#define SIGP_SENSE 0x01
23#define SIGP_EXTERNAL_CALL 0x02
24#define SIGP_EMERGENCY 0x03
25#define SIGP_START 0x04
26#define SIGP_STOP 0x05
27#define SIGP_RESTART 0x06
28#define SIGP_STOP_STORE_STATUS 0x09
29#define SIGP_INITIAL_CPU_RESET 0x0b
30#define SIGP_CPU_RESET 0x0c
31#define SIGP_SET_PREFIX 0x0d
32#define SIGP_STORE_STATUS_ADDR 0x0e
33#define SIGP_SET_ARCH 0x12
34#define SIGP_SENSE_RUNNING 0x15
35
36/* cpu status bits */
37#define SIGP_STAT_EQUIPMENT_CHECK 0x80000000UL
38#define SIGP_STAT_NOT_RUNNING 0x00000400UL
39#define SIGP_STAT_INCORRECT_STATE 0x00000200UL
40#define SIGP_STAT_INVALID_PARAMETER 0x00000100UL
41#define SIGP_STAT_EXT_CALL_PENDING 0x00000080UL
42#define SIGP_STAT_STOPPED 0x00000040UL
43#define SIGP_STAT_OPERATOR_INTERV 0x00000020UL
44#define SIGP_STAT_CHECK_STOP 0x00000010UL
45#define SIGP_STAT_INOPERATIVE 0x00000004UL
46#define SIGP_STAT_INVALID_ORDER 0x00000002UL
47#define SIGP_STAT_RECEIVER_CHECK 0x00000001UL
48
49
50static int __sigp_sense(struct kvm_vcpu *vcpu, u16 cpu_addr, 22static int __sigp_sense(struct kvm_vcpu *vcpu, u16 cpu_addr,
51 u64 *reg) 23 u64 *reg)
52{ 24{
@@ -54,19 +26,23 @@ static int __sigp_sense(struct kvm_vcpu *vcpu, u16 cpu_addr,
54 int rc; 26 int rc;
55 27
56 if (cpu_addr >= KVM_MAX_VCPUS) 28 if (cpu_addr >= KVM_MAX_VCPUS)
57 return 3; /* not operational */ 29 return SIGP_CC_NOT_OPERATIONAL;
58 30
59 spin_lock(&fi->lock); 31 spin_lock(&fi->lock);
60 if (fi->local_int[cpu_addr] == NULL) 32 if (fi->local_int[cpu_addr] == NULL)
61 rc = 3; /* not operational */ 33 rc = SIGP_CC_NOT_OPERATIONAL;
62 else if (!(atomic_read(fi->local_int[cpu_addr]->cpuflags) 34 else if (!(atomic_read(fi->local_int[cpu_addr]->cpuflags)
63 & CPUSTAT_STOPPED)) { 35 & (CPUSTAT_ECALL_PEND | CPUSTAT_STOPPED)))
64 *reg &= 0xffffffff00000000UL; 36 rc = SIGP_CC_ORDER_CODE_ACCEPTED;
65 rc = 1; /* status stored */ 37 else {
66 } else {
67 *reg &= 0xffffffff00000000UL; 38 *reg &= 0xffffffff00000000UL;
68 *reg |= SIGP_STAT_STOPPED; 39 if (atomic_read(fi->local_int[cpu_addr]->cpuflags)
69 rc = 1; /* status stored */ 40 & CPUSTAT_ECALL_PEND)
41 *reg |= SIGP_STATUS_EXT_CALL_PENDING;
42 if (atomic_read(fi->local_int[cpu_addr]->cpuflags)
43 & CPUSTAT_STOPPED)
44 *reg |= SIGP_STATUS_STOPPED;
45 rc = SIGP_CC_STATUS_STORED;
70 } 46 }
71 spin_unlock(&fi->lock); 47 spin_unlock(&fi->lock);
72 48
@@ -82,7 +58,7 @@ static int __sigp_emergency(struct kvm_vcpu *vcpu, u16 cpu_addr)
82 int rc; 58 int rc;
83 59
84 if (cpu_addr >= KVM_MAX_VCPUS) 60 if (cpu_addr >= KVM_MAX_VCPUS)
85 return 3; /* not operational */ 61 return SIGP_CC_NOT_OPERATIONAL;
86 62
87 inti = kzalloc(sizeof(*inti), GFP_KERNEL); 63 inti = kzalloc(sizeof(*inti), GFP_KERNEL);
88 if (!inti) 64 if (!inti)
@@ -94,7 +70,7 @@ static int __sigp_emergency(struct kvm_vcpu *vcpu, u16 cpu_addr)
94 spin_lock(&fi->lock); 70 spin_lock(&fi->lock);
95 li = fi->local_int[cpu_addr]; 71 li = fi->local_int[cpu_addr];
96 if (li == NULL) { 72 if (li == NULL) {
97 rc = 3; /* not operational */ 73 rc = SIGP_CC_NOT_OPERATIONAL;
98 kfree(inti); 74 kfree(inti);
99 goto unlock; 75 goto unlock;
100 } 76 }
@@ -105,7 +81,7 @@ static int __sigp_emergency(struct kvm_vcpu *vcpu, u16 cpu_addr)
105 if (waitqueue_active(&li->wq)) 81 if (waitqueue_active(&li->wq))
106 wake_up_interruptible(&li->wq); 82 wake_up_interruptible(&li->wq);
107 spin_unlock_bh(&li->lock); 83 spin_unlock_bh(&li->lock);
108 rc = 0; /* order accepted */ 84 rc = SIGP_CC_ORDER_CODE_ACCEPTED;
109 VCPU_EVENT(vcpu, 4, "sent sigp emerg to cpu %x", cpu_addr); 85 VCPU_EVENT(vcpu, 4, "sent sigp emerg to cpu %x", cpu_addr);
110unlock: 86unlock:
111 spin_unlock(&fi->lock); 87 spin_unlock(&fi->lock);
@@ -120,7 +96,7 @@ static int __sigp_external_call(struct kvm_vcpu *vcpu, u16 cpu_addr)
120 int rc; 96 int rc;
121 97
122 if (cpu_addr >= KVM_MAX_VCPUS) 98 if (cpu_addr >= KVM_MAX_VCPUS)
123 return 3; /* not operational */ 99 return SIGP_CC_NOT_OPERATIONAL;
124 100
125 inti = kzalloc(sizeof(*inti), GFP_KERNEL); 101 inti = kzalloc(sizeof(*inti), GFP_KERNEL);
126 if (!inti) 102 if (!inti)
@@ -132,7 +108,7 @@ static int __sigp_external_call(struct kvm_vcpu *vcpu, u16 cpu_addr)
132 spin_lock(&fi->lock); 108 spin_lock(&fi->lock);
133 li = fi->local_int[cpu_addr]; 109 li = fi->local_int[cpu_addr];
134 if (li == NULL) { 110 if (li == NULL) {
135 rc = 3; /* not operational */ 111 rc = SIGP_CC_NOT_OPERATIONAL;
136 kfree(inti); 112 kfree(inti);
137 goto unlock; 113 goto unlock;
138 } 114 }
@@ -143,7 +119,7 @@ static int __sigp_external_call(struct kvm_vcpu *vcpu, u16 cpu_addr)
143 if (waitqueue_active(&li->wq)) 119 if (waitqueue_active(&li->wq))
144 wake_up_interruptible(&li->wq); 120 wake_up_interruptible(&li->wq);
145 spin_unlock_bh(&li->lock); 121 spin_unlock_bh(&li->lock);
146 rc = 0; /* order accepted */ 122 rc = SIGP_CC_ORDER_CODE_ACCEPTED;
147 VCPU_EVENT(vcpu, 4, "sent sigp ext call to cpu %x", cpu_addr); 123 VCPU_EVENT(vcpu, 4, "sent sigp ext call to cpu %x", cpu_addr);
148unlock: 124unlock:
149 spin_unlock(&fi->lock); 125 spin_unlock(&fi->lock);
@@ -171,7 +147,7 @@ static int __inject_sigp_stop(struct kvm_s390_local_interrupt *li, int action)
171out: 147out:
172 spin_unlock_bh(&li->lock); 148 spin_unlock_bh(&li->lock);
173 149
174 return 0; /* order accepted */ 150 return SIGP_CC_ORDER_CODE_ACCEPTED;
175} 151}
176 152
177static int __sigp_stop(struct kvm_vcpu *vcpu, u16 cpu_addr, int action) 153static int __sigp_stop(struct kvm_vcpu *vcpu, u16 cpu_addr, int action)
@@ -181,12 +157,12 @@ static int __sigp_stop(struct kvm_vcpu *vcpu, u16 cpu_addr, int action)
181 int rc; 157 int rc;
182 158
183 if (cpu_addr >= KVM_MAX_VCPUS) 159 if (cpu_addr >= KVM_MAX_VCPUS)
184 return 3; /* not operational */ 160 return SIGP_CC_NOT_OPERATIONAL;
185 161
186 spin_lock(&fi->lock); 162 spin_lock(&fi->lock);
187 li = fi->local_int[cpu_addr]; 163 li = fi->local_int[cpu_addr];
188 if (li == NULL) { 164 if (li == NULL) {
189 rc = 3; /* not operational */ 165 rc = SIGP_CC_NOT_OPERATIONAL;
190 goto unlock; 166 goto unlock;
191 } 167 }
192 168
@@ -210,11 +186,11 @@ static int __sigp_set_arch(struct kvm_vcpu *vcpu, u32 parameter)
210 186
211 switch (parameter & 0xff) { 187 switch (parameter & 0xff) {
212 case 0: 188 case 0:
213 rc = 3; /* not operational */ 189 rc = SIGP_CC_NOT_OPERATIONAL;
214 break; 190 break;
215 case 1: 191 case 1:
216 case 2: 192 case 2:
217 rc = 0; /* order accepted */ 193 rc = SIGP_CC_ORDER_CODE_ACCEPTED;
218 break; 194 break;
219 default: 195 default:
220 rc = -EOPNOTSUPP; 196 rc = -EOPNOTSUPP;
@@ -235,21 +211,23 @@ static int __sigp_set_prefix(struct kvm_vcpu *vcpu, u16 cpu_addr, u32 address,
235 address = address & 0x7fffe000u; 211 address = address & 0x7fffe000u;
236 if (copy_from_guest_absolute(vcpu, &tmp, address, 1) || 212 if (copy_from_guest_absolute(vcpu, &tmp, address, 1) ||
237 copy_from_guest_absolute(vcpu, &tmp, address + PAGE_SIZE, 1)) { 213 copy_from_guest_absolute(vcpu, &tmp, address + PAGE_SIZE, 1)) {
238 *reg |= SIGP_STAT_INVALID_PARAMETER; 214 *reg &= 0xffffffff00000000UL;
239 return 1; /* invalid parameter */ 215 *reg |= SIGP_STATUS_INVALID_PARAMETER;
216 return SIGP_CC_STATUS_STORED;
240 } 217 }
241 218
242 inti = kzalloc(sizeof(*inti), GFP_KERNEL); 219 inti = kzalloc(sizeof(*inti), GFP_KERNEL);
243 if (!inti) 220 if (!inti)
244 return 2; /* busy */ 221 return SIGP_CC_BUSY;
245 222
246 spin_lock(&fi->lock); 223 spin_lock(&fi->lock);
247 if (cpu_addr < KVM_MAX_VCPUS) 224 if (cpu_addr < KVM_MAX_VCPUS)
248 li = fi->local_int[cpu_addr]; 225 li = fi->local_int[cpu_addr];
249 226
250 if (li == NULL) { 227 if (li == NULL) {
251 rc = 1; /* incorrect state */ 228 *reg &= 0xffffffff00000000UL;
252 *reg &= SIGP_STAT_INCORRECT_STATE; 229 *reg |= SIGP_STATUS_INCORRECT_STATE;
230 rc = SIGP_CC_STATUS_STORED;
253 kfree(inti); 231 kfree(inti);
254 goto out_fi; 232 goto out_fi;
255 } 233 }
@@ -257,8 +235,9 @@ static int __sigp_set_prefix(struct kvm_vcpu *vcpu, u16 cpu_addr, u32 address,
257 spin_lock_bh(&li->lock); 235 spin_lock_bh(&li->lock);
258 /* cpu must be in stopped state */ 236 /* cpu must be in stopped state */
259 if (!(atomic_read(li->cpuflags) & CPUSTAT_STOPPED)) { 237 if (!(atomic_read(li->cpuflags) & CPUSTAT_STOPPED)) {
260 rc = 1; /* incorrect state */ 238 *reg &= 0xffffffff00000000UL;
261 *reg &= SIGP_STAT_INCORRECT_STATE; 239 *reg |= SIGP_STATUS_INCORRECT_STATE;
240 rc = SIGP_CC_STATUS_STORED;
262 kfree(inti); 241 kfree(inti);
263 goto out_li; 242 goto out_li;
264 } 243 }
@@ -270,7 +249,7 @@ static int __sigp_set_prefix(struct kvm_vcpu *vcpu, u16 cpu_addr, u32 address,
270 atomic_set(&li->active, 1); 249 atomic_set(&li->active, 1);
271 if (waitqueue_active(&li->wq)) 250 if (waitqueue_active(&li->wq))
272 wake_up_interruptible(&li->wq); 251 wake_up_interruptible(&li->wq);
273 rc = 0; /* order accepted */ 252 rc = SIGP_CC_ORDER_CODE_ACCEPTED;
274 253
275 VCPU_EVENT(vcpu, 4, "set prefix of cpu %02x to %x", cpu_addr, address); 254 VCPU_EVENT(vcpu, 4, "set prefix of cpu %02x to %x", cpu_addr, address);
276out_li: 255out_li:
@@ -287,21 +266,21 @@ static int __sigp_sense_running(struct kvm_vcpu *vcpu, u16 cpu_addr,
287 struct kvm_s390_float_interrupt *fi = &vcpu->kvm->arch.float_int; 266 struct kvm_s390_float_interrupt *fi = &vcpu->kvm->arch.float_int;
288 267
289 if (cpu_addr >= KVM_MAX_VCPUS) 268 if (cpu_addr >= KVM_MAX_VCPUS)
290 return 3; /* not operational */ 269 return SIGP_CC_NOT_OPERATIONAL;
291 270
292 spin_lock(&fi->lock); 271 spin_lock(&fi->lock);
293 if (fi->local_int[cpu_addr] == NULL) 272 if (fi->local_int[cpu_addr] == NULL)
294 rc = 3; /* not operational */ 273 rc = SIGP_CC_NOT_OPERATIONAL;
295 else { 274 else {
296 if (atomic_read(fi->local_int[cpu_addr]->cpuflags) 275 if (atomic_read(fi->local_int[cpu_addr]->cpuflags)
297 & CPUSTAT_RUNNING) { 276 & CPUSTAT_RUNNING) {
298 /* running */ 277 /* running */
299 rc = 1; 278 rc = SIGP_CC_ORDER_CODE_ACCEPTED;
300 } else { 279 } else {
301 /* not running */ 280 /* not running */
302 *reg &= 0xffffffff00000000UL; 281 *reg &= 0xffffffff00000000UL;
303 *reg |= SIGP_STAT_NOT_RUNNING; 282 *reg |= SIGP_STATUS_NOT_RUNNING;
304 rc = 0; 283 rc = SIGP_CC_STATUS_STORED;
305 } 284 }
306 } 285 }
307 spin_unlock(&fi->lock); 286 spin_unlock(&fi->lock);
@@ -314,23 +293,23 @@ static int __sigp_sense_running(struct kvm_vcpu *vcpu, u16 cpu_addr,
314 293
315static int __sigp_restart(struct kvm_vcpu *vcpu, u16 cpu_addr) 294static int __sigp_restart(struct kvm_vcpu *vcpu, u16 cpu_addr)
316{ 295{
317 int rc = 0;
318 struct kvm_s390_float_interrupt *fi = &vcpu->kvm->arch.float_int; 296 struct kvm_s390_float_interrupt *fi = &vcpu->kvm->arch.float_int;
319 struct kvm_s390_local_interrupt *li; 297 struct kvm_s390_local_interrupt *li;
298 int rc = SIGP_CC_ORDER_CODE_ACCEPTED;
320 299
321 if (cpu_addr >= KVM_MAX_VCPUS) 300 if (cpu_addr >= KVM_MAX_VCPUS)
322 return 3; /* not operational */ 301 return SIGP_CC_NOT_OPERATIONAL;
323 302
324 spin_lock(&fi->lock); 303 spin_lock(&fi->lock);
325 li = fi->local_int[cpu_addr]; 304 li = fi->local_int[cpu_addr];
326 if (li == NULL) { 305 if (li == NULL) {
327 rc = 3; /* not operational */ 306 rc = SIGP_CC_NOT_OPERATIONAL;
328 goto out; 307 goto out;
329 } 308 }
330 309
331 spin_lock_bh(&li->lock); 310 spin_lock_bh(&li->lock);
332 if (li->action_bits & ACTION_STOP_ON_STOP) 311 if (li->action_bits & ACTION_STOP_ON_STOP)
333 rc = 2; /* busy */ 312 rc = SIGP_CC_BUSY;
334 else 313 else
335 VCPU_EVENT(vcpu, 4, "sigp restart %x to handle userspace", 314 VCPU_EVENT(vcpu, 4, "sigp restart %x to handle userspace",
336 cpu_addr); 315 cpu_addr);
@@ -375,7 +354,7 @@ int kvm_s390_handle_sigp(struct kvm_vcpu *vcpu)
375 vcpu->stat.instruction_sigp_external_call++; 354 vcpu->stat.instruction_sigp_external_call++;
376 rc = __sigp_external_call(vcpu, cpu_addr); 355 rc = __sigp_external_call(vcpu, cpu_addr);
377 break; 356 break;
378 case SIGP_EMERGENCY: 357 case SIGP_EMERGENCY_SIGNAL:
379 vcpu->stat.instruction_sigp_emergency++; 358 vcpu->stat.instruction_sigp_emergency++;
380 rc = __sigp_emergency(vcpu, cpu_addr); 359 rc = __sigp_emergency(vcpu, cpu_addr);
381 break; 360 break;
@@ -383,12 +362,12 @@ int kvm_s390_handle_sigp(struct kvm_vcpu *vcpu)
383 vcpu->stat.instruction_sigp_stop++; 362 vcpu->stat.instruction_sigp_stop++;
384 rc = __sigp_stop(vcpu, cpu_addr, ACTION_STOP_ON_STOP); 363 rc = __sigp_stop(vcpu, cpu_addr, ACTION_STOP_ON_STOP);
385 break; 364 break;
386 case SIGP_STOP_STORE_STATUS: 365 case SIGP_STOP_AND_STORE_STATUS:
387 vcpu->stat.instruction_sigp_stop++; 366 vcpu->stat.instruction_sigp_stop++;
388 rc = __sigp_stop(vcpu, cpu_addr, ACTION_STORE_ON_STOP | 367 rc = __sigp_stop(vcpu, cpu_addr, ACTION_STORE_ON_STOP |
389 ACTION_STOP_ON_STOP); 368 ACTION_STOP_ON_STOP);
390 break; 369 break;
391 case SIGP_SET_ARCH: 370 case SIGP_SET_ARCHITECTURE:
392 vcpu->stat.instruction_sigp_arch++; 371 vcpu->stat.instruction_sigp_arch++;
393 rc = __sigp_set_arch(vcpu, parameter); 372 rc = __sigp_set_arch(vcpu, parameter);
394 break; 373 break;
@@ -405,7 +384,7 @@ int kvm_s390_handle_sigp(struct kvm_vcpu *vcpu)
405 case SIGP_RESTART: 384 case SIGP_RESTART:
406 vcpu->stat.instruction_sigp_restart++; 385 vcpu->stat.instruction_sigp_restart++;
407 rc = __sigp_restart(vcpu, cpu_addr); 386 rc = __sigp_restart(vcpu, cpu_addr);
408 if (rc == 2) /* busy */ 387 if (rc == SIGP_CC_BUSY)
409 break; 388 break;
410 /* user space must know about restart */ 389 /* user space must know about restart */
411 default: 390 default:
diff --git a/arch/s390/lib/delay.c b/arch/s390/lib/delay.c
index 9f1f71e85778..42d0cf89121d 100644
--- a/arch/s390/lib/delay.c
+++ b/arch/s390/lib/delay.c
@@ -1,7 +1,7 @@
1/* 1/*
2 * Precise Delay Loops for S390 2 * Precise Delay Loops for S390
3 * 3 *
4 * Copyright IBM Corp. 1999,2008 4 * Copyright IBM Corp. 1999, 2008
5 * Author(s): Martin Schwidefsky <schwidefsky@de.ibm.com>, 5 * Author(s): Martin Schwidefsky <schwidefsky@de.ibm.com>,
6 * Heiko Carstens <heiko.carstens@de.ibm.com>, 6 * Heiko Carstens <heiko.carstens@de.ibm.com>,
7 */ 7 */
@@ -12,8 +12,8 @@
12#include <linux/module.h> 12#include <linux/module.h>
13#include <linux/irqflags.h> 13#include <linux/irqflags.h>
14#include <linux/interrupt.h> 14#include <linux/interrupt.h>
15#include <asm/vtimer.h>
15#include <asm/div64.h> 16#include <asm/div64.h>
16#include <asm/timer.h>
17 17
18void __delay(unsigned long loops) 18void __delay(unsigned long loops)
19{ 19{
diff --git a/arch/s390/lib/div64.c b/arch/s390/lib/div64.c
index d9e62c0b576a..261152f83242 100644
--- a/arch/s390/lib/div64.c
+++ b/arch/s390/lib/div64.c
@@ -1,9 +1,7 @@
1/* 1/*
2 * arch/s390/lib/div64.c
3 *
4 * __div64_32 implementation for 31 bit. 2 * __div64_32 implementation for 31 bit.
5 * 3 *
6 * Copyright (C) IBM Corp. 2006 4 * Copyright IBM Corp. 2006
7 * Author(s): Martin Schwidefsky (schwidefsky@de.ibm.com), 5 * Author(s): Martin Schwidefsky (schwidefsky@de.ibm.com),
8 */ 6 */
9 7
diff --git a/arch/s390/lib/spinlock.c b/arch/s390/lib/spinlock.c
index 093eb694d9c1..f709983f41f8 100644
--- a/arch/s390/lib/spinlock.c
+++ b/arch/s390/lib/spinlock.c
@@ -1,8 +1,7 @@
1/* 1/*
2 * arch/s390/lib/spinlock.c
3 * Out of line spinlock code. 2 * Out of line spinlock code.
4 * 3 *
5 * Copyright (C) IBM Corp. 2004, 2006 4 * Copyright IBM Corp. 2004, 2006
6 * Author(s): Martin Schwidefsky (schwidefsky@de.ibm.com) 5 * Author(s): Martin Schwidefsky (schwidefsky@de.ibm.com)
7 */ 6 */
8 7
diff --git a/arch/s390/lib/string.c b/arch/s390/lib/string.c
index 4143b7c19096..846ec64ab2c9 100644
--- a/arch/s390/lib/string.c
+++ b/arch/s390/lib/string.c
@@ -1,9 +1,8 @@
1/* 1/*
2 * arch/s390/lib/string.c
3 * Optimized string functions 2 * Optimized string functions
4 * 3 *
5 * S390 version 4 * S390 version
6 * Copyright (C) 2004 IBM Deutschland Entwicklung GmbH, IBM Corporation 5 * Copyright IBM Corp. 2004
7 * Author(s): Martin Schwidefsky (schwidefsky@de.ibm.com) 6 * Author(s): Martin Schwidefsky (schwidefsky@de.ibm.com)
8 */ 7 */
9 8
diff --git a/arch/s390/lib/uaccess.h b/arch/s390/lib/uaccess.h
index 1d2536cb630b..315dbe09983e 100644
--- a/arch/s390/lib/uaccess.h
+++ b/arch/s390/lib/uaccess.h
@@ -1,6 +1,4 @@
1/* 1/*
2 * arch/s390/uaccess.h
3 *
4 * Copyright IBM Corp. 2007 2 * Copyright IBM Corp. 2007
5 * 3 *
6 */ 4 */
diff --git a/arch/s390/lib/uaccess_mvcos.c b/arch/s390/lib/uaccess_mvcos.c
index 58a75a8ae90c..2443ae476e33 100644
--- a/arch/s390/lib/uaccess_mvcos.c
+++ b/arch/s390/lib/uaccess_mvcos.c
@@ -1,9 +1,7 @@
1/* 1/*
2 * arch/s390/lib/uaccess_mvcos.c
3 *
4 * Optimized user space space access functions based on mvcos. 2 * Optimized user space space access functions based on mvcos.
5 * 3 *
6 * Copyright (C) IBM Corp. 2006 4 * Copyright IBM Corp. 2006
7 * Author(s): Martin Schwidefsky (schwidefsky@de.ibm.com), 5 * Author(s): Martin Schwidefsky (schwidefsky@de.ibm.com),
8 * Gerald Schaefer (gerald.schaefer@de.ibm.com) 6 * Gerald Schaefer (gerald.schaefer@de.ibm.com)
9 */ 7 */
diff --git a/arch/s390/lib/uaccess_pt.c b/arch/s390/lib/uaccess_pt.c
index 342ae35a5ba9..60ee2b883797 100644
--- a/arch/s390/lib/uaccess_pt.c
+++ b/arch/s390/lib/uaccess_pt.c
@@ -1,6 +1,4 @@
1/* 1/*
2 * arch/s390/lib/uaccess_pt.c
3 *
4 * User access functions based on page table walks for enhanced 2 * User access functions based on page table walks for enhanced
5 * system layout without hardware support. 3 * system layout without hardware support.
6 * 4 *
diff --git a/arch/s390/lib/uaccess_std.c b/arch/s390/lib/uaccess_std.c
index 57e94298539b..6fbd06338270 100644
--- a/arch/s390/lib/uaccess_std.c
+++ b/arch/s390/lib/uaccess_std.c
@@ -1,10 +1,8 @@
1/* 1/*
2 * arch/s390/lib/uaccess_std.c
3 *
4 * Standard user space access functions based on mvcp/mvcs and doing 2 * Standard user space access functions based on mvcp/mvcs and doing
5 * interesting things in the secondary space mode. 3 * interesting things in the secondary space mode.
6 * 4 *
7 * Copyright (C) IBM Corp. 2006 5 * Copyright IBM Corp. 2006
8 * Author(s): Martin Schwidefsky (schwidefsky@de.ibm.com), 6 * Author(s): Martin Schwidefsky (schwidefsky@de.ibm.com),
9 * Gerald Schaefer (gerald.schaefer@de.ibm.com) 7 * Gerald Schaefer (gerald.schaefer@de.ibm.com)
10 */ 8 */
diff --git a/arch/s390/math-emu/math.c b/arch/s390/math-emu/math.c
index cd4e9c168dd7..58bff541fde9 100644
--- a/arch/s390/math-emu/math.c
+++ b/arch/s390/math-emu/math.c
@@ -1,8 +1,6 @@
1/* 1/*
2 * arch/s390/math-emu/math.c
3 *
4 * S390 version 2 * S390 version
5 * Copyright (C) 1999-2001 IBM Deutschland Entwicklung GmbH, IBM Corporation 3 * Copyright IBM Corp. 1999, 2001
6 * Author(s): Martin Schwidefsky (schwidefsky@de.ibm.com), 4 * Author(s): Martin Schwidefsky (schwidefsky@de.ibm.com),
7 * 5 *
8 * 'math.c' emulates IEEE instructions on a S390 processor 6 * 'math.c' emulates IEEE instructions on a S390 processor
diff --git a/arch/s390/mm/cmm.c b/arch/s390/mm/cmm.c
index 1f1dba9dcf58..479e94282910 100644
--- a/arch/s390/mm/cmm.c
+++ b/arch/s390/mm/cmm.c
@@ -1,7 +1,7 @@
1/* 1/*
2 * Collaborative memory management interface. 2 * Collaborative memory management interface.
3 * 3 *
4 * Copyright IBM Corp 2003,2010 4 * Copyright IBM Corp 2003, 2010
5 * Author(s): Martin Schwidefsky <schwidefsky@de.ibm.com>, 5 * Author(s): Martin Schwidefsky <schwidefsky@de.ibm.com>,
6 * 6 *
7 */ 7 */
diff --git a/arch/s390/mm/extmem.c b/arch/s390/mm/extmem.c
index 075ddada4911..519bba716cc3 100644
--- a/arch/s390/mm/extmem.c
+++ b/arch/s390/mm/extmem.c
@@ -1,10 +1,9 @@
1/* 1/*
2 * File...........: arch/s390/mm/extmem.c
3 * Author(s)......: Carsten Otte <cotte@de.ibm.com> 2 * Author(s)......: Carsten Otte <cotte@de.ibm.com>
4 * Rob M van der Heij <rvdheij@nl.ibm.com> 3 * Rob M van der Heij <rvdheij@nl.ibm.com>
5 * Steven Shultz <shultzss@us.ibm.com> 4 * Steven Shultz <shultzss@us.ibm.com>
6 * Bugreports.to..: <Linux390@de.ibm.com> 5 * Bugreports.to..: <Linux390@de.ibm.com>
7 * (C) IBM Corporation 2002-2004 6 * Copyright IBM Corp. 2002, 2004
8 */ 7 */
9 8
10#define KMSG_COMPONENT "extmem" 9#define KMSG_COMPONENT "extmem"
diff --git a/arch/s390/mm/fault.c b/arch/s390/mm/fault.c
index 72cec9ecd96c..6a12d1bb6e09 100644
--- a/arch/s390/mm/fault.c
+++ b/arch/s390/mm/fault.c
@@ -1,8 +1,6 @@
1/* 1/*
2 * arch/s390/mm/fault.c
3 *
4 * S390 version 2 * S390 version
5 * Copyright (C) 1999 IBM Deutschland Entwicklung GmbH, IBM Corporation 3 * Copyright IBM Corp. 1999
6 * Author(s): Hartmut Penner (hp@de.ibm.com) 4 * Author(s): Hartmut Penner (hp@de.ibm.com)
7 * Ulrich Weigand (uweigand@de.ibm.com) 5 * Ulrich Weigand (uweigand@de.ibm.com)
8 * 6 *
diff --git a/arch/s390/mm/hugetlbpage.c b/arch/s390/mm/hugetlbpage.c
index 900de2b3cf28..532525ec88c1 100644
--- a/arch/s390/mm/hugetlbpage.c
+++ b/arch/s390/mm/hugetlbpage.c
@@ -1,7 +1,7 @@
1/* 1/*
2 * IBM System z Huge TLB Page Support for Kernel. 2 * IBM System z Huge TLB Page Support for Kernel.
3 * 3 *
4 * Copyright 2007 IBM Corp. 4 * Copyright IBM Corp. 2007
5 * Author(s): Gerald Schaefer <gerald.schaefer@de.ibm.com> 5 * Author(s): Gerald Schaefer <gerald.schaefer@de.ibm.com>
6 */ 6 */
7 7
diff --git a/arch/s390/mm/init.c b/arch/s390/mm/init.c
index 2bea0605856e..6adbc082618a 100644
--- a/arch/s390/mm/init.c
+++ b/arch/s390/mm/init.c
@@ -1,8 +1,6 @@
1/* 1/*
2 * arch/s390/mm/init.c
3 *
4 * S390 version 2 * S390 version
5 * Copyright (C) 1999 IBM Deutschland Entwicklung GmbH, IBM Corporation 3 * Copyright IBM Corp. 1999
6 * Author(s): Hartmut Penner (hp@de.ibm.com) 4 * Author(s): Hartmut Penner (hp@de.ibm.com)
7 * 5 *
8 * Derived from "arch/i386/mm/init.c" 6 * Derived from "arch/i386/mm/init.c"
diff --git a/arch/s390/mm/mmap.c b/arch/s390/mm/mmap.c
index 2857c48486ea..573384256c5c 100644
--- a/arch/s390/mm/mmap.c
+++ b/arch/s390/mm/mmap.c
@@ -1,6 +1,4 @@
1/* 1/*
2 * linux/arch/s390/mm/mmap.c
3 *
4 * flexible mmap layout support 2 * flexible mmap layout support
5 * 3 *
6 * Copyright 2003-2004 Red Hat Inc., Durham, North Carolina. 4 * Copyright 2003-2004 Red Hat Inc., Durham, North Carolina.
diff --git a/arch/s390/mm/pgtable.c b/arch/s390/mm/pgtable.c
index a3db5a3ea083..1cab221077cc 100644
--- a/arch/s390/mm/pgtable.c
+++ b/arch/s390/mm/pgtable.c
@@ -1,5 +1,5 @@
1/* 1/*
2 * Copyright IBM Corp. 2007,2011 2 * Copyright IBM Corp. 2007, 2011
3 * Author(s): Martin Schwidefsky <schwidefsky@de.ibm.com> 3 * Author(s): Martin Schwidefsky <schwidefsky@de.ibm.com>
4 */ 4 */
5 5
diff --git a/arch/s390/mm/vmem.c b/arch/s390/mm/vmem.c
index 71ae20df674e..6f896e75ab49 100644
--- a/arch/s390/mm/vmem.c
+++ b/arch/s390/mm/vmem.c
@@ -1,6 +1,4 @@
1/* 1/*
2 * arch/s390/mm/vmem.c
3 *
4 * Copyright IBM Corp. 2006 2 * Copyright IBM Corp. 2006
5 * Author(s): Heiko Carstens <heiko.carstens@de.ibm.com> 3 * Author(s): Heiko Carstens <heiko.carstens@de.ibm.com>
6 */ 4 */
diff --git a/arch/s390/oprofile/backtrace.c b/arch/s390/oprofile/backtrace.c
index bc4b84a35cad..c82f62fb9c28 100644
--- a/arch/s390/oprofile/backtrace.c
+++ b/arch/s390/oprofile/backtrace.c
@@ -1,8 +1,6 @@
1/** 1/*
2 * arch/s390/oprofile/backtrace.c
3 *
4 * S390 Version 2 * S390 Version
5 * Copyright (C) 2005 IBM Corporation, IBM Deutschland Entwicklung GmbH. 3 * Copyright IBM Corp. 2005
6 * Author(s): Andreas Krebbel <Andreas.Krebbel@de.ibm.com> 4 * Author(s): Andreas Krebbel <Andreas.Krebbel@de.ibm.com>
7 */ 5 */
8 6
diff --git a/arch/s390/oprofile/hwsampler.c b/arch/s390/oprofile/hwsampler.c
index a4a89fa980d6..0cb385da202c 100644
--- a/arch/s390/oprofile/hwsampler.c
+++ b/arch/s390/oprofile/hwsampler.c
@@ -1,6 +1,4 @@
1/** 1/*
2 * arch/s390/oprofile/hwsampler.c
3 *
4 * Copyright IBM Corp. 2010 2 * Copyright IBM Corp. 2010
5 * Author: Heinz Graalfs <graalfs@de.ibm.com> 3 * Author: Heinz Graalfs <graalfs@de.ibm.com>
6 */ 4 */
diff --git a/arch/s390/oprofile/init.c b/arch/s390/oprofile/init.c
index 2297be406c61..a1e9d69a9c90 100644
--- a/arch/s390/oprofile/init.c
+++ b/arch/s390/oprofile/init.c
@@ -1,8 +1,6 @@
1/** 1/*
2 * arch/s390/oprofile/init.c
3 *
4 * S390 Version 2 * S390 Version
5 * Copyright (C) 2002-2011 IBM Deutschland Entwicklung GmbH, IBM Corporation 3 * Copyright IBM Corp. 2002, 2011
6 * Author(s): Thomas Spatzier (tspat@de.ibm.com) 4 * Author(s): Thomas Spatzier (tspat@de.ibm.com)
7 * Author(s): Mahesh Salgaonkar (mahesh@linux.vnet.ibm.com) 5 * Author(s): Mahesh Salgaonkar (mahesh@linux.vnet.ibm.com)
8 * Author(s): Heinz Graalfs (graalfs@linux.vnet.ibm.com) 6 * Author(s): Heinz Graalfs (graalfs@linux.vnet.ibm.com)
diff --git a/arch/s390/oprofile/op_counter.h b/arch/s390/oprofile/op_counter.h
index 1a8d3ca09014..61b2531eef17 100644
--- a/arch/s390/oprofile/op_counter.h
+++ b/arch/s390/oprofile/op_counter.h
@@ -1,7 +1,5 @@
1/** 1/*
2 * arch/s390/oprofile/op_counter.h 2 * Copyright IBM Corp. 2011
3 *
4 * Copyright (C) 2011 IBM Deutschland Entwicklung GmbH, IBM Corporation
5 * Author(s): Andreas Krebbel (krebbel@linux.vnet.ibm.com) 3 * Author(s): Andreas Krebbel (krebbel@linux.vnet.ibm.com)
6 * 4 *
7 * @remark Copyright 2011 OProfile authors 5 * @remark Copyright 2011 OProfile authors