KVM: s390: restore old debugfs names
[linux-2.6-microblaze.git] / arch / s390 / kvm / kvm-s390.c
index 582e947..4527ac7 100644 (file)
 #define VCPU_IRQS_MAX_BUF (sizeof(struct kvm_s390_irq) * \
                           (KVM_MAX_VCPUS + LOCAL_IRQS))
 
-struct kvm_stats_debugfs_item debugfs_entries[] = {
-       VCPU_STAT("userspace_handled", exit_userspace),
-       VCPU_STAT("exit_null", exit_null),
-       VCPU_STAT("pfault_sync", pfault_sync),
-       VCPU_STAT("exit_validity", exit_validity),
-       VCPU_STAT("exit_stop_request", exit_stop_request),
-       VCPU_STAT("exit_external_request", exit_external_request),
-       VCPU_STAT("exit_io_request", exit_io_request),
-       VCPU_STAT("exit_external_interrupt", exit_external_interrupt),
-       VCPU_STAT("exit_instruction", exit_instruction),
-       VCPU_STAT("exit_pei", exit_pei),
-       VCPU_STAT("exit_program_interruption", exit_program_interruption),
-       VCPU_STAT("exit_instr_and_program_int", exit_instr_and_program),
-       VCPU_STAT("exit_operation_exception", exit_operation_exception),
-       VCPU_STAT("halt_successful_poll", halt_successful_poll),
-       VCPU_STAT("halt_attempted_poll", halt_attempted_poll),
-       VCPU_STAT("halt_poll_invalid", halt_poll_invalid),
-       VCPU_STAT("halt_no_poll_steal", halt_no_poll_steal),
-       VCPU_STAT("halt_wakeup", halt_wakeup),
-       VCPU_STAT("halt_poll_success_ns", halt_poll_success_ns),
-       VCPU_STAT("halt_poll_fail_ns", halt_poll_fail_ns),
-       VCPU_STAT("instruction_lctlg", instruction_lctlg),
-       VCPU_STAT("instruction_lctl", instruction_lctl),
-       VCPU_STAT("instruction_stctl", instruction_stctl),
-       VCPU_STAT("instruction_stctg", instruction_stctg),
-       VCPU_STAT("deliver_ckc", deliver_ckc),
-       VCPU_STAT("deliver_cputm", deliver_cputm),
-       VCPU_STAT("deliver_emergency_signal", deliver_emergency_signal),
-       VCPU_STAT("deliver_external_call", deliver_external_call),
-       VCPU_STAT("deliver_service_signal", deliver_service_signal),
-       VCPU_STAT("deliver_virtio", deliver_virtio),
-       VCPU_STAT("deliver_stop_signal", deliver_stop_signal),
-       VCPU_STAT("deliver_prefix_signal", deliver_prefix_signal),
-       VCPU_STAT("deliver_restart_signal", deliver_restart_signal),
-       VCPU_STAT("deliver_program", deliver_program),
-       VCPU_STAT("deliver_io", deliver_io),
-       VCPU_STAT("deliver_machine_check", deliver_machine_check),
-       VCPU_STAT("exit_wait_state", exit_wait_state),
-       VCPU_STAT("inject_ckc", inject_ckc),
-       VCPU_STAT("inject_cputm", inject_cputm),
-       VCPU_STAT("inject_external_call", inject_external_call),
-       VM_STAT("inject_float_mchk", inject_float_mchk),
-       VCPU_STAT("inject_emergency_signal", inject_emergency_signal),
-       VM_STAT("inject_io", inject_io),
-       VCPU_STAT("inject_mchk", inject_mchk),
-       VM_STAT("inject_pfault_done", inject_pfault_done),
-       VCPU_STAT("inject_program", inject_program),
-       VCPU_STAT("inject_restart", inject_restart),
-       VM_STAT("inject_service_signal", inject_service_signal),
-       VCPU_STAT("inject_set_prefix", inject_set_prefix),
-       VCPU_STAT("inject_stop_signal", inject_stop_signal),
-       VCPU_STAT("inject_pfault_init", inject_pfault_init),
-       VM_STAT("inject_virtio", inject_virtio),
-       VCPU_STAT("instruction_epsw", instruction_epsw),
-       VCPU_STAT("instruction_gs", instruction_gs),
-       VCPU_STAT("instruction_io_other", instruction_io_other),
-       VCPU_STAT("instruction_lpsw", instruction_lpsw),
-       VCPU_STAT("instruction_lpswe", instruction_lpswe),
-       VCPU_STAT("instruction_pfmf", instruction_pfmf),
-       VCPU_STAT("instruction_ptff", instruction_ptff),
-       VCPU_STAT("instruction_stidp", instruction_stidp),
-       VCPU_STAT("instruction_sck", instruction_sck),
-       VCPU_STAT("instruction_sckpf", instruction_sckpf),
-       VCPU_STAT("instruction_spx", instruction_spx),
-       VCPU_STAT("instruction_stpx", instruction_stpx),
-       VCPU_STAT("instruction_stap", instruction_stap),
-       VCPU_STAT("instruction_iske", instruction_iske),
-       VCPU_STAT("instruction_ri", instruction_ri),
-       VCPU_STAT("instruction_rrbe", instruction_rrbe),
-       VCPU_STAT("instruction_sske", instruction_sske),
-       VCPU_STAT("instruction_ipte_interlock", instruction_ipte_interlock),
-       VCPU_STAT("instruction_essa", instruction_essa),
-       VCPU_STAT("instruction_stsi", instruction_stsi),
-       VCPU_STAT("instruction_stfl", instruction_stfl),
-       VCPU_STAT("instruction_tb", instruction_tb),
-       VCPU_STAT("instruction_tpi", instruction_tpi),
-       VCPU_STAT("instruction_tprot", instruction_tprot),
-       VCPU_STAT("instruction_tsch", instruction_tsch),
-       VCPU_STAT("instruction_sthyi", instruction_sthyi),
-       VCPU_STAT("instruction_sie", instruction_sie),
-       VCPU_STAT("instruction_sigp_sense", instruction_sigp_sense),
-       VCPU_STAT("instruction_sigp_sense_running", instruction_sigp_sense_running),
-       VCPU_STAT("instruction_sigp_external_call", instruction_sigp_external_call),
-       VCPU_STAT("instruction_sigp_emergency", instruction_sigp_emergency),
-       VCPU_STAT("instruction_sigp_cond_emergency", instruction_sigp_cond_emergency),
-       VCPU_STAT("instruction_sigp_start", instruction_sigp_start),
-       VCPU_STAT("instruction_sigp_stop", instruction_sigp_stop),
-       VCPU_STAT("instruction_sigp_stop_store_status", instruction_sigp_stop_store_status),
-       VCPU_STAT("instruction_sigp_store_status", instruction_sigp_store_status),
-       VCPU_STAT("instruction_sigp_store_adtl_status", instruction_sigp_store_adtl_status),
-       VCPU_STAT("instruction_sigp_set_arch", instruction_sigp_arch),
-       VCPU_STAT("instruction_sigp_set_prefix", instruction_sigp_prefix),
-       VCPU_STAT("instruction_sigp_restart", instruction_sigp_restart),
-       VCPU_STAT("instruction_sigp_cpu_reset", instruction_sigp_cpu_reset),
-       VCPU_STAT("instruction_sigp_init_cpu_reset", instruction_sigp_init_cpu_reset),
-       VCPU_STAT("instruction_sigp_unknown", instruction_sigp_unknown),
-       VCPU_STAT("instruction_diag_10", diagnose_10),
-       VCPU_STAT("instruction_diag_44", diagnose_44),
-       VCPU_STAT("instruction_diag_9c", diagnose_9c),
-       VCPU_STAT("diag_9c_ignored", diagnose_9c_ignored),
-       VCPU_STAT("diag_9c_forward", diagnose_9c_forward),
-       VCPU_STAT("instruction_diag_258", diagnose_258),
-       VCPU_STAT("instruction_diag_308", diagnose_308),
-       VCPU_STAT("instruction_diag_500", diagnose_500),
-       VCPU_STAT("instruction_diag_other", diagnose_other),
-       { NULL }
+const struct _kvm_stats_desc kvm_vm_stats_desc[] = {
+       KVM_GENERIC_VM_STATS(),
+       STATS_DESC_COUNTER(VM, inject_io),
+       STATS_DESC_COUNTER(VM, inject_float_mchk),
+       STATS_DESC_COUNTER(VM, inject_pfault_done),
+       STATS_DESC_COUNTER(VM, inject_service_signal),
+       STATS_DESC_COUNTER(VM, inject_virtio)
+};
+static_assert(ARRAY_SIZE(kvm_vm_stats_desc) ==
+               sizeof(struct kvm_vm_stat) / sizeof(u64));
+
+const struct kvm_stats_header kvm_vm_stats_header = {
+       .name_size = KVM_STATS_NAME_SIZE,
+       .num_desc = ARRAY_SIZE(kvm_vm_stats_desc),
+       .id_offset = sizeof(struct kvm_stats_header),
+       .desc_offset = sizeof(struct kvm_stats_header) + KVM_STATS_NAME_SIZE,
+       .data_offset = sizeof(struct kvm_stats_header) + KVM_STATS_NAME_SIZE +
+                      sizeof(kvm_vm_stats_desc),
+};
+
+const struct _kvm_stats_desc kvm_vcpu_stats_desc[] = {
+       KVM_GENERIC_VCPU_STATS(),
+       STATS_DESC_COUNTER(VCPU, exit_userspace),
+       STATS_DESC_COUNTER(VCPU, exit_null),
+       STATS_DESC_COUNTER(VCPU, exit_external_request),
+       STATS_DESC_COUNTER(VCPU, exit_io_request),
+       STATS_DESC_COUNTER(VCPU, exit_external_interrupt),
+       STATS_DESC_COUNTER(VCPU, exit_stop_request),
+       STATS_DESC_COUNTER(VCPU, exit_validity),
+       STATS_DESC_COUNTER(VCPU, exit_instruction),
+       STATS_DESC_COUNTER(VCPU, exit_pei),
+       STATS_DESC_COUNTER(VCPU, halt_no_poll_steal),
+       STATS_DESC_COUNTER(VCPU, instruction_lctl),
+       STATS_DESC_COUNTER(VCPU, instruction_lctlg),
+       STATS_DESC_COUNTER(VCPU, instruction_stctl),
+       STATS_DESC_COUNTER(VCPU, instruction_stctg),
+       STATS_DESC_COUNTER(VCPU, exit_program_interruption),
+       STATS_DESC_COUNTER(VCPU, exit_instr_and_program),
+       STATS_DESC_COUNTER(VCPU, exit_operation_exception),
+       STATS_DESC_COUNTER(VCPU, deliver_ckc),
+       STATS_DESC_COUNTER(VCPU, deliver_cputm),
+       STATS_DESC_COUNTER(VCPU, deliver_external_call),
+       STATS_DESC_COUNTER(VCPU, deliver_emergency_signal),
+       STATS_DESC_COUNTER(VCPU, deliver_service_signal),
+       STATS_DESC_COUNTER(VCPU, deliver_virtio),
+       STATS_DESC_COUNTER(VCPU, deliver_stop_signal),
+       STATS_DESC_COUNTER(VCPU, deliver_prefix_signal),
+       STATS_DESC_COUNTER(VCPU, deliver_restart_signal),
+       STATS_DESC_COUNTER(VCPU, deliver_program),
+       STATS_DESC_COUNTER(VCPU, deliver_io),
+       STATS_DESC_COUNTER(VCPU, deliver_machine_check),
+       STATS_DESC_COUNTER(VCPU, exit_wait_state),
+       STATS_DESC_COUNTER(VCPU, inject_ckc),
+       STATS_DESC_COUNTER(VCPU, inject_cputm),
+       STATS_DESC_COUNTER(VCPU, inject_external_call),
+       STATS_DESC_COUNTER(VCPU, inject_emergency_signal),
+       STATS_DESC_COUNTER(VCPU, inject_mchk),
+       STATS_DESC_COUNTER(VCPU, inject_pfault_init),
+       STATS_DESC_COUNTER(VCPU, inject_program),
+       STATS_DESC_COUNTER(VCPU, inject_restart),
+       STATS_DESC_COUNTER(VCPU, inject_set_prefix),
+       STATS_DESC_COUNTER(VCPU, inject_stop_signal),
+       STATS_DESC_COUNTER(VCPU, instruction_epsw),
+       STATS_DESC_COUNTER(VCPU, instruction_gs),
+       STATS_DESC_COUNTER(VCPU, instruction_io_other),
+       STATS_DESC_COUNTER(VCPU, instruction_lpsw),
+       STATS_DESC_COUNTER(VCPU, instruction_lpswe),
+       STATS_DESC_COUNTER(VCPU, instruction_pfmf),
+       STATS_DESC_COUNTER(VCPU, instruction_ptff),
+       STATS_DESC_COUNTER(VCPU, instruction_sck),
+       STATS_DESC_COUNTER(VCPU, instruction_sckpf),
+       STATS_DESC_COUNTER(VCPU, instruction_stidp),
+       STATS_DESC_COUNTER(VCPU, instruction_spx),
+       STATS_DESC_COUNTER(VCPU, instruction_stpx),
+       STATS_DESC_COUNTER(VCPU, instruction_stap),
+       STATS_DESC_COUNTER(VCPU, instruction_iske),
+       STATS_DESC_COUNTER(VCPU, instruction_ri),
+       STATS_DESC_COUNTER(VCPU, instruction_rrbe),
+       STATS_DESC_COUNTER(VCPU, instruction_sske),
+       STATS_DESC_COUNTER(VCPU, instruction_ipte_interlock),
+       STATS_DESC_COUNTER(VCPU, instruction_stsi),
+       STATS_DESC_COUNTER(VCPU, instruction_stfl),
+       STATS_DESC_COUNTER(VCPU, instruction_tb),
+       STATS_DESC_COUNTER(VCPU, instruction_tpi),
+       STATS_DESC_COUNTER(VCPU, instruction_tprot),
+       STATS_DESC_COUNTER(VCPU, instruction_tsch),
+       STATS_DESC_COUNTER(VCPU, instruction_sie),
+       STATS_DESC_COUNTER(VCPU, instruction_essa),
+       STATS_DESC_COUNTER(VCPU, instruction_sthyi),
+       STATS_DESC_COUNTER(VCPU, instruction_sigp_sense),
+       STATS_DESC_COUNTER(VCPU, instruction_sigp_sense_running),
+       STATS_DESC_COUNTER(VCPU, instruction_sigp_external_call),
+       STATS_DESC_COUNTER(VCPU, instruction_sigp_emergency),
+       STATS_DESC_COUNTER(VCPU, instruction_sigp_cond_emergency),
+       STATS_DESC_COUNTER(VCPU, instruction_sigp_start),
+       STATS_DESC_COUNTER(VCPU, instruction_sigp_stop),
+       STATS_DESC_COUNTER(VCPU, instruction_sigp_stop_store_status),
+       STATS_DESC_COUNTER(VCPU, instruction_sigp_store_status),
+       STATS_DESC_COUNTER(VCPU, instruction_sigp_store_adtl_status),
+       STATS_DESC_COUNTER(VCPU, instruction_sigp_arch),
+       STATS_DESC_COUNTER(VCPU, instruction_sigp_prefix),
+       STATS_DESC_COUNTER(VCPU, instruction_sigp_restart),
+       STATS_DESC_COUNTER(VCPU, instruction_sigp_init_cpu_reset),
+       STATS_DESC_COUNTER(VCPU, instruction_sigp_cpu_reset),
+       STATS_DESC_COUNTER(VCPU, instruction_sigp_unknown),
+       STATS_DESC_COUNTER(VCPU, instruction_diagnose_10),
+       STATS_DESC_COUNTER(VCPU, instruction_diagnose_44),
+       STATS_DESC_COUNTER(VCPU, instruction_diagnose_9c),
+       STATS_DESC_COUNTER(VCPU, diag_9c_ignored),
+       STATS_DESC_COUNTER(VCPU, diag_9c_forward),
+       STATS_DESC_COUNTER(VCPU, instruction_diagnose_258),
+       STATS_DESC_COUNTER(VCPU, instruction_diagnose_308),
+       STATS_DESC_COUNTER(VCPU, instruction_diagnose_500),
+       STATS_DESC_COUNTER(VCPU, instruction_diagnose_other),
+       STATS_DESC_COUNTER(VCPU, pfault_sync)
+};
+static_assert(ARRAY_SIZE(kvm_vcpu_stats_desc) ==
+               sizeof(struct kvm_vcpu_stat) / sizeof(u64));
+
+const struct kvm_stats_header kvm_vcpu_stats_header = {
+       .name_size = KVM_STATS_NAME_SIZE,
+       .num_desc = ARRAY_SIZE(kvm_vcpu_stats_desc),
+       .id_offset = sizeof(struct kvm_stats_header),
+       .desc_offset = sizeof(struct kvm_stats_header) + KVM_STATS_NAME_SIZE,
+       .data_offset = sizeof(struct kvm_stats_header) + KVM_STATS_NAME_SIZE +
+                      sizeof(kvm_vcpu_stats_desc),
 };
 
 /* allow nested virtualization in KVM (if enabled by user space) */
@@ -329,31 +349,31 @@ static void allow_cpu_feat(unsigned long nr)
 
 static inline int plo_test_bit(unsigned char nr)
 {
-       register unsigned long r0 asm("0") = (unsigned long) nr | 0x100;
+       unsigned long function = (unsigned long)nr | 0x100;
        int cc;
 
        asm volatile(
+               "       lgr     0,%[function]\n"
                /* Parameter registers are ignored for "test bit" */
                "       plo     0,0,0,0(0)\n"
                "       ipm     %0\n"
                "       srl     %0,28\n"
                : "=d" (cc)
-               : "d" (r0)
-               : "cc");
+               : [function] "d" (function)
+               : "cc", "0");
        return cc == 0;
 }
 
 static __always_inline void __insn32_query(unsigned int opcode, u8 *query)
 {
-       register unsigned long r0 asm("0") = 0; /* query function */
-       register unsigned long r1 asm("1") = (unsigned long) query;
-
        asm volatile(
-               /* Parameter regs are ignored */
+               "       lghi    0,0\n"
+               "       lgr     1,%[query]\n"
+               /* Parameter registers are ignored */
                "       .insn   rrf,%[opc] << 16,2,4,6,0\n"
                :
-               : "d" (r0), "a" (r1), [opc] "i" (opcode)
-               : "cc", "memory");
+               : [query] "d" ((unsigned long)query), [opc] "i" (opcode)
+               : "cc", "memory", "0", "1");
 }
 
 #define INSN_SORTL 0xb938
@@ -713,6 +733,10 @@ int kvm_vm_ioctl_enable_cap(struct kvm *kvm, struct kvm_enable_cap *cap)
                                set_kvm_facility(kvm->arch.model.fac_mask, 152);
                                set_kvm_facility(kvm->arch.model.fac_list, 152);
                        }
+                       if (test_facility(192)) {
+                               set_kvm_facility(kvm->arch.model.fac_mask, 192);
+                               set_kvm_facility(kvm->arch.model.fac_list, 192);
+                       }
                        r = 0;
                } else
                        r = -EINVAL;