aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Hildenbrand <dahi@linux.vnet.ibm.com>2014-05-23 06:25:11 -0400
committerChristian Borntraeger <borntraeger@de.ibm.com>2014-10-28 08:09:13 -0400
commit42cb0c9ff92eba2168d1b8f69d6e62d2af608a13 (patch)
tree79e4bec9925d4c80eea5b1a56fe379edc06d2526
parentb8983830826f3b0747a6d1c1f351121b9cc93276 (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.h7
-rw-r--r--arch/s390/kvm/kvm-s390.c7
-rw-r--r--arch/s390/kvm/sigp.c8
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