diff options
author | Dominik Dingel <dingel@linux.vnet.ibm.com> | 2013-09-30 04:55:33 -0400 |
---|---|---|
committer | Christian Borntraeger <borntraeger@de.ibm.com> | 2014-01-30 07:11:05 -0500 |
commit | 536336c21697551ceca44bdffb9f53e6cc5f2f20 (patch) | |
tree | fd90db38f0b457deabad296b6999cc9b27d61634 | |
parent | 3c038e6be0e299d4d3762d0a9a29f02de6e04991 (diff) |
KVM: async_pf: Exploit one reg interface for pfault
To enable pfault after live migration we need to expose pfault_token,
pfault_select and pfault_compare, as one reg registers to userspace.
So that qemu is able to transfer this between the source and the target.
Signed-off-by: Dominik Dingel <dingel@linux.vnet.ibm.com>
Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com>
-rw-r--r-- | arch/s390/include/uapi/asm/kvm.h | 3 | ||||
-rw-r--r-- | arch/s390/kvm/kvm-s390.c | 24 |
2 files changed, 27 insertions, 0 deletions
diff --git a/arch/s390/include/uapi/asm/kvm.h b/arch/s390/include/uapi/asm/kvm.h index ccfd0b1d056d..cb4c1eb8a0a5 100644 --- a/arch/s390/include/uapi/asm/kvm.h +++ b/arch/s390/include/uapi/asm/kvm.h | |||
@@ -73,4 +73,7 @@ struct kvm_sync_regs { | |||
73 | #define KVM_REG_S390_EPOCHDIFF (KVM_REG_S390 | KVM_REG_SIZE_U64 | 0x2) | 73 | #define KVM_REG_S390_EPOCHDIFF (KVM_REG_S390 | KVM_REG_SIZE_U64 | 0x2) |
74 | #define KVM_REG_S390_CPU_TIMER (KVM_REG_S390 | KVM_REG_SIZE_U64 | 0x3) | 74 | #define KVM_REG_S390_CPU_TIMER (KVM_REG_S390 | KVM_REG_SIZE_U64 | 0x3) |
75 | #define KVM_REG_S390_CLOCK_COMP (KVM_REG_S390 | KVM_REG_SIZE_U64 | 0x4) | 75 | #define KVM_REG_S390_CLOCK_COMP (KVM_REG_S390 | KVM_REG_SIZE_U64 | 0x4) |
76 | #define KVM_REG_S390_PFTOKEN (KVM_REG_S390 | KVM_REG_SIZE_U64 | 0x5) | ||
77 | #define KVM_REG_S390_PFCOMPARE (KVM_REG_S390 | KVM_REG_SIZE_U64 | 0x6) | ||
78 | #define KVM_REG_S390_PFSELECT (KVM_REG_S390 | KVM_REG_SIZE_U64 | 0x7) | ||
76 | #endif | 79 | #endif |
diff --git a/arch/s390/kvm/kvm-s390.c b/arch/s390/kvm/kvm-s390.c index d8e9f04977db..a5da2cc798c8 100644 --- a/arch/s390/kvm/kvm-s390.c +++ b/arch/s390/kvm/kvm-s390.c | |||
@@ -561,6 +561,18 @@ static int kvm_arch_vcpu_ioctl_get_one_reg(struct kvm_vcpu *vcpu, | |||
561 | r = put_user(vcpu->arch.sie_block->ckc, | 561 | r = put_user(vcpu->arch.sie_block->ckc, |
562 | (u64 __user *)reg->addr); | 562 | (u64 __user *)reg->addr); |
563 | break; | 563 | break; |
564 | case KVM_REG_S390_PFTOKEN: | ||
565 | r = put_user(vcpu->arch.pfault_token, | ||
566 | (u64 __user *)reg->addr); | ||
567 | break; | ||
568 | case KVM_REG_S390_PFCOMPARE: | ||
569 | r = put_user(vcpu->arch.pfault_compare, | ||
570 | (u64 __user *)reg->addr); | ||
571 | break; | ||
572 | case KVM_REG_S390_PFSELECT: | ||
573 | r = put_user(vcpu->arch.pfault_select, | ||
574 | (u64 __user *)reg->addr); | ||
575 | break; | ||
564 | default: | 576 | default: |
565 | break; | 577 | break; |
566 | } | 578 | } |
@@ -590,6 +602,18 @@ static int kvm_arch_vcpu_ioctl_set_one_reg(struct kvm_vcpu *vcpu, | |||
590 | r = get_user(vcpu->arch.sie_block->ckc, | 602 | r = get_user(vcpu->arch.sie_block->ckc, |
591 | (u64 __user *)reg->addr); | 603 | (u64 __user *)reg->addr); |
592 | break; | 604 | break; |
605 | case KVM_REG_S390_PFTOKEN: | ||
606 | r = get_user(vcpu->arch.pfault_token, | ||
607 | (u64 __user *)reg->addr); | ||
608 | break; | ||
609 | case KVM_REG_S390_PFCOMPARE: | ||
610 | r = get_user(vcpu->arch.pfault_compare, | ||
611 | (u64 __user *)reg->addr); | ||
612 | break; | ||
613 | case KVM_REG_S390_PFSELECT: | ||
614 | r = get_user(vcpu->arch.pfault_select, | ||
615 | (u64 __user *)reg->addr); | ||
616 | break; | ||
593 | default: | 617 | default: |
594 | break; | 618 | break; |
595 | } | 619 | } |