diff options
author | Alexander Graf <agraf@suse.de> | 2010-03-24 16:48:23 -0400 |
---|---|---|
committer | Avi Kivity <avi@redhat.com> | 2010-05-17 05:16:59 -0400 |
commit | a56cf347c21b21d52db127672cf1edf5dd724a4b (patch) | |
tree | 33a92288ca0325d821289d49c38e95ff2bc664ca | |
parent | c2453693d41f31dae1b4d39b2d59d9a9c6dcb837 (diff) |
KVM: PPC: Load VCPU for register fetching
When trying to read or store vcpu register data, we should also make
sure the vcpu is actually loaded, so we're 100% sure we get the correct
values.
Signed-off-by: Alexander Graf <agraf@suse.de>
Signed-off-by: Avi Kivity <avi@redhat.com>
-rw-r--r-- | arch/powerpc/kvm/book3s.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/arch/powerpc/kvm/book3s.c b/arch/powerpc/kvm/book3s.c index 6f409c98205c..c058f1a5c095 100644 --- a/arch/powerpc/kvm/book3s.c +++ b/arch/powerpc/kvm/book3s.c | |||
@@ -956,6 +956,8 @@ int kvm_arch_vcpu_ioctl_get_regs(struct kvm_vcpu *vcpu, struct kvm_regs *regs) | |||
956 | { | 956 | { |
957 | int i; | 957 | int i; |
958 | 958 | ||
959 | vcpu_load(vcpu); | ||
960 | |||
959 | regs->pc = vcpu->arch.pc; | 961 | regs->pc = vcpu->arch.pc; |
960 | regs->cr = kvmppc_get_cr(vcpu); | 962 | regs->cr = kvmppc_get_cr(vcpu); |
961 | regs->ctr = vcpu->arch.ctr; | 963 | regs->ctr = vcpu->arch.ctr; |
@@ -976,6 +978,8 @@ int kvm_arch_vcpu_ioctl_get_regs(struct kvm_vcpu *vcpu, struct kvm_regs *regs) | |||
976 | for (i = 0; i < ARRAY_SIZE(regs->gpr); i++) | 978 | for (i = 0; i < ARRAY_SIZE(regs->gpr); i++) |
977 | regs->gpr[i] = kvmppc_get_gpr(vcpu, i); | 979 | regs->gpr[i] = kvmppc_get_gpr(vcpu, i); |
978 | 980 | ||
981 | vcpu_put(vcpu); | ||
982 | |||
979 | return 0; | 983 | return 0; |
980 | } | 984 | } |
981 | 985 | ||
@@ -983,6 +987,8 @@ int kvm_arch_vcpu_ioctl_set_regs(struct kvm_vcpu *vcpu, struct kvm_regs *regs) | |||
983 | { | 987 | { |
984 | int i; | 988 | int i; |
985 | 989 | ||
990 | vcpu_load(vcpu); | ||
991 | |||
986 | vcpu->arch.pc = regs->pc; | 992 | vcpu->arch.pc = regs->pc; |
987 | kvmppc_set_cr(vcpu, regs->cr); | 993 | kvmppc_set_cr(vcpu, regs->cr); |
988 | vcpu->arch.ctr = regs->ctr; | 994 | vcpu->arch.ctr = regs->ctr; |
@@ -1002,6 +1008,8 @@ int kvm_arch_vcpu_ioctl_set_regs(struct kvm_vcpu *vcpu, struct kvm_regs *regs) | |||
1002 | for (i = 0; i < ARRAY_SIZE(regs->gpr); i++) | 1008 | for (i = 0; i < ARRAY_SIZE(regs->gpr); i++) |
1003 | kvmppc_set_gpr(vcpu, i, regs->gpr[i]); | 1009 | kvmppc_set_gpr(vcpu, i, regs->gpr[i]); |
1004 | 1010 | ||
1011 | vcpu_put(vcpu); | ||
1012 | |||
1005 | return 0; | 1013 | return 0; |
1006 | } | 1014 | } |
1007 | 1015 | ||