aboutsummaryrefslogtreecommitdiffstats
path: root/arch/powerpc/kvm/book3s.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/powerpc/kvm/book3s.c')
-rw-r--r--arch/powerpc/kvm/book3s.c125
1 files changed, 72 insertions, 53 deletions
diff --git a/arch/powerpc/kvm/book3s.c b/arch/powerpc/kvm/book3s.c
index 41c23b636f53..7ff80f9f13a8 100644
--- a/arch/powerpc/kvm/book3s.c
+++ b/arch/powerpc/kvm/book3s.c
@@ -71,18 +71,26 @@ void kvmppc_core_load_guest_debugstate(struct kvm_vcpu *vcpu)
71 71
72void kvmppc_core_vcpu_load(struct kvm_vcpu *vcpu, int cpu) 72void kvmppc_core_vcpu_load(struct kvm_vcpu *vcpu, int cpu)
73{ 73{
74 memcpy(get_paca()->kvm_slb, to_book3s(vcpu)->slb_shadow, sizeof(get_paca()->kvm_slb)); 74#ifdef CONFIG_PPC_BOOK3S_64
75 memcpy(&get_paca()->shadow_vcpu, &to_book3s(vcpu)->shadow_vcpu, 75 memcpy(to_svcpu(vcpu)->slb, to_book3s(vcpu)->slb_shadow, sizeof(to_svcpu(vcpu)->slb));
76 memcpy(&get_paca()->shadow_vcpu, to_book3s(vcpu)->shadow_vcpu,
76 sizeof(get_paca()->shadow_vcpu)); 77 sizeof(get_paca()->shadow_vcpu));
77 get_paca()->kvm_slb_max = to_book3s(vcpu)->slb_shadow_max; 78 to_svcpu(vcpu)->slb_max = to_book3s(vcpu)->slb_shadow_max;
79#endif
80
81#ifdef CONFIG_PPC_BOOK3S_32
82 current->thread.kvm_shadow_vcpu = to_book3s(vcpu)->shadow_vcpu;
83#endif
78} 84}
79 85
80void kvmppc_core_vcpu_put(struct kvm_vcpu *vcpu) 86void kvmppc_core_vcpu_put(struct kvm_vcpu *vcpu)
81{ 87{
82 memcpy(to_book3s(vcpu)->slb_shadow, get_paca()->kvm_slb, sizeof(get_paca()->kvm_slb)); 88#ifdef CONFIG_PPC_BOOK3S_64
83 memcpy(&to_book3s(vcpu)->shadow_vcpu, &get_paca()->shadow_vcpu, 89 memcpy(to_book3s(vcpu)->slb_shadow, to_svcpu(vcpu)->slb, sizeof(to_svcpu(vcpu)->slb));
90 memcpy(to_book3s(vcpu)->shadow_vcpu, &get_paca()->shadow_vcpu,
84 sizeof(get_paca()->shadow_vcpu)); 91 sizeof(get_paca()->shadow_vcpu));
85 to_book3s(vcpu)->slb_shadow_max = get_paca()->kvm_slb_max; 92 to_book3s(vcpu)->slb_shadow_max = to_svcpu(vcpu)->slb_max;
93#endif
86 94
87 kvmppc_giveup_ext(vcpu, MSR_FP); 95 kvmppc_giveup_ext(vcpu, MSR_FP);
88 kvmppc_giveup_ext(vcpu, MSR_VEC); 96 kvmppc_giveup_ext(vcpu, MSR_VEC);
@@ -144,7 +152,7 @@ void kvmppc_set_msr(struct kvm_vcpu *vcpu, u64 msr)
144 VSID_SPLIT_MASK); 152 VSID_SPLIT_MASK);
145 153
146 kvmppc_mmu_flush_segments(vcpu); 154 kvmppc_mmu_flush_segments(vcpu);
147 kvmppc_mmu_map_segment(vcpu, vcpu->arch.pc); 155 kvmppc_mmu_map_segment(vcpu, kvmppc_get_pc(vcpu));
148 } 156 }
149 157
150 /* Preload FPU if it's enabled */ 158 /* Preload FPU if it's enabled */
@@ -154,9 +162,9 @@ void kvmppc_set_msr(struct kvm_vcpu *vcpu, u64 msr)
154 162
155void kvmppc_inject_interrupt(struct kvm_vcpu *vcpu, int vec, u64 flags) 163void kvmppc_inject_interrupt(struct kvm_vcpu *vcpu, int vec, u64 flags)
156{ 164{
157 vcpu->arch.srr0 = vcpu->arch.pc; 165 vcpu->arch.srr0 = kvmppc_get_pc(vcpu);
158 vcpu->arch.srr1 = vcpu->arch.msr | flags; 166 vcpu->arch.srr1 = vcpu->arch.msr | flags;
159 vcpu->arch.pc = to_book3s(vcpu)->hior + vec; 167 kvmppc_set_pc(vcpu, to_book3s(vcpu)->hior + vec);
160 vcpu->arch.mmu.reset_msr(vcpu); 168 vcpu->arch.mmu.reset_msr(vcpu);
161} 169}
162 170
@@ -551,20 +559,20 @@ int kvmppc_handle_pagefault(struct kvm_run *run, struct kvm_vcpu *vcpu,
551 559
552 if (page_found == -ENOENT) { 560 if (page_found == -ENOENT) {
553 /* Page not found in guest PTE entries */ 561 /* Page not found in guest PTE entries */
554 vcpu->arch.dear = vcpu->arch.fault_dear; 562 vcpu->arch.dear = kvmppc_get_fault_dar(vcpu);
555 to_book3s(vcpu)->dsisr = vcpu->arch.fault_dsisr; 563 to_book3s(vcpu)->dsisr = to_svcpu(vcpu)->fault_dsisr;
556 vcpu->arch.msr |= (vcpu->arch.shadow_srr1 & 0x00000000f8000000ULL); 564 vcpu->arch.msr |= (to_svcpu(vcpu)->shadow_srr1 & 0x00000000f8000000ULL);
557 kvmppc_book3s_queue_irqprio(vcpu, vec); 565 kvmppc_book3s_queue_irqprio(vcpu, vec);
558 } else if (page_found == -EPERM) { 566 } else if (page_found == -EPERM) {
559 /* Storage protection */ 567 /* Storage protection */
560 vcpu->arch.dear = vcpu->arch.fault_dear; 568 vcpu->arch.dear = kvmppc_get_fault_dar(vcpu);
561 to_book3s(vcpu)->dsisr = vcpu->arch.fault_dsisr & ~DSISR_NOHPTE; 569 to_book3s(vcpu)->dsisr = to_svcpu(vcpu)->fault_dsisr & ~DSISR_NOHPTE;
562 to_book3s(vcpu)->dsisr |= DSISR_PROTFAULT; 570 to_book3s(vcpu)->dsisr |= DSISR_PROTFAULT;
563 vcpu->arch.msr |= (vcpu->arch.shadow_srr1 & 0x00000000f8000000ULL); 571 vcpu->arch.msr |= (to_svcpu(vcpu)->shadow_srr1 & 0x00000000f8000000ULL);
564 kvmppc_book3s_queue_irqprio(vcpu, vec); 572 kvmppc_book3s_queue_irqprio(vcpu, vec);
565 } else if (page_found == -EINVAL) { 573 } else if (page_found == -EINVAL) {
566 /* Page not found in guest SLB */ 574 /* Page not found in guest SLB */
567 vcpu->arch.dear = vcpu->arch.fault_dear; 575 vcpu->arch.dear = kvmppc_get_fault_dar(vcpu);
568 kvmppc_book3s_queue_irqprio(vcpu, vec + 0x80); 576 kvmppc_book3s_queue_irqprio(vcpu, vec + 0x80);
569 } else if (!is_mmio && 577 } else if (!is_mmio &&
570 kvmppc_visible_gfn(vcpu, pte.raddr >> PAGE_SHIFT)) { 578 kvmppc_visible_gfn(vcpu, pte.raddr >> PAGE_SHIFT)) {
@@ -646,10 +654,11 @@ void kvmppc_giveup_ext(struct kvm_vcpu *vcpu, ulong msr)
646 654
647static int kvmppc_read_inst(struct kvm_vcpu *vcpu) 655static int kvmppc_read_inst(struct kvm_vcpu *vcpu)
648{ 656{
649 ulong srr0 = vcpu->arch.pc; 657 ulong srr0 = kvmppc_get_pc(vcpu);
658 u32 last_inst = kvmppc_get_last_inst(vcpu);
650 int ret; 659 int ret;
651 660
652 ret = kvmppc_ld(vcpu, &srr0, sizeof(u32), &vcpu->arch.last_inst, false); 661 ret = kvmppc_ld(vcpu, &srr0, sizeof(u32), &last_inst, false);
653 if (ret == -ENOENT) { 662 if (ret == -ENOENT) {
654 vcpu->arch.msr = kvmppc_set_field(vcpu->arch.msr, 33, 33, 1); 663 vcpu->arch.msr = kvmppc_set_field(vcpu->arch.msr, 33, 33, 1);
655 vcpu->arch.msr = kvmppc_set_field(vcpu->arch.msr, 34, 36, 0); 664 vcpu->arch.msr = kvmppc_set_field(vcpu->arch.msr, 34, 36, 0);
@@ -754,12 +763,12 @@ int kvmppc_handle_exit(struct kvm_run *run, struct kvm_vcpu *vcpu,
754 run->ready_for_interrupt_injection = 1; 763 run->ready_for_interrupt_injection = 1;
755#ifdef EXIT_DEBUG 764#ifdef EXIT_DEBUG
756 printk(KERN_EMERG "exit_nr=0x%x | pc=0x%lx | dar=0x%lx | dec=0x%x | msr=0x%lx\n", 765 printk(KERN_EMERG "exit_nr=0x%x | pc=0x%lx | dar=0x%lx | dec=0x%x | msr=0x%lx\n",
757 exit_nr, vcpu->arch.pc, vcpu->arch.fault_dear, 766 exit_nr, kvmppc_get_pc(vcpu), kvmppc_get_fault_dar(vcpu),
758 kvmppc_get_dec(vcpu), vcpu->arch.msr); 767 kvmppc_get_dec(vcpu), to_svcpu(vcpu)->shadow_srr1);
759#elif defined (EXIT_DEBUG_SIMPLE) 768#elif defined (EXIT_DEBUG_SIMPLE)
760 if ((exit_nr != 0x900) && (exit_nr != 0x500)) 769 if ((exit_nr != 0x900) && (exit_nr != 0x500))
761 printk(KERN_EMERG "exit_nr=0x%x | pc=0x%lx | dar=0x%lx | msr=0x%lx\n", 770 printk(KERN_EMERG "exit_nr=0x%x | pc=0x%lx | dar=0x%lx | msr=0x%lx\n",
762 exit_nr, vcpu->arch.pc, vcpu->arch.fault_dear, 771 exit_nr, kvmppc_get_pc(vcpu), kvmppc_get_fault_dar(vcpu),
763 vcpu->arch.msr); 772 vcpu->arch.msr);
764#endif 773#endif
765 kvm_resched(vcpu); 774 kvm_resched(vcpu);
@@ -767,8 +776,8 @@ int kvmppc_handle_exit(struct kvm_run *run, struct kvm_vcpu *vcpu,
767 case BOOK3S_INTERRUPT_INST_STORAGE: 776 case BOOK3S_INTERRUPT_INST_STORAGE:
768 vcpu->stat.pf_instruc++; 777 vcpu->stat.pf_instruc++;
769 /* only care about PTEG not found errors, but leave NX alone */ 778 /* only care about PTEG not found errors, but leave NX alone */
770 if (vcpu->arch.shadow_srr1 & 0x40000000) { 779 if (to_svcpu(vcpu)->shadow_srr1 & 0x40000000) {
771 r = kvmppc_handle_pagefault(run, vcpu, vcpu->arch.pc, exit_nr); 780 r = kvmppc_handle_pagefault(run, vcpu, kvmppc_get_pc(vcpu), exit_nr);
772 vcpu->stat.sp_instruc++; 781 vcpu->stat.sp_instruc++;
773 } else if (vcpu->arch.mmu.is_dcbz32(vcpu) && 782 } else if (vcpu->arch.mmu.is_dcbz32(vcpu) &&
774 (!(vcpu->arch.hflags & BOOK3S_HFLAG_DCBZ32))) { 783 (!(vcpu->arch.hflags & BOOK3S_HFLAG_DCBZ32))) {
@@ -777,38 +786,41 @@ int kvmppc_handle_exit(struct kvm_run *run, struct kvm_vcpu *vcpu,
777 * so we can't use the NX bit inside the guest. Let's cross our fingers, 786 * so we can't use the NX bit inside the guest. Let's cross our fingers,
778 * that no guest that needs the dcbz hack does NX. 787 * that no guest that needs the dcbz hack does NX.
779 */ 788 */
780 kvmppc_mmu_pte_flush(vcpu, vcpu->arch.pc, ~0xFFFULL); 789 kvmppc_mmu_pte_flush(vcpu, kvmppc_get_pc(vcpu), ~0xFFFULL);
781 r = RESUME_GUEST; 790 r = RESUME_GUEST;
782 } else { 791 } else {
783 vcpu->arch.msr |= vcpu->arch.shadow_srr1 & 0x58000000; 792 vcpu->arch.msr |= to_svcpu(vcpu)->shadow_srr1 & 0x58000000;
784 kvmppc_book3s_queue_irqprio(vcpu, exit_nr); 793 kvmppc_book3s_queue_irqprio(vcpu, exit_nr);
785 kvmppc_mmu_pte_flush(vcpu, vcpu->arch.pc, ~0xFFFULL); 794 kvmppc_mmu_pte_flush(vcpu, kvmppc_get_pc(vcpu), ~0xFFFULL);
786 r = RESUME_GUEST; 795 r = RESUME_GUEST;
787 } 796 }
788 break; 797 break;
789 case BOOK3S_INTERRUPT_DATA_STORAGE: 798 case BOOK3S_INTERRUPT_DATA_STORAGE:
799 {
800 ulong dar = kvmppc_get_fault_dar(vcpu);
790 vcpu->stat.pf_storage++; 801 vcpu->stat.pf_storage++;
791 /* The only case we need to handle is missing shadow PTEs */ 802 /* The only case we need to handle is missing shadow PTEs */
792 if (vcpu->arch.fault_dsisr & DSISR_NOHPTE) { 803 if (to_svcpu(vcpu)->fault_dsisr & DSISR_NOHPTE) {
793 r = kvmppc_handle_pagefault(run, vcpu, vcpu->arch.fault_dear, exit_nr); 804 r = kvmppc_handle_pagefault(run, vcpu, dar, exit_nr);
794 } else { 805 } else {
795 vcpu->arch.dear = vcpu->arch.fault_dear; 806 vcpu->arch.dear = dar;
796 to_book3s(vcpu)->dsisr = vcpu->arch.fault_dsisr; 807 to_book3s(vcpu)->dsisr = to_svcpu(vcpu)->fault_dsisr;
797 kvmppc_book3s_queue_irqprio(vcpu, exit_nr); 808 kvmppc_book3s_queue_irqprio(vcpu, exit_nr);
798 kvmppc_mmu_pte_flush(vcpu, vcpu->arch.dear, ~0xFFFULL); 809 kvmppc_mmu_pte_flush(vcpu, vcpu->arch.dear, ~0xFFFULL);
799 r = RESUME_GUEST; 810 r = RESUME_GUEST;
800 } 811 }
801 break; 812 break;
813 }
802 case BOOK3S_INTERRUPT_DATA_SEGMENT: 814 case BOOK3S_INTERRUPT_DATA_SEGMENT:
803 if (kvmppc_mmu_map_segment(vcpu, vcpu->arch.fault_dear) < 0) { 815 if (kvmppc_mmu_map_segment(vcpu, kvmppc_get_fault_dar(vcpu)) < 0) {
804 vcpu->arch.dear = vcpu->arch.fault_dear; 816 vcpu->arch.dear = kvmppc_get_fault_dar(vcpu);
805 kvmppc_book3s_queue_irqprio(vcpu, 817 kvmppc_book3s_queue_irqprio(vcpu,
806 BOOK3S_INTERRUPT_DATA_SEGMENT); 818 BOOK3S_INTERRUPT_DATA_SEGMENT);
807 } 819 }
808 r = RESUME_GUEST; 820 r = RESUME_GUEST;
809 break; 821 break;
810 case BOOK3S_INTERRUPT_INST_SEGMENT: 822 case BOOK3S_INTERRUPT_INST_SEGMENT:
811 if (kvmppc_mmu_map_segment(vcpu, vcpu->arch.pc) < 0) { 823 if (kvmppc_mmu_map_segment(vcpu, kvmppc_get_pc(vcpu)) < 0) {
812 kvmppc_book3s_queue_irqprio(vcpu, 824 kvmppc_book3s_queue_irqprio(vcpu,
813 BOOK3S_INTERRUPT_INST_SEGMENT); 825 BOOK3S_INTERRUPT_INST_SEGMENT);
814 } 826 }
@@ -829,13 +841,13 @@ int kvmppc_handle_exit(struct kvm_run *run, struct kvm_vcpu *vcpu,
829 ulong flags; 841 ulong flags;
830 842
831program_interrupt: 843program_interrupt:
832 flags = vcpu->arch.shadow_srr1 & 0x1f0000ull; 844 flags = to_svcpu(vcpu)->shadow_srr1 & 0x1f0000ull;
833 845
834 if (vcpu->arch.msr & MSR_PR) { 846 if (vcpu->arch.msr & MSR_PR) {
835#ifdef EXIT_DEBUG 847#ifdef EXIT_DEBUG
836 printk(KERN_INFO "Userspace triggered 0x700 exception at 0x%lx (0x%x)\n", vcpu->arch.pc, vcpu->arch.last_inst); 848 printk(KERN_INFO "Userspace triggered 0x700 exception at 0x%lx (0x%x)\n", kvmppc_get_pc(vcpu), kvmppc_get_last_inst(vcpu));
837#endif 849#endif
838 if ((vcpu->arch.last_inst & 0xff0007ff) != 850 if ((kvmppc_get_last_inst(vcpu) & 0xff0007ff) !=
839 (INS_DCBZ & 0xfffffff7)) { 851 (INS_DCBZ & 0xfffffff7)) {
840 kvmppc_core_queue_program(vcpu, flags); 852 kvmppc_core_queue_program(vcpu, flags);
841 r = RESUME_GUEST; 853 r = RESUME_GUEST;
@@ -854,7 +866,7 @@ program_interrupt:
854 break; 866 break;
855 case EMULATE_FAIL: 867 case EMULATE_FAIL:
856 printk(KERN_CRIT "%s: emulation at %lx failed (%08x)\n", 868 printk(KERN_CRIT "%s: emulation at %lx failed (%08x)\n",
857 __func__, vcpu->arch.pc, vcpu->arch.last_inst); 869 __func__, kvmppc_get_pc(vcpu), kvmppc_get_last_inst(vcpu));
858 kvmppc_core_queue_program(vcpu, flags); 870 kvmppc_core_queue_program(vcpu, flags);
859 r = RESUME_GUEST; 871 r = RESUME_GUEST;
860 break; 872 break;
@@ -917,9 +929,9 @@ program_interrupt:
917 case BOOK3S_INTERRUPT_ALIGNMENT: 929 case BOOK3S_INTERRUPT_ALIGNMENT:
918 if (kvmppc_read_inst(vcpu) == EMULATE_DONE) { 930 if (kvmppc_read_inst(vcpu) == EMULATE_DONE) {
919 to_book3s(vcpu)->dsisr = kvmppc_alignment_dsisr(vcpu, 931 to_book3s(vcpu)->dsisr = kvmppc_alignment_dsisr(vcpu,
920 vcpu->arch.last_inst); 932 kvmppc_get_last_inst(vcpu));
921 vcpu->arch.dear = kvmppc_alignment_dar(vcpu, 933 vcpu->arch.dear = kvmppc_alignment_dar(vcpu,
922 vcpu->arch.last_inst); 934 kvmppc_get_last_inst(vcpu));
923 kvmppc_book3s_queue_irqprio(vcpu, exit_nr); 935 kvmppc_book3s_queue_irqprio(vcpu, exit_nr);
924 } 936 }
925 r = RESUME_GUEST; 937 r = RESUME_GUEST;
@@ -932,7 +944,7 @@ program_interrupt:
932 default: 944 default:
933 /* Ugh - bork here! What did we get? */ 945 /* Ugh - bork here! What did we get? */
934 printk(KERN_EMERG "exit_nr=0x%x | pc=0x%lx | msr=0x%lx\n", 946 printk(KERN_EMERG "exit_nr=0x%x | pc=0x%lx | msr=0x%lx\n",
935 exit_nr, vcpu->arch.pc, vcpu->arch.shadow_srr1); 947 exit_nr, kvmppc_get_pc(vcpu), to_svcpu(vcpu)->shadow_srr1);
936 r = RESUME_HOST; 948 r = RESUME_HOST;
937 BUG(); 949 BUG();
938 break; 950 break;
@@ -959,7 +971,7 @@ program_interrupt:
959 } 971 }
960 972
961#ifdef EXIT_DEBUG 973#ifdef EXIT_DEBUG
962 printk(KERN_EMERG "KVM exit: vcpu=0x%p pc=0x%lx r=0x%x\n", vcpu, vcpu->arch.pc, r); 974 printk(KERN_EMERG "KVM exit: vcpu=0x%p pc=0x%lx r=0x%x\n", vcpu, kvmppc_get_pc(vcpu), r);
963#endif 975#endif
964 976
965 return r; 977 return r;
@@ -976,10 +988,10 @@ int kvm_arch_vcpu_ioctl_get_regs(struct kvm_vcpu *vcpu, struct kvm_regs *regs)
976 988
977 vcpu_load(vcpu); 989 vcpu_load(vcpu);
978 990
979 regs->pc = vcpu->arch.pc; 991 regs->pc = kvmppc_get_pc(vcpu);
980 regs->cr = kvmppc_get_cr(vcpu); 992 regs->cr = kvmppc_get_cr(vcpu);
981 regs->ctr = vcpu->arch.ctr; 993 regs->ctr = kvmppc_get_ctr(vcpu);
982 regs->lr = vcpu->arch.lr; 994 regs->lr = kvmppc_get_lr(vcpu);
983 regs->xer = kvmppc_get_xer(vcpu); 995 regs->xer = kvmppc_get_xer(vcpu);
984 regs->msr = vcpu->arch.msr; 996 regs->msr = vcpu->arch.msr;
985 regs->srr0 = vcpu->arch.srr0; 997 regs->srr0 = vcpu->arch.srr0;
@@ -1007,10 +1019,10 @@ int kvm_arch_vcpu_ioctl_set_regs(struct kvm_vcpu *vcpu, struct kvm_regs *regs)
1007 1019
1008 vcpu_load(vcpu); 1020 vcpu_load(vcpu);
1009 1021
1010 vcpu->arch.pc = regs->pc; 1022 kvmppc_set_pc(vcpu, regs->pc);
1011 kvmppc_set_cr(vcpu, regs->cr); 1023 kvmppc_set_cr(vcpu, regs->cr);
1012 vcpu->arch.ctr = regs->ctr; 1024 kvmppc_set_ctr(vcpu, regs->ctr);
1013 vcpu->arch.lr = regs->lr; 1025 kvmppc_set_lr(vcpu, regs->lr);
1014 kvmppc_set_xer(vcpu, regs->xer); 1026 kvmppc_set_xer(vcpu, regs->xer);
1015 kvmppc_set_msr(vcpu, regs->msr); 1027 kvmppc_set_msr(vcpu, regs->msr);
1016 vcpu->arch.srr0 = regs->srr0; 1028 vcpu->arch.srr0 = regs->srr0;
@@ -1157,19 +1169,23 @@ struct kvm_vcpu *kvmppc_core_vcpu_create(struct kvm *kvm, unsigned int id)
1157{ 1169{
1158 struct kvmppc_vcpu_book3s *vcpu_book3s; 1170 struct kvmppc_vcpu_book3s *vcpu_book3s;
1159 struct kvm_vcpu *vcpu; 1171 struct kvm_vcpu *vcpu;
1160 int err; 1172 int err = -ENOMEM;
1161 1173
1162 vcpu_book3s = vmalloc(sizeof(struct kvmppc_vcpu_book3s)); 1174 vcpu_book3s = vmalloc(sizeof(struct kvmppc_vcpu_book3s));
1163 if (!vcpu_book3s) { 1175 if (!vcpu_book3s)
1164 err = -ENOMEM;
1165 goto out; 1176 goto out;
1166 } 1177
1167 memset(vcpu_book3s, 0, sizeof(struct kvmppc_vcpu_book3s)); 1178 memset(vcpu_book3s, 0, sizeof(struct kvmppc_vcpu_book3s));
1168 1179
1180 vcpu_book3s->shadow_vcpu = (struct kvmppc_book3s_shadow_vcpu *)
1181 kzalloc(sizeof(*vcpu_book3s->shadow_vcpu), GFP_KERNEL);
1182 if (!vcpu_book3s->shadow_vcpu)
1183 goto free_vcpu;
1184
1169 vcpu = &vcpu_book3s->vcpu; 1185 vcpu = &vcpu_book3s->vcpu;
1170 err = kvm_vcpu_init(vcpu, kvm, id); 1186 err = kvm_vcpu_init(vcpu, kvm, id);
1171 if (err) 1187 if (err)
1172 goto free_vcpu; 1188 goto free_shadow_vcpu;
1173 1189
1174 vcpu->arch.host_retip = kvm_return_point; 1190 vcpu->arch.host_retip = kvm_return_point;
1175 vcpu->arch.host_msr = mfmsr(); 1191 vcpu->arch.host_msr = mfmsr();
@@ -1188,7 +1204,7 @@ struct kvm_vcpu *kvmppc_core_vcpu_create(struct kvm *kvm, unsigned int id)
1188 1204
1189 err = __init_new_context(); 1205 err = __init_new_context();
1190 if (err < 0) 1206 if (err < 0)
1191 goto free_vcpu; 1207 goto free_shadow_vcpu;
1192 vcpu_book3s->context_id = err; 1208 vcpu_book3s->context_id = err;
1193 1209
1194 vcpu_book3s->vsid_max = ((vcpu_book3s->context_id + 1) << USER_ESID_BITS) - 1; 1210 vcpu_book3s->vsid_max = ((vcpu_book3s->context_id + 1) << USER_ESID_BITS) - 1;
@@ -1197,6 +1213,8 @@ struct kvm_vcpu *kvmppc_core_vcpu_create(struct kvm *kvm, unsigned int id)
1197 1213
1198 return vcpu; 1214 return vcpu;
1199 1215
1216free_shadow_vcpu:
1217 kfree(vcpu_book3s->shadow_vcpu);
1200free_vcpu: 1218free_vcpu:
1201 vfree(vcpu_book3s); 1219 vfree(vcpu_book3s);
1202out: 1220out:
@@ -1209,6 +1227,7 @@ void kvmppc_core_vcpu_free(struct kvm_vcpu *vcpu)
1209 1227
1210 __destroy_context(vcpu_book3s->context_id); 1228 __destroy_context(vcpu_book3s->context_id);
1211 kvm_vcpu_uninit(vcpu); 1229 kvm_vcpu_uninit(vcpu);
1230 kfree(vcpu_book3s->shadow_vcpu);
1212 vfree(vcpu_book3s); 1231 vfree(vcpu_book3s);
1213} 1232}
1214 1233