diff options
Diffstat (limited to 'arch/s390')
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 | */ |
87 | static DEFINE_PER_CPU(struct vtimer_list, appldata_timer); | 85 | static struct vtimer_list appldata_timer; |
88 | static atomic_t appldata_expire_count = ATOMIC_INIT(0); | ||
89 | 86 | ||
90 | static DEFINE_SPINLOCK(appldata_timer_lock); | 87 | static DEFINE_SPINLOCK(appldata_timer_lock); |
91 | static int appldata_interval = APPLDATA_CPU_INTERVAL; | 88 | static int appldata_interval = APPLDATA_CPU_INTERVAL; |
@@ -115,10 +112,7 @@ static LIST_HEAD(appldata_ops_list); | |||
115 | */ | 112 | */ |
116 | static void appldata_timer_function(unsigned long data) | 113 | static 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 | */ | ||
177 | static 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 | */ |
195 | static void | 173 | static 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(); | ||
276 | out: | 231 | out: |
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(); | ||
322 | out: | 274 | out: |
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 | ||
570 | static 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 | |||
582 | static 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 | |||
594 | static 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 | |||
613 | static 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 | */ |
622 | static int __init appldata_init(void) | 523 | static 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 | */ |
15 | struct ccwgroup_device { | 14 | struct 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 | ||
169 | struct s390_idle_data { | 167 | struct 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 | ||
178 | DECLARE_PER_CPU(struct s390_idle_data, s390_idle); | 178 | DECLARE_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 | ||
349 | extern int memcpy_real(void *, void *, size_t); | ||
350 | extern 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); | |||
55 | int sclp_chp_deconfigure(struct chp_id chpid); | 53 | int sclp_chp_deconfigure(struct chp_id chpid); |
56 | int sclp_chp_read_info(struct sclp_chp_info *info); | 54 | int sclp_chp_read_info(struct sclp_chp_info *info); |
57 | void sclp_get_ipl_info(struct sclp_ipl_info *info); | 55 | void sclp_get_ipl_info(struct sclp_ipl_info *info); |
56 | bool sclp_has_linemode(void); | ||
57 | bool 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 | |||
17 | struct 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 */ | ||
29 | struct 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 | |||
38 | extern void init_virt_timer(struct vtimer_list *timer); | ||
39 | extern void add_virt_timer(void *new); | ||
40 | extern void add_virt_timer_periodic(void *new); | ||
41 | extern int mod_virt_timer(struct vtimer_list *timer, __u64 expires); | ||
42 | extern int mod_virt_timer_periodic(struct vtimer_list *timer, __u64 expires); | ||
43 | extern int del_virt_timer(struct vtimer_list *timer); | ||
44 | |||
45 | extern void init_cpu_vtimer(void); | ||
46 | extern void vtime_init(void); | ||
47 | |||
48 | extern void vtime_stop_cpu(void); | ||
49 | extern 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 | ||
384 | extern int memcpy_real(void *, void *, size_t); | ||
385 | extern void memcpy_absolute(void *, void *, size_t); | ||
386 | extern int copy_to_user_real(void __user *dest, void *src, size_t count); | 382 | extern int copy_to_user_real(void __user *dest, void *src, size_t count); |
387 | extern int copy_from_user_real(void *dest, void __user *src, size_t count); | 383 | extern 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 | |||
13 | struct vtimer_list { | ||
14 | struct list_head entry; | ||
15 | u64 expires; | ||
16 | u64 interval; | ||
17 | void (*function)(unsigned long); | ||
18 | unsigned long data; | ||
19 | }; | ||
20 | |||
21 | extern void init_virt_timer(struct vtimer_list *timer); | ||
22 | extern void add_virt_timer(struct vtimer_list *timer); | ||
23 | extern void add_virt_timer_periodic(struct vtimer_list *timer); | ||
24 | extern int mod_virt_timer(struct vtimer_list *timer, u64 expires); | ||
25 | extern int mod_virt_timer_periodic(struct vtimer_list *timer, u64 expires); | ||
26 | extern int del_virt_timer(struct vtimer_list *timer); | ||
27 | |||
28 | extern void init_cpu_vtimer(void); | ||
29 | extern void vtime_init(void); | ||
30 | |||
31 | extern 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 | */ |
618 | ENTRY(psw_idle) | 618 | ENTRY(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) | ||
630 | psw_idle_lpsw: | 626 | psw_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 |
729 | 0: sigp %r4,%r3,1 # sigp sense to source cpu | 727 | 0: 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 |
731 | 1: basr %r14,%r1 # call function | 729 | 1: 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) |
734 | 2: sigp %r4,%r3,5 # sigp stop to current cpu | 732 | 2: sigp %r4,%r3,SIGP_STOP # sigp stop to current cpu |
735 | brc 2,2b | 733 | brc 2,2b |
736 | 3: j 3b | 734 | 3: j 3b |
737 | 735 | ||
@@ -883,33 +881,28 @@ cleanup_io_restore_insn: | |||
883 | 881 | ||
884 | cleanup_idle: | 882 | cleanup_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 |
892 | 0: # check if stck has been executed | 890 | 0: # 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 | 895 | 1: # account system time going idle |
898 | 1: # check if the cpu timer has been reprogrammed | ||
899 | ltr %r5,%r5 | ||
900 | jz 2f | ||
901 | spt __VQ_IDLE_ENTER(%r3) | ||
902 | 2: # 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 | ||
10 | extern void (*pgm_check_table[128])(struct pt_regs *); | 9 | extern void (*pgm_check_table[128])(struct pt_regs *); |
11 | extern void *restart_stack; | 10 | extern void *restart_stack; |
@@ -17,8 +16,7 @@ void io_int_handler(void); | |||
17 | void mcck_int_handler(void); | 16 | void mcck_int_handler(void); |
18 | void restart_int_handler(void); | 17 | void restart_int_handler(void); |
19 | void restart_call_handler(void); | 18 | void restart_call_handler(void); |
20 | void psw_idle(struct s390_idle_data *, struct vtimer_queue *, | 19 | void psw_idle(struct s390_idle_data *, unsigned long); |
21 | unsigned long, int); | ||
22 | 20 | ||
23 | asmlinkage long do_syscall_trace_enter(struct pt_regs *regs); | 21 | asmlinkage long do_syscall_trace_enter(struct pt_regs *regs); |
24 | asmlinkage void do_syscall_trace_exit(struct pt_regs *regs); | 22 | asmlinkage 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 | */ |
644 | ENTRY(psw_idle) | 644 | ENTRY(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) | ||
654 | psw_idle_lpsw: | 650 | psw_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 |
756 | 0: sigp %r4,%r3,1 # sigp sense to source cpu | 754 | 0: 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 |
758 | 1: basr %r14,%r1 # call function | 756 | 1: 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) |
761 | 2: sigp %r4,%r3,5 # sigp stop to current cpu | 759 | 2: sigp %r4,%r3,SIGP_STOP # sigp stop to current cpu |
762 | brc 2,2b | 760 | brc 2,2b |
763 | 3: j 3b | 761 | 3: j 3b |
764 | 762 | ||
@@ -916,33 +914,28 @@ cleanup_io_restore_insn: | |||
916 | 914 | ||
917 | cleanup_idle: | 915 | cleanup_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 |
925 | 0: # check if stck & stpt have been executed | 923 | 0: # 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 | 928 | 1: # account system time going idle |
931 | 1: # check if the cpu timer has been reprogrammed | ||
932 | ltr %r5,%r5 | ||
933 | jz 2f | ||
934 | spt __VQ_IDLE_ENTER(%r3) | ||
935 | 2: # 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 | ||
978 | sie_loop: | 968 | sie_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 | ||
1529 | static void dump_reipl_run(struct shutdown_trigger *trigger) | 1528 | static 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 | */ |
48 | static void *lgr_page; | 48 | static char lgr_page[PAGE_SIZE] __aligned(PAGE_SIZE); |
49 | static struct lgr_info lgr_info_last; | 49 | static struct lgr_info lgr_info_last; |
50 | static struct lgr_info lgr_info_cur; | 50 | static struct lgr_info lgr_info_cur; |
51 | static struct debug_info *lgr_dbf; | 51 | static struct debug_info *lgr_dbf; |
@@ -74,7 +74,7 @@ static void cpascii(char *dst, char *src, int size) | |||
74 | */ | 74 | */ |
75 | static void lgr_stsi_1_1_1(struct lgr_info *lgr_info) | 75 | static 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 | */ |
92 | static void lgr_stsi_2_2_2(struct lgr_info *lgr_info) | 92 | static 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 | */ |
106 | static void lgr_stsi_3_2_2(struct lgr_info *lgr_info) | 106 | static 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 | */ |
184 | static int __init lgr_init(void) | 184 | static 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 | */ |
26 | void __cpuinit cpu_init(void) | 24 | void __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 | ||
68 | long psw_kernel_bits = PSW_DEFAULT_KEY | PSW_MASK_BASE | PSW_ASC_PRIMARY | | 67 | long psw_kernel_bits = PSW_DEFAULT_KEY | PSW_MASK_BASE | PSW_ASC_PRIMARY | |
@@ -138,9 +137,14 @@ __setup("condev=", condev_setup); | |||
138 | 137 | ||
139 | static void __init set_preferred_console(void) | 138 | static 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) | |||
598 | static void __init setup_vmcoreinfo(void) | 603 | static 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 | ||
49 | enum { | 50 | enum { |
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 | |||
67 | enum { | ||
68 | sigp_order_code_accepted = 0, | ||
69 | sigp_status_stored = 1, | ||
70 | sigp_busy = 2, | ||
71 | sigp_not_operational = 3, | ||
72 | }; | ||
73 | |||
74 | enum { | ||
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 | ||
147 | static inline int pcpu_stopped(struct pcpu *pcpu) | 123 | static 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 | ||
156 | static inline int pcpu_running(struct pcpu *pcpu) | 131 | static 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; |
219 | out: | 194 | out: |
220 | if (pcpu != &pcpu_devices[0]) { | 195 | if (pcpu != &pcpu_devices[0]) { |
@@ -229,7 +204,7 @@ out: | |||
229 | 204 | ||
230 | static void pcpu_free_lowcore(struct pcpu *pcpu) | 205 | static 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 | */ |
437 | void smp_stop_cpu(void) | 412 | void 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) | |||
795 | void __noreturn cpu_die(void) | 768 | void __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 |
164 | restart_entry: | 165 | restart_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) |
181 | 3: | 182 | 3: |
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) |
197 | 4: | 198 | 4: |
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 */ |
201 | 5: | 202 | 5: |
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 */ |
204 | 6: j 6b | 205 | 6: 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) |
209 | 7: | 210 | 7: |
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 | ||
31 | static DEFINE_PER_CPU(struct vtimer_queue, virt_cpu_timer); | 25 | static void virt_timer_expire(void); |
32 | 26 | ||
33 | DEFINE_PER_CPU(struct s390_idle_data, s390_idle); | 27 | DEFINE_PER_CPU(struct s390_idle_data, s390_idle); |
34 | 28 | ||
35 | static inline __u64 get_vtimer(void) | 29 | static LIST_HEAD(virt_timer_list); |
30 | static DEFINE_SPINLOCK(virt_timer_lock); | ||
31 | static atomic64_t virt_timer_current; | ||
32 | static atomic64_t virt_timer_elapsed; | ||
33 | |||
34 | static 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 | ||
43 | static inline void set_vtimer(__u64 expires) | 42 | static 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 | ||
54 | static 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 | */ |
58 | static void do_account_vtime(struct task_struct *tsk, int hardirq_offset) | 68 | static 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 | ||
89 | void account_vtime(struct task_struct *prev, struct task_struct *next) | 102 | void 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 | ||
102 | void account_process_tick(struct task_struct *tsk, int user_tick) | 115 | void 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) | |||
111 | void account_system_vtime(struct task_struct *tsk) | 125 | void 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 | } |
125 | EXPORT_SYMBOL_GPL(account_system_vtime); | 141 | EXPORT_SYMBOL_GPL(account_system_vtime); |
126 | 142 | ||
127 | void __kprobes vtime_stop_cpu(void) | 143 | void __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 | */ |
180 | static void list_add_sorted(struct vtimer_list *timer, struct list_head *head) | 195 | static 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 | */ | ||
197 | static 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 | */ |
223 | static void do_cpu_timer_interrupt(struct ext_code ext_code, | 211 | static 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 | ||
272 | void init_virt_timer(struct vtimer_list *timer) | 250 | void init_virt_timer(struct vtimer_list *timer) |
@@ -278,179 +256,108 @@ EXPORT_SYMBOL(init_virt_timer); | |||
278 | 256 | ||
279 | static inline int vtimer_pending(struct vtimer_list *timer) | 257 | static 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 | */ | ||
287 | static void internal_add_vtimer(struct vtimer_list *timer) | 262 | static 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 | ||
327 | static inline void prepare_vtimer(struct vtimer_list *timer) | 281 | static 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 | */ |
338 | void add_virt_timer(void *new) | 294 | void 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 | } |
347 | EXPORT_SYMBOL(add_virt_timer); | 298 | EXPORT_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 | */ |
352 | void add_virt_timer_periodic(void *new) | 303 | void 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 | } |
361 | EXPORT_SYMBOL(add_virt_timer_periodic); | 307 | EXPORT_SYMBOL(add_virt_timer_periodic); |
362 | 308 | ||
363 | static int __mod_vtimer(struct vtimer_list *timer, __u64 expires, int periodic) | 309 | static 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 | */ |
415 | int mod_virt_timer(struct vtimer_list *timer, __u64 expires) | 332 | int 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 | } |
419 | EXPORT_SYMBOL(mod_virt_timer); | 336 | EXPORT_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 | */ |
427 | int mod_virt_timer_periodic(struct vtimer_list *timer, __u64 expires) | 341 | int 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 | } |
431 | EXPORT_SYMBOL(mod_virt_timer_periodic); | 345 | EXPORT_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 | */ |
438 | int del_virt_timer(struct vtimer_list *timer) | 352 | int 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 | } |
456 | EXPORT_SYMBOL(del_virt_timer); | 363 | EXPORT_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 | */ |
461 | void init_cpu_vtimer(void) | 368 | void __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 | ||
477 | static int __cpuinit s390_nohz_notify(struct notifier_block *self, | 374 | static 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 | ||
494 | void __init vtime_init(void) | 391 | void __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 | ||
352 | int kvm_arch_vcpu_setup(struct kvm_vcpu *vcpu) | 353 | int 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 | |||
50 | static int __sigp_sense(struct kvm_vcpu *vcpu, u16 cpu_addr, | 22 | static 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); |
110 | unlock: | 86 | unlock: |
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); |
148 | unlock: | 124 | unlock: |
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) | |||
171 | out: | 147 | out: |
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 | ||
177 | static int __sigp_stop(struct kvm_vcpu *vcpu, u16 cpu_addr, int action) | 153 | static 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); |
276 | out_li: | 255 | out_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 | ||
315 | static int __sigp_restart(struct kvm_vcpu *vcpu, u16 cpu_addr) | 294 | static 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 | ||
18 | void __delay(unsigned long loops) | 18 | void __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 |