KVM: s390: KVM_GET/SET_ONEREG for s390
authorCarsten Otte <cotte@de.ibm.com>
Tue, 15 May 2012 12:15:26 +0000 (14:15 +0200)
committerMarcelo Tosatti <mtosatti@redhat.com>
Fri, 18 May 2012 00:06:02 +0000 (21:06 -0300)
This patch enables KVM_CAP_ONE_REG for s390 and implements stubs
for KVM_GET/SET_ONE_REG. This is based on the ppc implementation.

Signed-off-by: Carsten Otte <cotte@de.ibm.com>
Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com>
Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
arch/s390/kvm/kvm-s390.c

index 5c761bf..894b3e4 100644 (file)
@@ -135,6 +135,7 @@ int kvm_dev_ioctl_check_extension(long ext)
        case KVM_CAP_S390_UCONTROL:
 #endif
        case KVM_CAP_SYNC_REGS:
+       case KVM_CAP_ONE_REG:
                r = 1;
                break;
        case KVM_CAP_NR_VCPUS:
@@ -439,6 +440,31 @@ int kvm_arch_vcpu_should_kick(struct kvm_vcpu *vcpu)
        return 0;
 }
 
+static int kvm_arch_vcpu_ioctl_get_one_reg(struct kvm_vcpu *vcpu,
+                                          struct kvm_one_reg *reg)
+{
+       int r = -EINVAL;
+
+       switch (reg->id) {
+       default:
+               break;
+       }
+
+       return r;
+}
+
+static int kvm_arch_vcpu_ioctl_set_one_reg(struct kvm_vcpu *vcpu,
+                                          struct kvm_one_reg *reg)
+{
+       int r = -EINVAL;
+
+       switch (reg->id) {
+       default:
+               break;
+       }
+
+       return r;
+}
 
 static int kvm_arch_vcpu_ioctl_initial_reset(struct kvm_vcpu *vcpu)
 {
@@ -770,6 +796,18 @@ long kvm_arch_vcpu_ioctl(struct file *filp,
        case KVM_S390_INITIAL_RESET:
                r = kvm_arch_vcpu_ioctl_initial_reset(vcpu);
                break;
+       case KVM_SET_ONE_REG:
+       case KVM_GET_ONE_REG: {
+               struct kvm_one_reg reg;
+               r = -EFAULT;
+               if (copy_from_user(&reg, argp, sizeof(reg)))
+                       break;
+               if (ioctl == KVM_SET_ONE_REG)
+                       r = kvm_arch_vcpu_ioctl_set_one_reg(vcpu, &reg);
+               else
+                       r = kvm_arch_vcpu_ioctl_get_one_reg(vcpu, &reg);
+               break;
+       }
 #ifdef CONFIG_KVM_S390_UCONTROL
        case KVM_S390_UCAS_MAP: {
                struct kvm_s390_ucas_mapping ucasmap;