diff options
author | David Hildenbrand <dahi@linux.vnet.ibm.com> | 2014-05-23 06:25:11 -0400 |
---|---|---|
committer | Christian Borntraeger <borntraeger@de.ibm.com> | 2014-10-28 08:09:13 -0400 |
commit | 42cb0c9ff92eba2168d1b8f69d6e62d2af608a13 (patch) | |
tree | 79e4bec9925d4c80eea5b1a56fe379edc06d2526 | |
parent | b8983830826f3b0747a6d1c1f351121b9cc93276 (diff) |
KVM: s390: sigp: instruction counters for all sigp orders
This patch introduces instruction counters for all known sigp orders and also a
separate one for unknown orders that are passed to user space.
Signed-off-by: David Hildenbrand <dahi@linux.vnet.ibm.com>
Reviewed-by: Cornelia Huck <cornelia.huck@de.ibm.com>
Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com>
-rw-r--r-- | arch/s390/include/asm/kvm_host.h | 7 | ||||
-rw-r--r-- | arch/s390/kvm/kvm-s390.c | 7 | ||||
-rw-r--r-- | arch/s390/kvm/sigp.c | 8 |
3 files changed, 21 insertions, 1 deletions
diff --git a/arch/s390/include/asm/kvm_host.h b/arch/s390/include/asm/kvm_host.h index 584b820eeaf8..7e02d77f8ecc 100644 --- a/arch/s390/include/asm/kvm_host.h +++ b/arch/s390/include/asm/kvm_host.h | |||
@@ -226,10 +226,17 @@ struct kvm_vcpu_stat { | |||
226 | u32 instruction_sigp_sense_running; | 226 | u32 instruction_sigp_sense_running; |
227 | u32 instruction_sigp_external_call; | 227 | u32 instruction_sigp_external_call; |
228 | u32 instruction_sigp_emergency; | 228 | u32 instruction_sigp_emergency; |
229 | u32 instruction_sigp_cond_emergency; | ||
230 | u32 instruction_sigp_start; | ||
229 | u32 instruction_sigp_stop; | 231 | u32 instruction_sigp_stop; |
232 | u32 instruction_sigp_stop_store_status; | ||
233 | u32 instruction_sigp_store_status; | ||
230 | u32 instruction_sigp_arch; | 234 | u32 instruction_sigp_arch; |
231 | u32 instruction_sigp_prefix; | 235 | u32 instruction_sigp_prefix; |
232 | u32 instruction_sigp_restart; | 236 | u32 instruction_sigp_restart; |
237 | u32 instruction_sigp_init_cpu_reset; | ||
238 | u32 instruction_sigp_cpu_reset; | ||
239 | u32 instruction_sigp_unknown; | ||
233 | u32 diagnose_10; | 240 | u32 diagnose_10; |
234 | u32 diagnose_44; | 241 | u32 diagnose_44; |
235 | u32 diagnose_9c; | 242 | u32 diagnose_9c; |
diff --git a/arch/s390/kvm/kvm-s390.c b/arch/s390/kvm/kvm-s390.c index 3e83d4b357b9..06878bdf0c6b 100644 --- a/arch/s390/kvm/kvm-s390.c +++ b/arch/s390/kvm/kvm-s390.c | |||
@@ -81,10 +81,17 @@ struct kvm_stats_debugfs_item debugfs_entries[] = { | |||
81 | { "instruction_sigp_sense_running", VCPU_STAT(instruction_sigp_sense_running) }, | 81 | { "instruction_sigp_sense_running", VCPU_STAT(instruction_sigp_sense_running) }, |
82 | { "instruction_sigp_external_call", VCPU_STAT(instruction_sigp_external_call) }, | 82 | { "instruction_sigp_external_call", VCPU_STAT(instruction_sigp_external_call) }, |
83 | { "instruction_sigp_emergency", VCPU_STAT(instruction_sigp_emergency) }, | 83 | { "instruction_sigp_emergency", VCPU_STAT(instruction_sigp_emergency) }, |
84 | { "instruction_sigp_cond_emergency", VCPU_STAT(instruction_sigp_cond_emergency) }, | ||
85 | { "instruction_sigp_start", VCPU_STAT(instruction_sigp_start) }, | ||
84 | { "instruction_sigp_stop", VCPU_STAT(instruction_sigp_stop) }, | 86 | { "instruction_sigp_stop", VCPU_STAT(instruction_sigp_stop) }, |
87 | { "instruction_sigp_stop_store_status", VCPU_STAT(instruction_sigp_stop_store_status) }, | ||
88 | { "instruction_sigp_store_status", VCPU_STAT(instruction_sigp_store_status) }, | ||
85 | { "instruction_sigp_set_arch", VCPU_STAT(instruction_sigp_arch) }, | 89 | { "instruction_sigp_set_arch", VCPU_STAT(instruction_sigp_arch) }, |
86 | { "instruction_sigp_set_prefix", VCPU_STAT(instruction_sigp_prefix) }, | 90 | { "instruction_sigp_set_prefix", VCPU_STAT(instruction_sigp_prefix) }, |
87 | { "instruction_sigp_restart", VCPU_STAT(instruction_sigp_restart) }, | 91 | { "instruction_sigp_restart", VCPU_STAT(instruction_sigp_restart) }, |
92 | { "instruction_sigp_cpu_reset", VCPU_STAT(instruction_sigp_cpu_reset) }, | ||
93 | { "instruction_sigp_init_cpu_reset", VCPU_STAT(instruction_sigp_init_cpu_reset) }, | ||
94 | { "instruction_sigp_unknown", VCPU_STAT(instruction_sigp_unknown) }, | ||
88 | { "diagnose_10", VCPU_STAT(diagnose_10) }, | 95 | { "diagnose_10", VCPU_STAT(diagnose_10) }, |
89 | { "diagnose_44", VCPU_STAT(diagnose_44) }, | 96 | { "diagnose_44", VCPU_STAT(diagnose_44) }, |
90 | { "diagnose_9c", VCPU_STAT(diagnose_9c) }, | 97 | { "diagnose_9c", VCPU_STAT(diagnose_9c) }, |
diff --git a/arch/s390/kvm/sigp.c b/arch/s390/kvm/sigp.c index a9e17397305e..9ee63e4d8a24 100644 --- a/arch/s390/kvm/sigp.c +++ b/arch/s390/kvm/sigp.c | |||
@@ -344,11 +344,12 @@ static int handle_sigp_dst(struct kvm_vcpu *vcpu, u8 order_code, | |||
344 | rc = __sigp_stop(vcpu, dst_vcpu, ACTION_STOP_ON_STOP); | 344 | rc = __sigp_stop(vcpu, dst_vcpu, ACTION_STOP_ON_STOP); |
345 | break; | 345 | break; |
346 | case SIGP_STOP_AND_STORE_STATUS: | 346 | case SIGP_STOP_AND_STORE_STATUS: |
347 | vcpu->stat.instruction_sigp_stop++; | 347 | vcpu->stat.instruction_sigp_stop_store_status++; |
348 | rc = __sigp_stop(vcpu, dst_vcpu, ACTION_STORE_ON_STOP | | 348 | rc = __sigp_stop(vcpu, dst_vcpu, ACTION_STORE_ON_STOP | |
349 | ACTION_STOP_ON_STOP); | 349 | ACTION_STOP_ON_STOP); |
350 | break; | 350 | break; |
351 | case SIGP_STORE_STATUS_AT_ADDRESS: | 351 | case SIGP_STORE_STATUS_AT_ADDRESS: |
352 | vcpu->stat.instruction_sigp_store_status++; | ||
352 | rc = __sigp_store_status_at_addr(vcpu, dst_vcpu, parameter, | 353 | rc = __sigp_store_status_at_addr(vcpu, dst_vcpu, parameter, |
353 | status_reg); | 354 | status_reg); |
354 | break; | 355 | break; |
@@ -357,6 +358,7 @@ static int handle_sigp_dst(struct kvm_vcpu *vcpu, u8 order_code, | |||
357 | rc = __sigp_set_prefix(vcpu, dst_vcpu, parameter, status_reg); | 358 | rc = __sigp_set_prefix(vcpu, dst_vcpu, parameter, status_reg); |
358 | break; | 359 | break; |
359 | case SIGP_COND_EMERGENCY_SIGNAL: | 360 | case SIGP_COND_EMERGENCY_SIGNAL: |
361 | vcpu->stat.instruction_sigp_cond_emergency++; | ||
360 | rc = __sigp_conditional_emergency(vcpu, dst_vcpu, parameter, | 362 | rc = __sigp_conditional_emergency(vcpu, dst_vcpu, parameter, |
361 | status_reg); | 363 | status_reg); |
362 | break; | 364 | break; |
@@ -365,6 +367,7 @@ static int handle_sigp_dst(struct kvm_vcpu *vcpu, u8 order_code, | |||
365 | rc = __sigp_sense_running(vcpu, dst_vcpu, status_reg); | 367 | rc = __sigp_sense_running(vcpu, dst_vcpu, status_reg); |
366 | break; | 368 | break; |
367 | case SIGP_START: | 369 | case SIGP_START: |
370 | vcpu->stat.instruction_sigp_start++; | ||
368 | rc = __prepare_sigp_re_start(vcpu, dst_vcpu, order_code); | 371 | rc = __prepare_sigp_re_start(vcpu, dst_vcpu, order_code); |
369 | break; | 372 | break; |
370 | case SIGP_RESTART: | 373 | case SIGP_RESTART: |
@@ -372,12 +375,15 @@ static int handle_sigp_dst(struct kvm_vcpu *vcpu, u8 order_code, | |||
372 | rc = __prepare_sigp_re_start(vcpu, dst_vcpu, order_code); | 375 | rc = __prepare_sigp_re_start(vcpu, dst_vcpu, order_code); |
373 | break; | 376 | break; |
374 | case SIGP_INITIAL_CPU_RESET: | 377 | case SIGP_INITIAL_CPU_RESET: |
378 | vcpu->stat.instruction_sigp_init_cpu_reset++; | ||
375 | rc = __prepare_sigp_cpu_reset(vcpu, dst_vcpu, order_code); | 379 | rc = __prepare_sigp_cpu_reset(vcpu, dst_vcpu, order_code); |
376 | break; | 380 | break; |
377 | case SIGP_CPU_RESET: | 381 | case SIGP_CPU_RESET: |
382 | vcpu->stat.instruction_sigp_cpu_reset++; | ||
378 | rc = __prepare_sigp_cpu_reset(vcpu, dst_vcpu, order_code); | 383 | rc = __prepare_sigp_cpu_reset(vcpu, dst_vcpu, order_code); |
379 | break; | 384 | break; |
380 | default: | 385 | default: |
386 | vcpu->stat.instruction_sigp_unknown++; | ||
381 | rc = __prepare_sigp_unknown(vcpu, dst_vcpu); | 387 | rc = __prepare_sigp_unknown(vcpu, dst_vcpu); |
382 | } | 388 | } |
383 | 389 | ||