]> err.no Git - linux-2.6/blobdiff - arch/s390/kvm/kvm-s390.c
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/sparc-2.6
[linux-2.6] / arch / s390 / kvm / kvm-s390.c
index 5e3473c9a6390b508460482154d5fe437d961c5f..0ac36a649eba9a2823189d3bb31dcb68b0ec6055 100644 (file)
@@ -31,6 +31,7 @@
 
 struct kvm_stats_debugfs_item debugfs_entries[] = {
        { "userspace_handled", VCPU_STAT(exit_userspace) },
+       { "exit_null", VCPU_STAT(exit_null) },
        { "exit_validity", VCPU_STAT(exit_validity) },
        { "exit_stop_request", VCPU_STAT(exit_stop_request) },
        { "exit_external_request", VCPU_STAT(exit_external_request) },
@@ -48,6 +49,22 @@ struct kvm_stats_debugfs_item debugfs_entries[] = {
        { "deliver_restart_signal", VCPU_STAT(deliver_restart_signal) },
        { "deliver_program_interruption", VCPU_STAT(deliver_program_int) },
        { "exit_wait_state", VCPU_STAT(exit_wait_state) },
+       { "instruction_stidp", VCPU_STAT(instruction_stidp) },
+       { "instruction_spx", VCPU_STAT(instruction_spx) },
+       { "instruction_stpx", VCPU_STAT(instruction_stpx) },
+       { "instruction_stap", VCPU_STAT(instruction_stap) },
+       { "instruction_storage_key", VCPU_STAT(instruction_storage_key) },
+       { "instruction_stsch", VCPU_STAT(instruction_stsch) },
+       { "instruction_chsc", VCPU_STAT(instruction_chsc) },
+       { "instruction_stsi", VCPU_STAT(instruction_stsi) },
+       { "instruction_stfl", VCPU_STAT(instruction_stfl) },
+       { "instruction_sigp_sense", VCPU_STAT(instruction_sigp_sense) },
+       { "instruction_sigp_emergency", VCPU_STAT(instruction_sigp_emergency) },
+       { "instruction_sigp_stop", VCPU_STAT(instruction_sigp_stop) },
+       { "instruction_sigp_set_arch", VCPU_STAT(instruction_sigp_arch) },
+       { "instruction_sigp_set_prefix", VCPU_STAT(instruction_sigp_prefix) },
+       { "instruction_sigp_restart", VCPU_STAT(instruction_sigp_restart) },
+       { "diagnose_44", VCPU_STAT(diagnose_44) },
        { NULL }
 };
 
@@ -205,10 +222,6 @@ void kvm_arch_vcpu_load(struct kvm_vcpu *vcpu, int cpu)
        vcpu->arch.guest_fpregs.fpc &= FPC_VALID_MASK;
        restore_fp_regs(&vcpu->arch.guest_fpregs);
        restore_access_regs(vcpu->arch.guest_acrs);
-
-       if (signal_pending(current))
-               atomic_set_mask(CPUSTAT_STOP_INT,
-                       &vcpu->arch.sie_block->cpuflags);
 }
 
 void kvm_arch_vcpu_put(struct kvm_vcpu *vcpu)
@@ -246,6 +259,8 @@ int kvm_arch_vcpu_setup(struct kvm_vcpu *vcpu)
        vcpu->arch.sie_block->eca   = 0xC1002001U;
        setup_timer(&vcpu->arch.ckc_timer, kvm_s390_idle_wakeup,
                 (unsigned long) vcpu);
+       get_cpu_id(&vcpu->arch.cpu_id);
+       vcpu->arch.cpu_id.version = 0xfe;
        return 0;
 }
 
@@ -276,6 +291,7 @@ struct kvm_vcpu *kvm_arch_vcpu_create(struct kvm *kvm,
        spin_lock_bh(&kvm->arch.float_int.lock);
        kvm->arch.float_int.local_int[id] = &vcpu->arch.local_int;
        init_waitqueue_head(&vcpu->arch.local_int.wq);
+       vcpu->arch.local_int.cpuflags = &vcpu->arch.sie_block->cpuflags;
        spin_unlock_bh(&kvm->arch.float_int.lock);
 
        rc = kvm_vcpu_init(vcpu, kvm, id);
@@ -395,6 +411,18 @@ int kvm_arch_vcpu_ioctl_debug_guest(struct kvm_vcpu *vcpu,
        return -EINVAL; /* not implemented yet */
 }
 
+int kvm_arch_vcpu_ioctl_get_mpstate(struct kvm_vcpu *vcpu,
+                                   struct kvm_mp_state *mp_state)
+{
+       return -EINVAL; /* not implemented yet */
+}
+
+int kvm_arch_vcpu_ioctl_set_mpstate(struct kvm_vcpu *vcpu,
+                                   struct kvm_mp_state *mp_state)
+{
+       return -EINVAL; /* not implemented yet */
+}
+
 static void __vcpu_run(struct kvm_vcpu *vcpu)
 {
        memcpy(&vcpu->arch.sie_block->gg14, &vcpu->arch.guest_gprs[14], 16);
@@ -478,7 +506,7 @@ int kvm_arch_vcpu_ioctl_run(struct kvm_vcpu *vcpu, struct kvm_run *kvm_run)
        vcpu_put(vcpu);
 
        vcpu->stat.exit_userspace++;
-       return 0;
+       return rc;
 }
 
 static int __guestcopy(struct kvm_vcpu *vcpu, u64 guestdest, const void *from,