diff options
| author | Martin Schwidefsky <schwidefsky@de.ibm.com> | 2008-12-25 07:39:25 -0500 |
|---|---|---|
| committer | Martin Schwidefsky <schwidefsky@de.ibm.com> | 2008-12-25 07:39:15 -0500 |
| commit | c185b783b0993c294ca22ad0a55e6cdf8df4f9d3 (patch) | |
| tree | de475f1f37f8b2e1b58ddd4a41e0666afa6672cb | |
| parent | 349f1b671a4b2612c1355612bedadc81f86d26f1 (diff) | |
[S390] Remove config options.
On s390 we always want to run with precise cputime accounting.
Remove the config options VIRT_TIMER and VIRT_CPU_ACCOUNTING.
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
| -rw-r--r-- | arch/s390/Kconfig | 18 | ||||
| -rw-r--r-- | arch/s390/include/asm/system.h | 4 | ||||
| -rw-r--r-- | arch/s390/include/asm/timer.h | 9 | ||||
| -rw-r--r-- | arch/s390/kernel/Makefile | 3 | ||||
| -rw-r--r-- | arch/s390/kernel/entry.S | 56 | ||||
| -rw-r--r-- | arch/s390/kernel/entry64.S | 56 | ||||
| -rw-r--r-- | arch/s390/kernel/smp.c | 2 | ||||
| -rw-r--r-- | arch/s390/kernel/time.c | 4 | ||||
| -rw-r--r-- | arch/s390/kernel/vtime.c | 11 |
9 files changed, 20 insertions, 143 deletions
diff --git a/arch/s390/Kconfig b/arch/s390/Kconfig index 7a18d2380e2c..8152fefc97b9 100644 --- a/arch/s390/Kconfig +++ b/arch/s390/Kconfig | |||
| @@ -69,6 +69,9 @@ config PGSTE | |||
| 69 | bool | 69 | bool |
| 70 | default y if KVM | 70 | default y if KVM |
| 71 | 71 | ||
| 72 | config VIRT_CPU_ACCOUNTING | ||
| 73 | def_bool y | ||
| 74 | |||
| 72 | mainmenu "Linux Kernel Configuration" | 75 | mainmenu "Linux Kernel Configuration" |
| 73 | 76 | ||
| 74 | config S390 | 77 | config S390 |
| @@ -469,22 +472,9 @@ config PAGE_STATES | |||
| 469 | hypervisor. The ESSA instruction is used to do the states | 472 | hypervisor. The ESSA instruction is used to do the states |
| 470 | changes between a page that has content and the unused state. | 473 | changes between a page that has content and the unused state. |
| 471 | 474 | ||
| 472 | config VIRT_TIMER | ||
| 473 | bool "Virtual CPU timer support" | ||
| 474 | help | ||
| 475 | This provides a kernel interface for virtual CPU timers. | ||
| 476 | Default is disabled. | ||
| 477 | |||
| 478 | config VIRT_CPU_ACCOUNTING | ||
| 479 | bool "Base user process accounting on virtual cpu timer" | ||
| 480 | depends on VIRT_TIMER | ||
| 481 | help | ||
| 482 | Select this option to use CPU timer deltas to do user | ||
| 483 | process accounting. | ||
| 484 | |||
| 485 | config APPLDATA_BASE | 475 | config APPLDATA_BASE |
| 486 | bool "Linux - VM Monitor Stream, base infrastructure" | 476 | bool "Linux - VM Monitor Stream, base infrastructure" |
| 487 | depends on PROC_FS && VIRT_TIMER=y | 477 | depends on PROC_FS |
| 488 | help | 478 | help |
| 489 | This provides a kernel interface for creating and updating z/VM APPLDATA | 479 | This provides a kernel interface for creating and updating z/VM APPLDATA |
| 490 | monitor records. The monitor records are updated at certain time | 480 | monitor records. The monitor records are updated at certain time |
diff --git a/arch/s390/include/asm/system.h b/arch/s390/include/asm/system.h index c17a3cfbe242..024ef42ed6d7 100644 --- a/arch/s390/include/asm/system.h +++ b/arch/s390/include/asm/system.h | |||
| @@ -99,13 +99,9 @@ static inline void restore_access_regs(unsigned int *acrs) | |||
| 99 | prev = __switch_to(prev,next); \ | 99 | prev = __switch_to(prev,next); \ |
| 100 | } while (0) | 100 | } while (0) |
| 101 | 101 | ||
| 102 | #ifdef CONFIG_VIRT_CPU_ACCOUNTING | ||
| 103 | extern void account_vtime(struct task_struct *); | 102 | extern void account_vtime(struct task_struct *); |
| 104 | extern void account_tick_vtime(struct task_struct *); | 103 | extern void account_tick_vtime(struct task_struct *); |
| 105 | extern void account_system_vtime(struct task_struct *); | 104 | extern void account_system_vtime(struct task_struct *); |
| 106 | #else | ||
| 107 | #define account_vtime(x) do { /* empty */ } while (0) | ||
| 108 | #endif | ||
| 109 | 105 | ||
| 110 | #ifdef CONFIG_PFAULT | 106 | #ifdef CONFIG_PFAULT |
| 111 | extern void pfault_irq_init(void); | 107 | extern void pfault_irq_init(void); |
diff --git a/arch/s390/include/asm/timer.h b/arch/s390/include/asm/timer.h index d98d79e35cd6..61705d60f995 100644 --- a/arch/s390/include/asm/timer.h +++ b/arch/s390/include/asm/timer.h | |||
| @@ -48,18 +48,9 @@ extern int del_virt_timer(struct vtimer_list *timer); | |||
| 48 | extern void init_cpu_vtimer(void); | 48 | extern void init_cpu_vtimer(void); |
| 49 | extern void vtime_init(void); | 49 | extern void vtime_init(void); |
| 50 | 50 | ||
| 51 | #ifdef CONFIG_VIRT_TIMER | ||
| 52 | |||
| 53 | extern void vtime_start_cpu_timer(void); | 51 | extern void vtime_start_cpu_timer(void); |
| 54 | extern void vtime_stop_cpu_timer(void); | 52 | extern void vtime_stop_cpu_timer(void); |
| 55 | 53 | ||
| 56 | #else | ||
| 57 | |||
| 58 | static inline void vtime_start_cpu_timer(void) { } | ||
| 59 | static inline void vtime_stop_cpu_timer(void) { } | ||
| 60 | |||
| 61 | #endif /* CONFIG_VIRT_TIMER */ | ||
| 62 | |||
| 63 | #endif /* __KERNEL__ */ | 54 | #endif /* __KERNEL__ */ |
| 64 | 55 | ||
| 65 | #endif /* _ASM_S390_TIMER_H */ | 56 | #endif /* _ASM_S390_TIMER_H */ |
diff --git a/arch/s390/kernel/Makefile b/arch/s390/kernel/Makefile index 92730cc3cdb4..90dad65c20ec 100644 --- a/arch/s390/kernel/Makefile +++ b/arch/s390/kernel/Makefile | |||
| @@ -20,7 +20,7 @@ CFLAGS_ptrace.o += -DUTS_MACHINE='"$(UTS_MACHINE)"' | |||
| 20 | obj-y := bitmap.o traps.o time.o process.o base.o early.o \ | 20 | obj-y := bitmap.o traps.o time.o process.o base.o early.o \ |
| 21 | setup.o sys_s390.o ptrace.o signal.o cpcmd.o ebcdic.o \ | 21 | setup.o sys_s390.o ptrace.o signal.o cpcmd.o ebcdic.o \ |
| 22 | s390_ext.o debug.o irq.o ipl.o dis.o diag.o mem_detect.o \ | 22 | s390_ext.o debug.o irq.o ipl.o dis.o diag.o mem_detect.o \ |
| 23 | vdso.o | 23 | vdso.o vtime.o |
| 24 | 24 | ||
| 25 | obj-y += $(if $(CONFIG_64BIT),entry64.o,entry.o) | 25 | obj-y += $(if $(CONFIG_64BIT),entry64.o,entry.o) |
| 26 | obj-y += $(if $(CONFIG_64BIT),reipl64.o,reipl.o) | 26 | obj-y += $(if $(CONFIG_64BIT),reipl64.o,reipl.o) |
| @@ -36,7 +36,6 @@ obj-$(CONFIG_COMPAT) += compat_linux.o compat_signal.o \ | |||
| 36 | compat_wrapper.o compat_exec_domain.o \ | 36 | compat_wrapper.o compat_exec_domain.o \ |
| 37 | $(compat-obj-y) | 37 | $(compat-obj-y) |
| 38 | 38 | ||
| 39 | obj-$(CONFIG_VIRT_TIMER) += vtime.o | ||
| 40 | obj-$(CONFIG_STACKTRACE) += stacktrace.o | 39 | obj-$(CONFIG_STACKTRACE) += stacktrace.o |
| 41 | obj-$(CONFIG_KPROBES) += kprobes.o | 40 | obj-$(CONFIG_KPROBES) += kprobes.o |
| 42 | obj-$(CONFIG_FUNCTION_TRACER) += mcount.o | 41 | obj-$(CONFIG_FUNCTION_TRACER) += mcount.o |
diff --git a/arch/s390/kernel/entry.S b/arch/s390/kernel/entry.S index c1cfc7e39ec9..55de521aef77 100644 --- a/arch/s390/kernel/entry.S +++ b/arch/s390/kernel/entry.S | |||
| @@ -109,13 +109,6 @@ STACK_SIZE = 1 << STACK_SHIFT | |||
| 109 | * R15 - kernel stack pointer | 109 | * R15 - kernel stack pointer |
| 110 | */ | 110 | */ |
| 111 | 111 | ||
| 112 | .macro STORE_TIMER lc_offset | ||
| 113 | #ifdef CONFIG_VIRT_CPU_ACCOUNTING | ||
| 114 | stpt \lc_offset | ||
| 115 | #endif | ||
| 116 | .endm | ||
| 117 | |||
| 118 | #ifdef CONFIG_VIRT_CPU_ACCOUNTING | ||
| 119 | .macro UPDATE_VTIME lc_from,lc_to,lc_sum | 112 | .macro UPDATE_VTIME lc_from,lc_to,lc_sum |
| 120 | lm %r10,%r11,\lc_from | 113 | lm %r10,%r11,\lc_from |
| 121 | sl %r10,\lc_to | 114 | sl %r10,\lc_to |
| @@ -128,7 +121,6 @@ STACK_SIZE = 1 << STACK_SHIFT | |||
| 128 | al %r10,BASED(.Lc_1) | 121 | al %r10,BASED(.Lc_1) |
| 129 | 1: stm %r10,%r11,\lc_sum | 122 | 1: stm %r10,%r11,\lc_sum |
| 130 | .endm | 123 | .endm |
| 131 | #endif | ||
| 132 | 124 | ||
| 133 | .macro SAVE_ALL_BASE savearea | 125 | .macro SAVE_ALL_BASE savearea |
| 134 | stm %r12,%r15,\savearea | 126 | stm %r12,%r15,\savearea |
| @@ -198,7 +190,7 @@ STACK_SIZE = 1 << STACK_SHIFT | |||
| 198 | ni \psworg+1,0xfd # clear wait state bit | 190 | ni \psworg+1,0xfd # clear wait state bit |
| 199 | .endif | 191 | .endif |
| 200 | lm %r0,%r15,SP_R0(%r15) # load gprs 0-15 of user | 192 | lm %r0,%r15,SP_R0(%r15) # load gprs 0-15 of user |
| 201 | STORE_TIMER __LC_EXIT_TIMER | 193 | stpt __LC_EXIT_TIMER |
| 202 | lpsw \psworg # back to caller | 194 | lpsw \psworg # back to caller |
| 203 | .endm | 195 | .endm |
| 204 | 196 | ||
| @@ -247,20 +239,18 @@ __critical_start: | |||
| 247 | 239 | ||
| 248 | .globl system_call | 240 | .globl system_call |
| 249 | system_call: | 241 | system_call: |
| 250 | STORE_TIMER __LC_SYNC_ENTER_TIMER | 242 | stpt __LC_SYNC_ENTER_TIMER |
| 251 | sysc_saveall: | 243 | sysc_saveall: |
| 252 | SAVE_ALL_BASE __LC_SAVE_AREA | 244 | SAVE_ALL_BASE __LC_SAVE_AREA |
| 253 | SAVE_ALL_SVC __LC_SVC_OLD_PSW,__LC_SAVE_AREA | 245 | SAVE_ALL_SVC __LC_SVC_OLD_PSW,__LC_SAVE_AREA |
| 254 | CREATE_STACK_FRAME __LC_SVC_OLD_PSW,__LC_SAVE_AREA | 246 | CREATE_STACK_FRAME __LC_SVC_OLD_PSW,__LC_SAVE_AREA |
| 255 | lh %r7,0x8a # get svc number from lowcore | 247 | lh %r7,0x8a # get svc number from lowcore |
| 256 | #ifdef CONFIG_VIRT_CPU_ACCOUNTING | ||
| 257 | sysc_vtime: | 248 | sysc_vtime: |
| 258 | UPDATE_VTIME __LC_EXIT_TIMER,__LC_SYNC_ENTER_TIMER,__LC_USER_TIMER | 249 | UPDATE_VTIME __LC_EXIT_TIMER,__LC_SYNC_ENTER_TIMER,__LC_USER_TIMER |
| 259 | sysc_stime: | 250 | sysc_stime: |
| 260 | UPDATE_VTIME __LC_LAST_UPDATE_TIMER,__LC_EXIT_TIMER,__LC_SYSTEM_TIMER | 251 | UPDATE_VTIME __LC_LAST_UPDATE_TIMER,__LC_EXIT_TIMER,__LC_SYSTEM_TIMER |
| 261 | sysc_update: | 252 | sysc_update: |
| 262 | mvc __LC_LAST_UPDATE_TIMER(8),__LC_SYNC_ENTER_TIMER | 253 | mvc __LC_LAST_UPDATE_TIMER(8),__LC_SYNC_ENTER_TIMER |
| 263 | #endif | ||
| 264 | sysc_do_svc: | 254 | sysc_do_svc: |
| 265 | l %r9,__LC_THREAD_INFO # load pointer to thread_info struct | 255 | l %r9,__LC_THREAD_INFO # load pointer to thread_info struct |
| 266 | ltr %r7,%r7 # test for svc 0 | 256 | ltr %r7,%r7 # test for svc 0 |
| @@ -490,20 +480,18 @@ pgm_check_handler: | |||
| 490 | * we just ignore the PER event (FIXME: is there anything we have to do | 480 | * we just ignore the PER event (FIXME: is there anything we have to do |
| 491 | * for LPSW?). | 481 | * for LPSW?). |
| 492 | */ | 482 | */ |
| 493 | STORE_TIMER __LC_SYNC_ENTER_TIMER | 483 | stpt __LC_SYNC_ENTER_TIMER |
| 494 | SAVE_ALL_BASE __LC_SAVE_AREA | 484 | SAVE_ALL_BASE __LC_SAVE_AREA |
| 495 | tm __LC_PGM_INT_CODE+1,0x80 # check whether we got a per exception | 485 | tm __LC_PGM_INT_CODE+1,0x80 # check whether we got a per exception |
| 496 | bnz BASED(pgm_per) # got per exception -> special case | 486 | bnz BASED(pgm_per) # got per exception -> special case |
| 497 | SAVE_ALL_SYNC __LC_PGM_OLD_PSW,__LC_SAVE_AREA | 487 | SAVE_ALL_SYNC __LC_PGM_OLD_PSW,__LC_SAVE_AREA |
| 498 | CREATE_STACK_FRAME __LC_PGM_OLD_PSW,__LC_SAVE_AREA | 488 | CREATE_STACK_FRAME __LC_PGM_OLD_PSW,__LC_SAVE_AREA |
| 499 | #ifdef CONFIG_VIRT_CPU_ACCOUNTING | ||
| 500 | tm SP_PSW+1(%r15),0x01 # interrupting from user ? | 489 | tm SP_PSW+1(%r15),0x01 # interrupting from user ? |
| 501 | bz BASED(pgm_no_vtime) | 490 | bz BASED(pgm_no_vtime) |
| 502 | UPDATE_VTIME __LC_EXIT_TIMER,__LC_SYNC_ENTER_TIMER,__LC_USER_TIMER | 491 | UPDATE_VTIME __LC_EXIT_TIMER,__LC_SYNC_ENTER_TIMER,__LC_USER_TIMER |
| 503 | UPDATE_VTIME __LC_LAST_UPDATE_TIMER,__LC_EXIT_TIMER,__LC_SYSTEM_TIMER | 492 | UPDATE_VTIME __LC_LAST_UPDATE_TIMER,__LC_EXIT_TIMER,__LC_SYSTEM_TIMER |
| 504 | mvc __LC_LAST_UPDATE_TIMER(8),__LC_SYNC_ENTER_TIMER | 493 | mvc __LC_LAST_UPDATE_TIMER(8),__LC_SYNC_ENTER_TIMER |
| 505 | pgm_no_vtime: | 494 | pgm_no_vtime: |
| 506 | #endif | ||
| 507 | l %r9,__LC_THREAD_INFO # load pointer to thread_info struct | 495 | l %r9,__LC_THREAD_INFO # load pointer to thread_info struct |
| 508 | TRACE_IRQS_OFF | 496 | TRACE_IRQS_OFF |
| 509 | l %r3,__LC_PGM_ILC # load program interruption code | 497 | l %r3,__LC_PGM_ILC # load program interruption code |
| @@ -536,14 +524,12 @@ pgm_per: | |||
| 536 | pgm_per_std: | 524 | pgm_per_std: |
| 537 | SAVE_ALL_SYNC __LC_PGM_OLD_PSW,__LC_SAVE_AREA | 525 | SAVE_ALL_SYNC __LC_PGM_OLD_PSW,__LC_SAVE_AREA |
| 538 | CREATE_STACK_FRAME __LC_PGM_OLD_PSW,__LC_SAVE_AREA | 526 | CREATE_STACK_FRAME __LC_PGM_OLD_PSW,__LC_SAVE_AREA |
| 539 | #ifdef CONFIG_VIRT_CPU_ACCOUNTING | ||
| 540 | tm SP_PSW+1(%r15),0x01 # interrupting from user ? | 527 | tm SP_PSW+1(%r15),0x01 # interrupting from user ? |
| 541 | bz BASED(pgm_no_vtime2) | 528 | bz BASED(pgm_no_vtime2) |
| 542 | UPDATE_VTIME __LC_EXIT_TIMER,__LC_SYNC_ENTER_TIMER,__LC_USER_TIMER | 529 | UPDATE_VTIME __LC_EXIT_TIMER,__LC_SYNC_ENTER_TIMER,__LC_USER_TIMER |
| 543 | UPDATE_VTIME __LC_LAST_UPDATE_TIMER,__LC_EXIT_TIMER,__LC_SYSTEM_TIMER | 530 | UPDATE_VTIME __LC_LAST_UPDATE_TIMER,__LC_EXIT_TIMER,__LC_SYSTEM_TIMER |
| 544 | mvc __LC_LAST_UPDATE_TIMER(8),__LC_SYNC_ENTER_TIMER | 531 | mvc __LC_LAST_UPDATE_TIMER(8),__LC_SYNC_ENTER_TIMER |
| 545 | pgm_no_vtime2: | 532 | pgm_no_vtime2: |
| 546 | #endif | ||
| 547 | l %r9,__LC_THREAD_INFO # load pointer to thread_info struct | 533 | l %r9,__LC_THREAD_INFO # load pointer to thread_info struct |
| 548 | TRACE_IRQS_OFF | 534 | TRACE_IRQS_OFF |
| 549 | l %r1,__TI_task(%r9) | 535 | l %r1,__TI_task(%r9) |
| @@ -565,11 +551,9 @@ pgm_no_vtime2: | |||
| 565 | pgm_svcper: | 551 | pgm_svcper: |
| 566 | SAVE_ALL_SYNC __LC_SVC_OLD_PSW,__LC_SAVE_AREA | 552 | SAVE_ALL_SYNC __LC_SVC_OLD_PSW,__LC_SAVE_AREA |
| 567 | CREATE_STACK_FRAME __LC_SVC_OLD_PSW,__LC_SAVE_AREA | 553 | CREATE_STACK_FRAME __LC_SVC_OLD_PSW,__LC_SAVE_AREA |
| 568 | #ifdef CONFIG_VIRT_CPU_ACCOUNTING | ||
| 569 | UPDATE_VTIME __LC_EXIT_TIMER,__LC_SYNC_ENTER_TIMER,__LC_USER_TIMER | 554 | UPDATE_VTIME __LC_EXIT_TIMER,__LC_SYNC_ENTER_TIMER,__LC_USER_TIMER |
| 570 | UPDATE_VTIME __LC_LAST_UPDATE_TIMER,__LC_EXIT_TIMER,__LC_SYSTEM_TIMER | 555 | UPDATE_VTIME __LC_LAST_UPDATE_TIMER,__LC_EXIT_TIMER,__LC_SYSTEM_TIMER |
| 571 | mvc __LC_LAST_UPDATE_TIMER(8),__LC_SYNC_ENTER_TIMER | 556 | mvc __LC_LAST_UPDATE_TIMER(8),__LC_SYNC_ENTER_TIMER |
| 572 | #endif | ||
| 573 | lh %r7,0x8a # get svc number from lowcore | 557 | lh %r7,0x8a # get svc number from lowcore |
| 574 | l %r9,__LC_THREAD_INFO # load pointer to thread_info struct | 558 | l %r9,__LC_THREAD_INFO # load pointer to thread_info struct |
| 575 | TRACE_IRQS_OFF | 559 | TRACE_IRQS_OFF |
| @@ -599,19 +583,17 @@ kernel_per: | |||
| 599 | 583 | ||
| 600 | .globl io_int_handler | 584 | .globl io_int_handler |
| 601 | io_int_handler: | 585 | io_int_handler: |
| 602 | STORE_TIMER __LC_ASYNC_ENTER_TIMER | 586 | stpt __LC_ASYNC_ENTER_TIMER |
| 603 | stck __LC_INT_CLOCK | 587 | stck __LC_INT_CLOCK |
| 604 | SAVE_ALL_BASE __LC_SAVE_AREA+16 | 588 | SAVE_ALL_BASE __LC_SAVE_AREA+16 |
| 605 | SAVE_ALL_ASYNC __LC_IO_OLD_PSW,__LC_SAVE_AREA+16 | 589 | SAVE_ALL_ASYNC __LC_IO_OLD_PSW,__LC_SAVE_AREA+16 |
| 606 | CREATE_STACK_FRAME __LC_IO_OLD_PSW,__LC_SAVE_AREA+16 | 590 | CREATE_STACK_FRAME __LC_IO_OLD_PSW,__LC_SAVE_AREA+16 |
| 607 | #ifdef CONFIG_VIRT_CPU_ACCOUNTING | ||
| 608 | tm SP_PSW+1(%r15),0x01 # interrupting from user ? | 591 | tm SP_PSW+1(%r15),0x01 # interrupting from user ? |
| 609 | bz BASED(io_no_vtime) | 592 | bz BASED(io_no_vtime) |
| 610 | UPDATE_VTIME __LC_EXIT_TIMER,__LC_ASYNC_ENTER_TIMER,__LC_USER_TIMER | 593 | UPDATE_VTIME __LC_EXIT_TIMER,__LC_ASYNC_ENTER_TIMER,__LC_USER_TIMER |
| 611 | UPDATE_VTIME __LC_LAST_UPDATE_TIMER,__LC_EXIT_TIMER,__LC_SYSTEM_TIMER | 594 | UPDATE_VTIME __LC_LAST_UPDATE_TIMER,__LC_EXIT_TIMER,__LC_SYSTEM_TIMER |
| 612 | mvc __LC_LAST_UPDATE_TIMER(8),__LC_ASYNC_ENTER_TIMER | 595 | mvc __LC_LAST_UPDATE_TIMER(8),__LC_ASYNC_ENTER_TIMER |
| 613 | io_no_vtime: | 596 | io_no_vtime: |
| 614 | #endif | ||
| 615 | l %r9,__LC_THREAD_INFO # load pointer to thread_info struct | 597 | l %r9,__LC_THREAD_INFO # load pointer to thread_info struct |
| 616 | TRACE_IRQS_OFF | 598 | TRACE_IRQS_OFF |
| 617 | l %r1,BASED(.Ldo_IRQ) # load address of do_IRQ | 599 | l %r1,BASED(.Ldo_IRQ) # load address of do_IRQ |
| @@ -741,19 +723,17 @@ io_notify_resume: | |||
| 741 | 723 | ||
| 742 | .globl ext_int_handler | 724 | .globl ext_int_handler |
| 743 | ext_int_handler: | 725 | ext_int_handler: |
| 744 | STORE_TIMER __LC_ASYNC_ENTER_TIMER | 726 | stpt __LC_ASYNC_ENTER_TIMER |
| 745 | stck __LC_INT_CLOCK | 727 | stck __LC_INT_CLOCK |
| 746 | SAVE_ALL_BASE __LC_SAVE_AREA+16 | 728 | SAVE_ALL_BASE __LC_SAVE_AREA+16 |
| 747 | SAVE_ALL_ASYNC __LC_EXT_OLD_PSW,__LC_SAVE_AREA+16 | 729 | SAVE_ALL_ASYNC __LC_EXT_OLD_PSW,__LC_SAVE_AREA+16 |
| 748 | CREATE_STACK_FRAME __LC_EXT_OLD_PSW,__LC_SAVE_AREA+16 | 730 | CREATE_STACK_FRAME __LC_EXT_OLD_PSW,__LC_SAVE_AREA+16 |
| 749 | #ifdef CONFIG_VIRT_CPU_ACCOUNTING | ||
| 750 | tm SP_PSW+1(%r15),0x01 # interrupting from user ? | 731 | tm SP_PSW+1(%r15),0x01 # interrupting from user ? |
| 751 | bz BASED(ext_no_vtime) | 732 | bz BASED(ext_no_vtime) |
| 752 | UPDATE_VTIME __LC_EXIT_TIMER,__LC_ASYNC_ENTER_TIMER,__LC_USER_TIMER | 733 | UPDATE_VTIME __LC_EXIT_TIMER,__LC_ASYNC_ENTER_TIMER,__LC_USER_TIMER |
| 753 | UPDATE_VTIME __LC_LAST_UPDATE_TIMER,__LC_EXIT_TIMER,__LC_SYSTEM_TIMER | 734 | UPDATE_VTIME __LC_LAST_UPDATE_TIMER,__LC_EXIT_TIMER,__LC_SYSTEM_TIMER |
| 754 | mvc __LC_LAST_UPDATE_TIMER(8),__LC_ASYNC_ENTER_TIMER | 735 | mvc __LC_LAST_UPDATE_TIMER(8),__LC_ASYNC_ENTER_TIMER |
| 755 | ext_no_vtime: | 736 | ext_no_vtime: |
| 756 | #endif | ||
| 757 | l %r9,__LC_THREAD_INFO # load pointer to thread_info struct | 737 | l %r9,__LC_THREAD_INFO # load pointer to thread_info struct |
| 758 | TRACE_IRQS_OFF | 738 | TRACE_IRQS_OFF |
| 759 | la %r2,SP_PTREGS(%r15) # address of register-save area | 739 | la %r2,SP_PTREGS(%r15) # address of register-save area |
| @@ -776,7 +756,6 @@ mcck_int_handler: | |||
| 776 | la %r12,__LC_MCK_OLD_PSW | 756 | la %r12,__LC_MCK_OLD_PSW |
| 777 | tm __LC_MCCK_CODE,0x80 # system damage? | 757 | tm __LC_MCCK_CODE,0x80 # system damage? |
| 778 | bo BASED(mcck_int_main) # yes -> rest of mcck code invalid | 758 | bo BASED(mcck_int_main) # yes -> rest of mcck code invalid |
| 779 | #ifdef CONFIG_VIRT_CPU_ACCOUNTING | ||
| 780 | mvc __LC_SAVE_AREA+52(8),__LC_ASYNC_ENTER_TIMER | 759 | mvc __LC_SAVE_AREA+52(8),__LC_ASYNC_ENTER_TIMER |
| 781 | mvc __LC_ASYNC_ENTER_TIMER(8),__LC_CPU_TIMER_SAVE_AREA | 760 | mvc __LC_ASYNC_ENTER_TIMER(8),__LC_CPU_TIMER_SAVE_AREA |
| 782 | tm __LC_MCCK_CODE+5,0x02 # stored cpu timer value valid? | 761 | tm __LC_MCCK_CODE+5,0x02 # stored cpu timer value valid? |
| @@ -793,9 +772,7 @@ mcck_int_handler: | |||
| 793 | la %r14,__LC_LAST_UPDATE_TIMER | 772 | la %r14,__LC_LAST_UPDATE_TIMER |
| 794 | 0: spt 0(%r14) | 773 | 0: spt 0(%r14) |
| 795 | mvc __LC_ASYNC_ENTER_TIMER(8),0(%r14) | 774 | mvc __LC_ASYNC_ENTER_TIMER(8),0(%r14) |
| 796 | 1: | 775 | 1: tm __LC_MCCK_CODE+2,0x09 # mwp + ia of old psw valid? |
| 797 | #endif | ||
| 798 | tm __LC_MCCK_CODE+2,0x09 # mwp + ia of old psw valid? | ||
| 799 | bno BASED(mcck_int_main) # no -> skip cleanup critical | 776 | bno BASED(mcck_int_main) # no -> skip cleanup critical |
| 800 | tm __LC_MCK_OLD_PSW+1,0x01 # test problem state bit | 777 | tm __LC_MCK_OLD_PSW+1,0x01 # test problem state bit |
| 801 | bnz BASED(mcck_int_main) # from user -> load async stack | 778 | bnz BASED(mcck_int_main) # from user -> load async stack |
| @@ -812,7 +789,6 @@ mcck_int_main: | |||
| 812 | be BASED(0f) | 789 | be BASED(0f) |
| 813 | l %r15,__LC_PANIC_STACK # load panic stack | 790 | l %r15,__LC_PANIC_STACK # load panic stack |
| 814 | 0: CREATE_STACK_FRAME __LC_MCK_OLD_PSW,__LC_SAVE_AREA+32 | 791 | 0: CREATE_STACK_FRAME __LC_MCK_OLD_PSW,__LC_SAVE_AREA+32 |
| 815 | #ifdef CONFIG_VIRT_CPU_ACCOUNTING | ||
| 816 | tm __LC_MCCK_CODE+2,0x08 # mwp of old psw valid? | 792 | tm __LC_MCCK_CODE+2,0x08 # mwp of old psw valid? |
| 817 | bno BASED(mcck_no_vtime) # no -> skip cleanup critical | 793 | bno BASED(mcck_no_vtime) # no -> skip cleanup critical |
| 818 | tm SP_PSW+1(%r15),0x01 # interrupting from user ? | 794 | tm SP_PSW+1(%r15),0x01 # interrupting from user ? |
| @@ -821,7 +797,6 @@ mcck_int_main: | |||
| 821 | UPDATE_VTIME __LC_LAST_UPDATE_TIMER,__LC_EXIT_TIMER,__LC_SYSTEM_TIMER | 797 | UPDATE_VTIME __LC_LAST_UPDATE_TIMER,__LC_EXIT_TIMER,__LC_SYSTEM_TIMER |
| 822 | mvc __LC_LAST_UPDATE_TIMER(8),__LC_ASYNC_ENTER_TIMER | 798 | mvc __LC_LAST_UPDATE_TIMER(8),__LC_ASYNC_ENTER_TIMER |
| 823 | mcck_no_vtime: | 799 | mcck_no_vtime: |
| 824 | #endif | ||
| 825 | l %r9,__LC_THREAD_INFO # load pointer to thread_info struct | 800 | l %r9,__LC_THREAD_INFO # load pointer to thread_info struct |
| 826 | la %r2,SP_PTREGS(%r15) # load pt_regs | 801 | la %r2,SP_PTREGS(%r15) # load pt_regs |
| 827 | l %r1,BASED(.Ls390_mcck) | 802 | l %r1,BASED(.Ls390_mcck) |
| @@ -843,16 +818,13 @@ mcck_no_vtime: | |||
| 843 | mcck_return: | 818 | mcck_return: |
| 844 | mvc __LC_RETURN_MCCK_PSW(8),SP_PSW(%r15) # move return PSW | 819 | mvc __LC_RETURN_MCCK_PSW(8),SP_PSW(%r15) # move return PSW |
| 845 | ni __LC_RETURN_MCCK_PSW+1,0xfd # clear wait state bit | 820 | ni __LC_RETURN_MCCK_PSW+1,0xfd # clear wait state bit |
| 846 | #ifdef CONFIG_VIRT_CPU_ACCOUNTING | ||
| 847 | mvc __LC_ASYNC_ENTER_TIMER(8),__LC_SAVE_AREA+52 | 821 | mvc __LC_ASYNC_ENTER_TIMER(8),__LC_SAVE_AREA+52 |
| 848 | tm __LC_RETURN_MCCK_PSW+1,0x01 # returning to user ? | 822 | tm __LC_RETURN_MCCK_PSW+1,0x01 # returning to user ? |
| 849 | bno BASED(0f) | 823 | bno BASED(0f) |
| 850 | lm %r0,%r15,SP_R0(%r15) # load gprs 0-15 | 824 | lm %r0,%r15,SP_R0(%r15) # load gprs 0-15 |
| 851 | stpt __LC_EXIT_TIMER | 825 | stpt __LC_EXIT_TIMER |
| 852 | lpsw __LC_RETURN_MCCK_PSW # back to caller | 826 | lpsw __LC_RETURN_MCCK_PSW # back to caller |
| 853 | 0: | 827 | 0: lm %r0,%r15,SP_R0(%r15) # load gprs 0-15 |
| 854 | #endif | ||
| 855 | lm %r0,%r15,SP_R0(%r15) # load gprs 0-15 | ||
| 856 | lpsw __LC_RETURN_MCCK_PSW # back to caller | 828 | lpsw __LC_RETURN_MCCK_PSW # back to caller |
| 857 | 829 | ||
| 858 | RESTORE_ALL __LC_RETURN_MCCK_PSW,0 | 830 | RESTORE_ALL __LC_RETURN_MCCK_PSW,0 |
| @@ -976,13 +948,11 @@ cleanup_system_call: | |||
| 976 | b BASED(1f) | 948 | b BASED(1f) |
| 977 | 0: la %r12,__LC_SAVE_AREA+32 | 949 | 0: la %r12,__LC_SAVE_AREA+32 |
| 978 | 1: | 950 | 1: |
| 979 | #ifdef CONFIG_VIRT_CPU_ACCOUNTING | ||
| 980 | clc __LC_RETURN_PSW+4(4),BASED(cleanup_system_call_insn+4) | 951 | clc __LC_RETURN_PSW+4(4),BASED(cleanup_system_call_insn+4) |
| 981 | bh BASED(0f) | 952 | bh BASED(0f) |
| 982 | mvc __LC_SYNC_ENTER_TIMER(8),__LC_ASYNC_ENTER_TIMER | 953 | mvc __LC_SYNC_ENTER_TIMER(8),__LC_ASYNC_ENTER_TIMER |
| 983 | 0: clc __LC_RETURN_PSW+4(4),BASED(cleanup_system_call_insn+8) | 954 | 0: clc __LC_RETURN_PSW+4(4),BASED(cleanup_system_call_insn+8) |
| 984 | bhe BASED(cleanup_vtime) | 955 | bhe BASED(cleanup_vtime) |
| 985 | #endif | ||
| 986 | clc __LC_RETURN_PSW+4(4),BASED(cleanup_system_call_insn) | 956 | clc __LC_RETURN_PSW+4(4),BASED(cleanup_system_call_insn) |
| 987 | bh BASED(0f) | 957 | bh BASED(0f) |
| 988 | mvc __LC_SAVE_AREA(16),0(%r12) | 958 | mvc __LC_SAVE_AREA(16),0(%r12) |
| @@ -993,7 +963,6 @@ cleanup_system_call: | |||
| 993 | l %r12,__LC_SAVE_AREA+48 # argh | 963 | l %r12,__LC_SAVE_AREA+48 # argh |
| 994 | st %r15,12(%r12) | 964 | st %r15,12(%r12) |
| 995 | lh %r7,0x8a | 965 | lh %r7,0x8a |
| 996 | #ifdef CONFIG_VIRT_CPU_ACCOUNTING | ||
| 997 | cleanup_vtime: | 966 | cleanup_vtime: |
| 998 | clc __LC_RETURN_PSW+4(4),BASED(cleanup_system_call_insn+12) | 967 | clc __LC_RETURN_PSW+4(4),BASED(cleanup_system_call_insn+12) |
| 999 | bhe BASED(cleanup_stime) | 968 | bhe BASED(cleanup_stime) |
| @@ -1004,18 +973,15 @@ cleanup_stime: | |||
| 1004 | UPDATE_VTIME __LC_LAST_UPDATE_TIMER,__LC_EXIT_TIMER,__LC_SYSTEM_TIMER | 973 | UPDATE_VTIME __LC_LAST_UPDATE_TIMER,__LC_EXIT_TIMER,__LC_SYSTEM_TIMER |
| 1005 | cleanup_update: | 974 | cleanup_update: |
| 1006 | mvc __LC_LAST_UPDATE_TIMER(8),__LC_SYNC_ENTER_TIMER | 975 | mvc __LC_LAST_UPDATE_TIMER(8),__LC_SYNC_ENTER_TIMER |
| 1007 | #endif | ||
| 1008 | mvc __LC_RETURN_PSW+4(4),BASED(cleanup_table_system_call+4) | 976 | mvc __LC_RETURN_PSW+4(4),BASED(cleanup_table_system_call+4) |
| 1009 | la %r12,__LC_RETURN_PSW | 977 | la %r12,__LC_RETURN_PSW |
| 1010 | br %r14 | 978 | br %r14 |
| 1011 | cleanup_system_call_insn: | 979 | cleanup_system_call_insn: |
| 1012 | .long sysc_saveall + 0x80000000 | 980 | .long sysc_saveall + 0x80000000 |
| 1013 | #ifdef CONFIG_VIRT_CPU_ACCOUNTING | ||
| 1014 | .long system_call + 0x80000000 | 981 | .long system_call + 0x80000000 |
| 1015 | .long sysc_vtime + 0x80000000 | 982 | .long sysc_vtime + 0x80000000 |
| 1016 | .long sysc_stime + 0x80000000 | 983 | .long sysc_stime + 0x80000000 |
| 1017 | .long sysc_update + 0x80000000 | 984 | .long sysc_update + 0x80000000 |
| 1018 | #endif | ||
| 1019 | 985 | ||
| 1020 | cleanup_sysc_return: | 986 | cleanup_sysc_return: |
| 1021 | mvc __LC_RETURN_PSW(4),0(%r12) | 987 | mvc __LC_RETURN_PSW(4),0(%r12) |
| @@ -1026,11 +992,9 @@ cleanup_sysc_return: | |||
| 1026 | cleanup_sysc_leave: | 992 | cleanup_sysc_leave: |
| 1027 | clc 4(4,%r12),BASED(cleanup_sysc_leave_insn) | 993 | clc 4(4,%r12),BASED(cleanup_sysc_leave_insn) |
| 1028 | be BASED(2f) | 994 | be BASED(2f) |
| 1029 | #ifdef CONFIG_VIRT_CPU_ACCOUNTING | ||
| 1030 | mvc __LC_EXIT_TIMER(8),__LC_ASYNC_ENTER_TIMER | 995 | mvc __LC_EXIT_TIMER(8),__LC_ASYNC_ENTER_TIMER |
| 1031 | clc 4(4,%r12),BASED(cleanup_sysc_leave_insn+4) | 996 | clc 4(4,%r12),BASED(cleanup_sysc_leave_insn+4) |
| 1032 | be BASED(2f) | 997 | be BASED(2f) |
| 1033 | #endif | ||
| 1034 | mvc __LC_RETURN_PSW(8),SP_PSW(%r15) | 998 | mvc __LC_RETURN_PSW(8),SP_PSW(%r15) |
| 1035 | c %r12,BASED(.Lmck_old_psw) | 999 | c %r12,BASED(.Lmck_old_psw) |
| 1036 | bne BASED(0f) | 1000 | bne BASED(0f) |
| @@ -1043,9 +1007,7 @@ cleanup_sysc_leave: | |||
| 1043 | br %r14 | 1007 | br %r14 |
| 1044 | cleanup_sysc_leave_insn: | 1008 | cleanup_sysc_leave_insn: |
| 1045 | .long sysc_done - 4 + 0x80000000 | 1009 | .long sysc_done - 4 + 0x80000000 |
| 1046 | #ifdef CONFIG_VIRT_CPU_ACCOUNTING | ||
| 1047 | .long sysc_done - 8 + 0x80000000 | 1010 | .long sysc_done - 8 + 0x80000000 |
| 1048 | #endif | ||
| 1049 | 1011 | ||
| 1050 | cleanup_io_return: | 1012 | cleanup_io_return: |
| 1051 | mvc __LC_RETURN_PSW(4),0(%r12) | 1013 | mvc __LC_RETURN_PSW(4),0(%r12) |
| @@ -1056,11 +1018,9 @@ cleanup_io_return: | |||
| 1056 | cleanup_io_leave: | 1018 | cleanup_io_leave: |
| 1057 | clc 4(4,%r12),BASED(cleanup_io_leave_insn) | 1019 | clc 4(4,%r12),BASED(cleanup_io_leave_insn) |
| 1058 | be BASED(2f) | 1020 | be BASED(2f) |
| 1059 | #ifdef CONFIG_VIRT_CPU_ACCOUNTING | ||
| 1060 | mvc __LC_EXIT_TIMER(8),__LC_ASYNC_ENTER_TIMER | 1021 | mvc __LC_EXIT_TIMER(8),__LC_ASYNC_ENTER_TIMER |
| 1061 | clc 4(4,%r12),BASED(cleanup_io_leave_insn+4) | 1022 | clc 4(4,%r12),BASED(cleanup_io_leave_insn+4) |
| 1062 | be BASED(2f) | 1023 | be BASED(2f) |
| 1063 | #endif | ||
| 1064 | mvc __LC_RETURN_PSW(8),SP_PSW(%r15) | 1024 | mvc __LC_RETURN_PSW(8),SP_PSW(%r15) |
| 1065 | c %r12,BASED(.Lmck_old_psw) | 1025 | c %r12,BASED(.Lmck_old_psw) |
| 1066 | bne BASED(0f) | 1026 | bne BASED(0f) |
| @@ -1073,9 +1033,7 @@ cleanup_io_leave: | |||
| 1073 | br %r14 | 1033 | br %r14 |
| 1074 | cleanup_io_leave_insn: | 1034 | cleanup_io_leave_insn: |
| 1075 | .long io_done - 4 + 0x80000000 | 1035 | .long io_done - 4 + 0x80000000 |
| 1076 | #ifdef CONFIG_VIRT_CPU_ACCOUNTING | ||
| 1077 | .long io_done - 8 + 0x80000000 | 1036 | .long io_done - 8 + 0x80000000 |
| 1078 | #endif | ||
| 1079 | 1037 | ||
| 1080 | /* | 1038 | /* |
| 1081 | * Integer constants | 1039 | * Integer constants |
diff --git a/arch/s390/kernel/entry64.S b/arch/s390/kernel/entry64.S index ea90d9a676f8..16bb4fd1a403 100644 --- a/arch/s390/kernel/entry64.S +++ b/arch/s390/kernel/entry64.S | |||
| @@ -96,20 +96,12 @@ _TIF_WORK_INT = (_TIF_SIGPENDING | _TIF_NOTIFY_RESUME | _TIF_NEED_RESCHED | \ | |||
| 96 | #define LOCKDEP_SYS_EXIT | 96 | #define LOCKDEP_SYS_EXIT |
| 97 | #endif | 97 | #endif |
| 98 | 98 | ||
| 99 | .macro STORE_TIMER lc_offset | ||
| 100 | #ifdef CONFIG_VIRT_CPU_ACCOUNTING | ||
| 101 | stpt \lc_offset | ||
| 102 | #endif | ||
| 103 | .endm | ||
| 104 | |||
| 105 | #ifdef CONFIG_VIRT_CPU_ACCOUNTING | ||
| 106 | .macro UPDATE_VTIME lc_from,lc_to,lc_sum | 99 | .macro UPDATE_VTIME lc_from,lc_to,lc_sum |
| 107 | lg %r10,\lc_from | 100 | lg %r10,\lc_from |
| 108 | slg %r10,\lc_to | 101 | slg %r10,\lc_to |
| 109 | alg %r10,\lc_sum | 102 | alg %r10,\lc_sum |
| 110 | stg %r10,\lc_sum | 103 | stg %r10,\lc_sum |
| 111 | .endm | 104 | .endm |
| 112 | #endif | ||
| 113 | 105 | ||
| 114 | /* | 106 | /* |
| 115 | * Register usage in interrupt handlers: | 107 | * Register usage in interrupt handlers: |
| @@ -186,7 +178,7 @@ _TIF_WORK_INT = (_TIF_SIGPENDING | _TIF_NOTIFY_RESUME | _TIF_NEED_RESCHED | \ | |||
| 186 | ni \psworg+1,0xfd # clear wait state bit | 178 | ni \psworg+1,0xfd # clear wait state bit |
| 187 | .endif | 179 | .endif |
| 188 | lmg %r0,%r15,SP_R0(%r15) # load gprs 0-15 of user | 180 | lmg %r0,%r15,SP_R0(%r15) # load gprs 0-15 of user |
| 189 | STORE_TIMER __LC_EXIT_TIMER | 181 | stpt __LC_EXIT_TIMER |
| 190 | lpswe \psworg # back to caller | 182 | lpswe \psworg # back to caller |
| 191 | .endm | 183 | .endm |
| 192 | 184 | ||
| @@ -233,20 +225,18 @@ __critical_start: | |||
| 233 | 225 | ||
| 234 | .globl system_call | 226 | .globl system_call |
| 235 | system_call: | 227 | system_call: |
| 236 | STORE_TIMER __LC_SYNC_ENTER_TIMER | 228 | stpt __LC_SYNC_ENTER_TIMER |
| 237 | sysc_saveall: | 229 | sysc_saveall: |
| 238 | SAVE_ALL_BASE __LC_SAVE_AREA | 230 | SAVE_ALL_BASE __LC_SAVE_AREA |
| 239 | SAVE_ALL_SVC __LC_SVC_OLD_PSW,__LC_SAVE_AREA | 231 | SAVE_ALL_SVC __LC_SVC_OLD_PSW,__LC_SAVE_AREA |
| 240 | CREATE_STACK_FRAME __LC_SVC_OLD_PSW,__LC_SAVE_AREA | 232 | CREATE_STACK_FRAME __LC_SVC_OLD_PSW,__LC_SAVE_AREA |
| 241 | llgh %r7,__LC_SVC_INT_CODE # get svc number from lowcore | 233 | llgh %r7,__LC_SVC_INT_CODE # get svc number from lowcore |
| 242 | #ifdef CONFIG_VIRT_CPU_ACCOUNTING | ||
| 243 | sysc_vtime: | 234 | sysc_vtime: |
| 244 | UPDATE_VTIME __LC_EXIT_TIMER,__LC_SYNC_ENTER_TIMER,__LC_USER_TIMER | 235 | UPDATE_VTIME __LC_EXIT_TIMER,__LC_SYNC_ENTER_TIMER,__LC_USER_TIMER |
| 245 | sysc_stime: | 236 | sysc_stime: |
| 246 | UPDATE_VTIME __LC_LAST_UPDATE_TIMER,__LC_EXIT_TIMER,__LC_SYSTEM_TIMER | 237 | UPDATE_VTIME __LC_LAST_UPDATE_TIMER,__LC_EXIT_TIMER,__LC_SYSTEM_TIMER |
| 247 | sysc_update: | 238 | sysc_update: |
| 248 | mvc __LC_LAST_UPDATE_TIMER(8),__LC_SYNC_ENTER_TIMER | 239 | mvc __LC_LAST_UPDATE_TIMER(8),__LC_SYNC_ENTER_TIMER |
| 249 | #endif | ||
| 250 | sysc_do_svc: | 240 | sysc_do_svc: |
| 251 | lg %r9,__LC_THREAD_INFO # load pointer to thread_info struct | 241 | lg %r9,__LC_THREAD_INFO # load pointer to thread_info struct |
| 252 | ltgr %r7,%r7 # test for svc 0 | 242 | ltgr %r7,%r7 # test for svc 0 |
| @@ -469,20 +459,18 @@ pgm_check_handler: | |||
| 469 | * we just ignore the PER event (FIXME: is there anything we have to do | 459 | * we just ignore the PER event (FIXME: is there anything we have to do |
| 470 | * for LPSW?). | 460 | * for LPSW?). |
| 471 | */ | 461 | */ |
| 472 | STORE_TIMER __LC_SYNC_ENTER_TIMER | 462 | stpt __LC_SYNC_ENTER_TIMER |
| 473 | SAVE_ALL_BASE __LC_SAVE_AREA | 463 | SAVE_ALL_BASE __LC_SAVE_AREA |
| 474 | tm __LC_PGM_INT_CODE+1,0x80 # check whether we got a per exception | 464 | tm __LC_PGM_INT_CODE+1,0x80 # check whether we got a per exception |
| 475 | jnz pgm_per # got per exception -> special case | 465 | jnz pgm_per # got per exception -> special case |
| 476 | SAVE_ALL_SYNC __LC_PGM_OLD_PSW,__LC_SAVE_AREA | 466 | SAVE_ALL_SYNC __LC_PGM_OLD_PSW,__LC_SAVE_AREA |
| 477 | CREATE_STACK_FRAME __LC_PGM_OLD_PSW,__LC_SAVE_AREA | 467 | CREATE_STACK_FRAME __LC_PGM_OLD_PSW,__LC_SAVE_AREA |
| 478 | #ifdef CONFIG_VIRT_CPU_ACCOUNTING | ||
| 479 | tm SP_PSW+1(%r15),0x01 # interrupting from user ? | 468 | tm SP_PSW+1(%r15),0x01 # interrupting from user ? |
| 480 | jz pgm_no_vtime | 469 | jz pgm_no_vtime |
| 481 | UPDATE_VTIME __LC_EXIT_TIMER,__LC_SYNC_ENTER_TIMER,__LC_USER_TIMER | 470 | UPDATE_VTIME __LC_EXIT_TIMER,__LC_SYNC_ENTER_TIMER,__LC_USER_TIMER |
| 482 | UPDATE_VTIME __LC_LAST_UPDATE_TIMER,__LC_EXIT_TIMER,__LC_SYSTEM_TIMER | 471 | UPDATE_VTIME __LC_LAST_UPDATE_TIMER,__LC_EXIT_TIMER,__LC_SYSTEM_TIMER |
| 483 | mvc __LC_LAST_UPDATE_TIMER(8),__LC_SYNC_ENTER_TIMER | 472 | mvc __LC_LAST_UPDATE_TIMER(8),__LC_SYNC_ENTER_TIMER |
| 484 | pgm_no_vtime: | 473 | pgm_no_vtime: |
| 485 | #endif | ||
| 486 | lg %r9,__LC_THREAD_INFO # load pointer to thread_info struct | 474 | lg %r9,__LC_THREAD_INFO # load pointer to thread_info struct |
| 487 | mvc SP_ARGS(8,%r15),__LC_LAST_BREAK | 475 | mvc SP_ARGS(8,%r15),__LC_LAST_BREAK |
| 488 | TRACE_IRQS_OFF | 476 | TRACE_IRQS_OFF |
| @@ -516,14 +504,12 @@ pgm_per: | |||
| 516 | pgm_per_std: | 504 | pgm_per_std: |
| 517 | SAVE_ALL_SYNC __LC_PGM_OLD_PSW,__LC_SAVE_AREA | 505 | SAVE_ALL_SYNC __LC_PGM_OLD_PSW,__LC_SAVE_AREA |
| 518 | CREATE_STACK_FRAME __LC_PGM_OLD_PSW,__LC_SAVE_AREA | 506 | CREATE_STACK_FRAME __LC_PGM_OLD_PSW,__LC_SAVE_AREA |
| 519 | #ifdef CONFIG_VIRT_CPU_ACCOUNTING | ||
| 520 | tm SP_PSW+1(%r15),0x01 # interrupting from user ? | 507 | tm SP_PSW+1(%r15),0x01 # interrupting from user ? |
| 521 | jz pgm_no_vtime2 | 508 | jz pgm_no_vtime2 |
| 522 | UPDATE_VTIME __LC_EXIT_TIMER,__LC_SYNC_ENTER_TIMER,__LC_USER_TIMER | 509 | UPDATE_VTIME __LC_EXIT_TIMER,__LC_SYNC_ENTER_TIMER,__LC_USER_TIMER |
| 523 | UPDATE_VTIME __LC_LAST_UPDATE_TIMER,__LC_EXIT_TIMER,__LC_SYSTEM_TIMER | 510 | UPDATE_VTIME __LC_LAST_UPDATE_TIMER,__LC_EXIT_TIMER,__LC_SYSTEM_TIMER |
| 524 | mvc __LC_LAST_UPDATE_TIMER(8),__LC_SYNC_ENTER_TIMER | 511 | mvc __LC_LAST_UPDATE_TIMER(8),__LC_SYNC_ENTER_TIMER |
| 525 | pgm_no_vtime2: | 512 | pgm_no_vtime2: |
| 526 | #endif | ||
| 527 | lg %r9,__LC_THREAD_INFO # load pointer to thread_info struct | 513 | lg %r9,__LC_THREAD_INFO # load pointer to thread_info struct |
| 528 | TRACE_IRQS_OFF | 514 | TRACE_IRQS_OFF |
| 529 | lg %r1,__TI_task(%r9) | 515 | lg %r1,__TI_task(%r9) |
| @@ -545,11 +531,9 @@ pgm_no_vtime2: | |||
| 545 | pgm_svcper: | 531 | pgm_svcper: |
| 546 | SAVE_ALL_SYNC __LC_SVC_OLD_PSW,__LC_SAVE_AREA | 532 | SAVE_ALL_SYNC __LC_SVC_OLD_PSW,__LC_SAVE_AREA |
| 547 | CREATE_STACK_FRAME __LC_SVC_OLD_PSW,__LC_SAVE_AREA | 533 | CREATE_STACK_FRAME __LC_SVC_OLD_PSW,__LC_SAVE_AREA |
| 548 | #ifdef CONFIG_VIRT_CPU_ACCOUNTING | ||
| 549 | UPDATE_VTIME __LC_EXIT_TIMER,__LC_SYNC_ENTER_TIMER,__LC_USER_TIMER | 534 | UPDATE_VTIME __LC_EXIT_TIMER,__LC_SYNC_ENTER_TIMER,__LC_USER_TIMER |
| 550 | UPDATE_VTIME __LC_LAST_UPDATE_TIMER,__LC_EXIT_TIMER,__LC_SYSTEM_TIMER | 535 | UPDATE_VTIME __LC_LAST_UPDATE_TIMER,__LC_EXIT_TIMER,__LC_SYSTEM_TIMER |
| 551 | mvc __LC_LAST_UPDATE_TIMER(8),__LC_SYNC_ENTER_TIMER | 536 | mvc __LC_LAST_UPDATE_TIMER(8),__LC_SYNC_ENTER_TIMER |
| 552 | #endif | ||
| 553 | llgh %r7,__LC_SVC_INT_CODE # get svc number from lowcore | 537 | llgh %r7,__LC_SVC_INT_CODE # get svc number from lowcore |
| 554 | lg %r9,__LC_THREAD_INFO # load pointer to thread_info struct | 538 | lg %r9,__LC_THREAD_INFO # load pointer to thread_info struct |
| 555 | lg %r1,__TI_task(%r9) | 539 | lg %r1,__TI_task(%r9) |
| @@ -575,19 +559,17 @@ kernel_per: | |||
| 575 | */ | 559 | */ |
| 576 | .globl io_int_handler | 560 | .globl io_int_handler |
| 577 | io_int_handler: | 561 | io_int_handler: |
| 578 | STORE_TIMER __LC_ASYNC_ENTER_TIMER | 562 | stpt __LC_ASYNC_ENTER_TIMER |
| 579 | stck __LC_INT_CLOCK | 563 | stck __LC_INT_CLOCK |
| 580 | SAVE_ALL_BASE __LC_SAVE_AREA+32 | 564 | SAVE_ALL_BASE __LC_SAVE_AREA+32 |
| 581 | SAVE_ALL_ASYNC __LC_IO_OLD_PSW,__LC_SAVE_AREA+32 | 565 | SAVE_ALL_ASYNC __LC_IO_OLD_PSW,__LC_SAVE_AREA+32 |
| 582 | CREATE_STACK_FRAME __LC_IO_OLD_PSW,__LC_SAVE_AREA+32 | 566 | CREATE_STACK_FRAME __LC_IO_OLD_PSW,__LC_SAVE_AREA+32 |
| 583 | #ifdef CONFIG_VIRT_CPU_ACCOUNTING | ||
| 584 | tm SP_PSW+1(%r15),0x01 # interrupting from user ? | 567 | tm SP_PSW+1(%r15),0x01 # interrupting from user ? |
| 585 | jz io_no_vtime | 568 | jz io_no_vtime |
| 586 | UPDATE_VTIME __LC_EXIT_TIMER,__LC_ASYNC_ENTER_TIMER,__LC_USER_TIMER | 569 | UPDATE_VTIME __LC_EXIT_TIMER,__LC_ASYNC_ENTER_TIMER,__LC_USER_TIMER |
| 587 | UPDATE_VTIME __LC_LAST_UPDATE_TIMER,__LC_EXIT_TIMER,__LC_SYSTEM_TIMER | 570 | UPDATE_VTIME __LC_LAST_UPDATE_TIMER,__LC_EXIT_TIMER,__LC_SYSTEM_TIMER |
| 588 | mvc __LC_LAST_UPDATE_TIMER(8),__LC_ASYNC_ENTER_TIMER | 571 | mvc __LC_LAST_UPDATE_TIMER(8),__LC_ASYNC_ENTER_TIMER |
| 589 | io_no_vtime: | 572 | io_no_vtime: |
| 590 | #endif | ||
| 591 | lg %r9,__LC_THREAD_INFO # load pointer to thread_info struct | 573 | lg %r9,__LC_THREAD_INFO # load pointer to thread_info struct |
| 592 | TRACE_IRQS_OFF | 574 | TRACE_IRQS_OFF |
| 593 | la %r2,SP_PTREGS(%r15) # address of register-save area | 575 | la %r2,SP_PTREGS(%r15) # address of register-save area |
| @@ -739,19 +721,17 @@ io_notify_resume: | |||
| 739 | */ | 721 | */ |
| 740 | .globl ext_int_handler | 722 | .globl ext_int_handler |
| 741 | ext_int_handler: | 723 | ext_int_handler: |
| 742 | STORE_TIMER __LC_ASYNC_ENTER_TIMER | 724 | stpt __LC_ASYNC_ENTER_TIMER |
| 743 | stck __LC_INT_CLOCK | 725 | stck __LC_INT_CLOCK |
| 744 | SAVE_ALL_BASE __LC_SAVE_AREA+32 | 726 | SAVE_ALL_BASE __LC_SAVE_AREA+32 |
| 745 | SAVE_ALL_ASYNC __LC_EXT_OLD_PSW,__LC_SAVE_AREA+32 | 727 | SAVE_ALL_ASYNC __LC_EXT_OLD_PSW,__LC_SAVE_AREA+32 |
| 746 | CREATE_STACK_FRAME __LC_EXT_OLD_PSW,__LC_SAVE_AREA+32 | 728 | CREATE_STACK_FRAME __LC_EXT_OLD_PSW,__LC_SAVE_AREA+32 |
| 747 | #ifdef CONFIG_VIRT_CPU_ACCOUNTING | ||
| 748 | tm SP_PSW+1(%r15),0x01 # interrupting from user ? | 729 | tm SP_PSW+1(%r15),0x01 # interrupting from user ? |
| 749 | jz ext_no_vtime | 730 | jz ext_no_vtime |
| 750 | UPDATE_VTIME __LC_EXIT_TIMER,__LC_ASYNC_ENTER_TIMER,__LC_USER_TIMER | 731 | UPDATE_VTIME __LC_EXIT_TIMER,__LC_ASYNC_ENTER_TIMER,__LC_USER_TIMER |
| 751 | UPDATE_VTIME __LC_LAST_UPDATE_TIMER,__LC_EXIT_TIMER,__LC_SYSTEM_TIMER | 732 | UPDATE_VTIME __LC_LAST_UPDATE_TIMER,__LC_EXIT_TIMER,__LC_SYSTEM_TIMER |
| 752 | mvc __LC_LAST_UPDATE_TIMER(8),__LC_ASYNC_ENTER_TIMER | 733 | mvc __LC_LAST_UPDATE_TIMER(8),__LC_ASYNC_ENTER_TIMER |
| 753 | ext_no_vtime: | 734 | ext_no_vtime: |
| 754 | #endif | ||
| 755 | lg %r9,__LC_THREAD_INFO # load pointer to thread_info struct | 735 | lg %r9,__LC_THREAD_INFO # load pointer to thread_info struct |
| 756 | TRACE_IRQS_OFF | 736 | TRACE_IRQS_OFF |
| 757 | la %r2,SP_PTREGS(%r15) # address of register-save area | 737 | la %r2,SP_PTREGS(%r15) # address of register-save area |
| @@ -773,7 +753,6 @@ mcck_int_handler: | |||
| 773 | la %r12,__LC_MCK_OLD_PSW | 753 | la %r12,__LC_MCK_OLD_PSW |
| 774 | tm __LC_MCCK_CODE,0x80 # system damage? | 754 | tm __LC_MCCK_CODE,0x80 # system damage? |
| 775 | jo mcck_int_main # yes -> rest of mcck code invalid | 755 | jo mcck_int_main # yes -> rest of mcck code invalid |
| 776 | #ifdef CONFIG_VIRT_CPU_ACCOUNTING | ||
| 777 | la %r14,4095 | 756 | la %r14,4095 |
| 778 | mvc __LC_SAVE_AREA+104(8),__LC_ASYNC_ENTER_TIMER | 757 | mvc __LC_SAVE_AREA+104(8),__LC_ASYNC_ENTER_TIMER |
| 779 | mvc __LC_ASYNC_ENTER_TIMER(8),__LC_CPU_TIMER_SAVE_AREA-4095(%r14) | 758 | mvc __LC_ASYNC_ENTER_TIMER(8),__LC_CPU_TIMER_SAVE_AREA-4095(%r14) |
| @@ -791,9 +770,7 @@ mcck_int_handler: | |||
| 791 | la %r14,__LC_LAST_UPDATE_TIMER | 770 | la %r14,__LC_LAST_UPDATE_TIMER |
| 792 | 0: spt 0(%r14) | 771 | 0: spt 0(%r14) |
| 793 | mvc __LC_ASYNC_ENTER_TIMER(8),0(%r14) | 772 | mvc __LC_ASYNC_ENTER_TIMER(8),0(%r14) |
| 794 | 1: | 773 | 1: tm __LC_MCCK_CODE+2,0x09 # mwp + ia of old psw valid? |
| 795 | #endif | ||
| 796 | tm __LC_MCCK_CODE+2,0x09 # mwp + ia of old psw valid? | ||
| 797 | jno mcck_int_main # no -> skip cleanup critical | 774 | jno mcck_int_main # no -> skip cleanup critical |
| 798 | tm __LC_MCK_OLD_PSW+1,0x01 # test problem state bit | 775 | tm __LC_MCK_OLD_PSW+1,0x01 # test problem state bit |
| 799 | jnz mcck_int_main # from user -> load kernel stack | 776 | jnz mcck_int_main # from user -> load kernel stack |
| @@ -809,7 +786,6 @@ mcck_int_main: | |||
| 809 | jz 0f | 786 | jz 0f |
| 810 | lg %r15,__LC_PANIC_STACK # load panic stack | 787 | lg %r15,__LC_PANIC_STACK # load panic stack |
| 811 | 0: CREATE_STACK_FRAME __LC_MCK_OLD_PSW,__LC_SAVE_AREA+64 | 788 | 0: CREATE_STACK_FRAME __LC_MCK_OLD_PSW,__LC_SAVE_AREA+64 |
| 812 | #ifdef CONFIG_VIRT_CPU_ACCOUNTING | ||
| 813 | tm __LC_MCCK_CODE+2,0x08 # mwp of old psw valid? | 789 | tm __LC_MCCK_CODE+2,0x08 # mwp of old psw valid? |
| 814 | jno mcck_no_vtime # no -> no timer update | 790 | jno mcck_no_vtime # no -> no timer update |
| 815 | tm SP_PSW+1(%r15),0x01 # interrupting from user ? | 791 | tm SP_PSW+1(%r15),0x01 # interrupting from user ? |
| @@ -818,7 +794,6 @@ mcck_int_main: | |||
| 818 | UPDATE_VTIME __LC_LAST_UPDATE_TIMER,__LC_EXIT_TIMER,__LC_SYSTEM_TIMER | 794 | UPDATE_VTIME __LC_LAST_UPDATE_TIMER,__LC_EXIT_TIMER,__LC_SYSTEM_TIMER |
| 819 | mvc __LC_LAST_UPDATE_TIMER(8),__LC_ASYNC_ENTER_TIMER | 795 | mvc __LC_LAST_UPDATE_TIMER(8),__LC_ASYNC_ENTER_TIMER |
| 820 | mcck_no_vtime: | 796 | mcck_no_vtime: |
| 821 | #endif | ||
| 822 | lg %r9,__LC_THREAD_INFO # load pointer to thread_info struct | 797 | lg %r9,__LC_THREAD_INFO # load pointer to thread_info struct |
| 823 | la %r2,SP_PTREGS(%r15) # load pt_regs | 798 | la %r2,SP_PTREGS(%r15) # load pt_regs |
| 824 | brasl %r14,s390_do_machine_check | 799 | brasl %r14,s390_do_machine_check |
| @@ -839,14 +814,11 @@ mcck_return: | |||
| 839 | mvc __LC_RETURN_MCCK_PSW(16),SP_PSW(%r15) # move return PSW | 814 | mvc __LC_RETURN_MCCK_PSW(16),SP_PSW(%r15) # move return PSW |
| 840 | ni __LC_RETURN_MCCK_PSW+1,0xfd # clear wait state bit | 815 | ni __LC_RETURN_MCCK_PSW+1,0xfd # clear wait state bit |
| 841 | lmg %r0,%r15,SP_R0(%r15) # load gprs 0-15 | 816 | lmg %r0,%r15,SP_R0(%r15) # load gprs 0-15 |
| 842 | #ifdef CONFIG_VIRT_CPU_ACCOUNTING | ||
| 843 | mvc __LC_ASYNC_ENTER_TIMER(8),__LC_SAVE_AREA+104 | 817 | mvc __LC_ASYNC_ENTER_TIMER(8),__LC_SAVE_AREA+104 |
| 844 | tm __LC_RETURN_MCCK_PSW+1,0x01 # returning to user ? | 818 | tm __LC_RETURN_MCCK_PSW+1,0x01 # returning to user ? |
| 845 | jno 0f | 819 | jno 0f |
| 846 | stpt __LC_EXIT_TIMER | 820 | stpt __LC_EXIT_TIMER |
| 847 | 0: | 821 | 0: lpswe __LC_RETURN_MCCK_PSW # back to caller |
| 848 | #endif | ||
| 849 | lpswe __LC_RETURN_MCCK_PSW # back to caller | ||
| 850 | 822 | ||
| 851 | /* | 823 | /* |
| 852 | * Restart interruption handler, kick starter for additional CPUs | 824 | * Restart interruption handler, kick starter for additional CPUs |
| @@ -964,13 +936,11 @@ cleanup_system_call: | |||
| 964 | j 1f | 936 | j 1f |
| 965 | 0: la %r12,__LC_SAVE_AREA+64 | 937 | 0: la %r12,__LC_SAVE_AREA+64 |
| 966 | 1: | 938 | 1: |
| 967 | #ifdef CONFIG_VIRT_CPU_ACCOUNTING | ||
| 968 | clc __LC_RETURN_PSW+8(8),BASED(cleanup_system_call_insn+8) | 939 | clc __LC_RETURN_PSW+8(8),BASED(cleanup_system_call_insn+8) |
| 969 | jh 0f | 940 | jh 0f |
| 970 | mvc __LC_SYNC_ENTER_TIMER(8),__LC_ASYNC_ENTER_TIMER | 941 | mvc __LC_SYNC_ENTER_TIMER(8),__LC_ASYNC_ENTER_TIMER |
| 971 | 0: clc __LC_RETURN_PSW+8(8),BASED(cleanup_system_call_insn+16) | 942 | 0: clc __LC_RETURN_PSW+8(8),BASED(cleanup_system_call_insn+16) |
| 972 | jhe cleanup_vtime | 943 | jhe cleanup_vtime |
| 973 | #endif | ||
| 974 | clc __LC_RETURN_PSW+8(8),BASED(cleanup_system_call_insn) | 944 | clc __LC_RETURN_PSW+8(8),BASED(cleanup_system_call_insn) |
| 975 | jh 0f | 945 | jh 0f |
| 976 | mvc __LC_SAVE_AREA(32),0(%r12) | 946 | mvc __LC_SAVE_AREA(32),0(%r12) |
| @@ -981,7 +951,6 @@ cleanup_system_call: | |||
| 981 | lg %r12,__LC_SAVE_AREA+96 # argh | 951 | lg %r12,__LC_SAVE_AREA+96 # argh |
| 982 | stg %r15,24(%r12) | 952 | stg %r15,24(%r12) |
| 983 | llgh %r7,__LC_SVC_INT_CODE | 953 | llgh %r7,__LC_SVC_INT_CODE |
| 984 | #ifdef CONFIG_VIRT_CPU_ACCOUNTING | ||
| 985 | cleanup_vtime: | 954 | cleanup_vtime: |
| 986 | clc __LC_RETURN_PSW+8(8),BASED(cleanup_system_call_insn+24) | 955 | clc __LC_RETURN_PSW+8(8),BASED(cleanup_system_call_insn+24) |
| 987 | jhe cleanup_stime | 956 | jhe cleanup_stime |
| @@ -992,18 +961,15 @@ cleanup_stime: | |||
| 992 | UPDATE_VTIME __LC_LAST_UPDATE_TIMER,__LC_EXIT_TIMER,__LC_SYSTEM_TIMER | 961 | UPDATE_VTIME __LC_LAST_UPDATE_TIMER,__LC_EXIT_TIMER,__LC_SYSTEM_TIMER |
| 993 | cleanup_update: | 962 | cleanup_update: |
| 994 | mvc __LC_LAST_UPDATE_TIMER(8),__LC_SYNC_ENTER_TIMER | 963 | mvc __LC_LAST_UPDATE_TIMER(8),__LC_SYNC_ENTER_TIMER |
| 995 | #endif | ||
| 996 | mvc __LC_RETURN_PSW+8(8),BASED(cleanup_table_system_call+8) | 964 | mvc __LC_RETURN_PSW+8(8),BASED(cleanup_table_system_call+8) |
| 997 | la %r12,__LC_RETURN_PSW | 965 | la %r12,__LC_RETURN_PSW |
| 998 | br %r14 | 966 | br %r14 |
| 999 | cleanup_system_call_insn: | 967 | cleanup_system_call_insn: |
| 1000 | .quad sysc_saveall | 968 | .quad sysc_saveall |
| 1001 | #ifdef CONFIG_VIRT_CPU_ACCOUNTING | ||
| 1002 | .quad system_call | 969 | .quad system_call |
| 1003 | .quad sysc_vtime | 970 | .quad sysc_vtime |
| 1004 | .quad sysc_stime | 971 | .quad sysc_stime |
| 1005 | .quad sysc_update | 972 | .quad sysc_update |
| 1006 | #endif | ||
| 1007 | 973 | ||
| 1008 | cleanup_sysc_return: | 974 | cleanup_sysc_return: |
| 1009 | mvc __LC_RETURN_PSW(8),0(%r12) | 975 | mvc __LC_RETURN_PSW(8),0(%r12) |
| @@ -1014,11 +980,9 @@ cleanup_sysc_return: | |||
| 1014 | cleanup_sysc_leave: | 980 | cleanup_sysc_leave: |
| 1015 | clc 8(8,%r12),BASED(cleanup_sysc_leave_insn) | 981 | clc 8(8,%r12),BASED(cleanup_sysc_leave_insn) |
| 1016 | je 2f | 982 | je 2f |
| 1017 | #ifdef CONFIG_VIRT_CPU_ACCOUNTING | ||
| 1018 | mvc __LC_EXIT_TIMER(8),__LC_ASYNC_ENTER_TIMER | 983 | mvc __LC_EXIT_TIMER(8),__LC_ASYNC_ENTER_TIMER |
| 1019 | clc 8(8,%r12),BASED(cleanup_sysc_leave_insn+8) | 984 | clc 8(8,%r12),BASED(cleanup_sysc_leave_insn+8) |
| 1020 | je 2f | 985 | je 2f |
| 1021 | #endif | ||
| 1022 | mvc __LC_RETURN_PSW(16),SP_PSW(%r15) | 986 | mvc __LC_RETURN_PSW(16),SP_PSW(%r15) |
| 1023 | cghi %r12,__LC_MCK_OLD_PSW | 987 | cghi %r12,__LC_MCK_OLD_PSW |
| 1024 | jne 0f | 988 | jne 0f |
| @@ -1031,9 +995,7 @@ cleanup_sysc_leave: | |||
| 1031 | br %r14 | 995 | br %r14 |
| 1032 | cleanup_sysc_leave_insn: | 996 | cleanup_sysc_leave_insn: |
| 1033 | .quad sysc_done - 4 | 997 | .quad sysc_done - 4 |
| 1034 | #ifdef CONFIG_VIRT_CPU_ACCOUNTING | ||
| 1035 | .quad sysc_done - 8 | 998 | .quad sysc_done - 8 |
| 1036 | #endif | ||
| 1037 | 999 | ||
| 1038 | cleanup_io_return: | 1000 | cleanup_io_return: |
| 1039 | mvc __LC_RETURN_PSW(8),0(%r12) | 1001 | mvc __LC_RETURN_PSW(8),0(%r12) |
| @@ -1044,11 +1006,9 @@ cleanup_io_return: | |||
| 1044 | cleanup_io_leave: | 1006 | cleanup_io_leave: |
| 1045 | clc 8(8,%r12),BASED(cleanup_io_leave_insn) | 1007 | clc 8(8,%r12),BASED(cleanup_io_leave_insn) |
| 1046 | je 2f | 1008 | je 2f |
| 1047 | #ifdef CONFIG_VIRT_CPU_ACCOUNTING | ||
| 1048 | mvc __LC_EXIT_TIMER(8),__LC_ASYNC_ENTER_TIMER | 1009 | mvc __LC_EXIT_TIMER(8),__LC_ASYNC_ENTER_TIMER |
| 1049 | clc 8(8,%r12),BASED(cleanup_io_leave_insn+8) | 1010 | clc 8(8,%r12),BASED(cleanup_io_leave_insn+8) |
| 1050 | je 2f | 1011 | je 2f |
| 1051 | #endif | ||
| 1052 | mvc __LC_RETURN_PSW(16),SP_PSW(%r15) | 1012 | mvc __LC_RETURN_PSW(16),SP_PSW(%r15) |
| 1053 | cghi %r12,__LC_MCK_OLD_PSW | 1013 | cghi %r12,__LC_MCK_OLD_PSW |
| 1054 | jne 0f | 1014 | jne 0f |
| @@ -1061,9 +1021,7 @@ cleanup_io_leave: | |||
| 1061 | br %r14 | 1021 | br %r14 |
| 1062 | cleanup_io_leave_insn: | 1022 | cleanup_io_leave_insn: |
| 1063 | .quad io_done - 4 | 1023 | .quad io_done - 4 |
| 1064 | #ifdef CONFIG_VIRT_CPU_ACCOUNTING | ||
| 1065 | .quad io_done - 8 | 1024 | .quad io_done - 8 |
| 1066 | #endif | ||
| 1067 | 1025 | ||
| 1068 | /* | 1026 | /* |
| 1069 | * Integer constants | 1027 | * Integer constants |
diff --git a/arch/s390/kernel/smp.c b/arch/s390/kernel/smp.c index 176a43e5b8b4..bf170c698f0c 100644 --- a/arch/s390/kernel/smp.c +++ b/arch/s390/kernel/smp.c | |||
| @@ -441,10 +441,8 @@ int __cpuinit start_secondary(void *cpuvoid) | |||
| 441 | preempt_disable(); | 441 | preempt_disable(); |
| 442 | /* Enable TOD clock interrupts on the secondary cpu. */ | 442 | /* Enable TOD clock interrupts on the secondary cpu. */ |
| 443 | init_cpu_timer(); | 443 | init_cpu_timer(); |
| 444 | #ifdef CONFIG_VIRT_TIMER | ||
| 445 | /* Enable cpu timer interrupts on the secondary cpu. */ | 444 | /* Enable cpu timer interrupts on the secondary cpu. */ |
| 446 | init_cpu_vtimer(); | 445 | init_cpu_vtimer(); |
| 447 | #endif | ||
| 448 | /* Enable pfault pseudo page faults on this cpu. */ | 446 | /* Enable pfault pseudo page faults on this cpu. */ |
| 449 | pfault_init(); | 447 | pfault_init(); |
| 450 | 448 | ||
diff --git a/arch/s390/kernel/time.c b/arch/s390/kernel/time.c index 496528561248..95620296e1ad 100644 --- a/arch/s390/kernel/time.c +++ b/arch/s390/kernel/time.c | |||
| @@ -286,10 +286,8 @@ void __init time_init(void) | |||
| 286 | 286 | ||
| 287 | /* Enable TOD clock interrupts on the boot cpu. */ | 287 | /* Enable TOD clock interrupts on the boot cpu. */ |
| 288 | init_cpu_timer(); | 288 | init_cpu_timer(); |
| 289 | 289 | /* Enable cpu timer interrupts on the boot cpu. */ | |
| 290 | #ifdef CONFIG_VIRT_TIMER | ||
| 291 | vtime_init(); | 290 | vtime_init(); |
| 292 | #endif | ||
| 293 | } | 291 | } |
| 294 | 292 | ||
| 295 | /* | 293 | /* |
diff --git a/arch/s390/kernel/vtime.c b/arch/s390/kernel/vtime.c index 0fa5dc5d68e1..75a6e62ea973 100644 --- a/arch/s390/kernel/vtime.c +++ b/arch/s390/kernel/vtime.c | |||
| @@ -27,7 +27,6 @@ | |||
| 27 | static ext_int_info_t ext_int_info_timer; | 27 | static ext_int_info_t ext_int_info_timer; |
| 28 | static DEFINE_PER_CPU(struct vtimer_queue, virt_cpu_timer); | 28 | static DEFINE_PER_CPU(struct vtimer_queue, virt_cpu_timer); |
| 29 | 29 | ||
| 30 | #ifdef CONFIG_VIRT_CPU_ACCOUNTING | ||
| 31 | /* | 30 | /* |
| 32 | * Update process times based on virtual cpu times stored by entry.S | 31 | * Update process times based on virtual cpu times stored by entry.S |
| 33 | * to the lowcore fields user_timer, system_timer & steal_clock. | 32 | * to the lowcore fields user_timer, system_timer & steal_clock. |
| @@ -125,16 +124,6 @@ static inline void set_vtimer(__u64 expires) | |||
| 125 | /* store expire time for this CPU timer */ | 124 | /* store expire time for this CPU timer */ |
| 126 | __get_cpu_var(virt_cpu_timer).to_expire = expires; | 125 | __get_cpu_var(virt_cpu_timer).to_expire = expires; |
| 127 | } | 126 | } |
| 128 | #else | ||
| 129 | static inline void set_vtimer(__u64 expires) | ||
| 130 | { | ||
| 131 | S390_lowcore.last_update_timer = expires; | ||
| 132 | asm volatile ("SPT %0" : : "m" (S390_lowcore.last_update_timer)); | ||
| 133 | |||
| 134 | /* store expire time for this CPU timer */ | ||
| 135 | __get_cpu_var(virt_cpu_timer).to_expire = expires; | ||
| 136 | } | ||
| 137 | #endif | ||
| 138 | 127 | ||
| 139 | void vtime_start_cpu_timer(void) | 128 | void vtime_start_cpu_timer(void) |
| 140 | { | 129 | { |
