aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlexander Graf <agraf@suse.de>2010-03-24 16:48:23 -0400
committerAvi Kivity <avi@redhat.com>2010-05-17 05:16:59 -0400
commita56cf347c21b21d52db127672cf1edf5dd724a4b (patch)
tree33a92288ca0325d821289d49c38e95ff2bc664ca
parentc2453693d41f31dae1b4d39b2d59d9a9c6dcb837 (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.c8
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