Merge branch 'kvm-updates/2.6.28' of git://git.kernel.org/pub/scm/linux/kernel/git/avi/kvm

* 'kvm-updates/2.6.28' of git://git.kernel.org/pub/scm/linux/kernel/git/avi/kvm:
KVM: MMU: avoid creation of unreachable pages in the shadow
KVM: ppc: stop leaking host memory on VM exit
KVM: MMU: fix sync of ptes addressed at owner pagetable
KVM: ia64: Fix: Use correct calling convention for PAL_VPS_RESUME_HANDLER
KVM: ia64: Fix incorrect kbuild CFLAGS override
KVM: VMX: Fix interrupt loss during race with NMI
KVM: s390: Fix problem state handling in guest sigp handler

+29 -7
+1 -1
arch/ia64/kvm/Makefile
··· 58 58 kvm-objs := $(common-objs) kvm-ia64.o kvm_fw.o 59 59 obj-$(CONFIG_KVM) += kvm.o 60 60 61 - EXTRA_CFLAGS_vcpu.o += -mfixed-range=f2-f5,f12-f127 61 + CFLAGS_vcpu.o += -mfixed-range=f2-f5,f12-f127 62 62 kvm-intel-objs = vmm.o vmm_ivt.o trampoline.o vcpu.o optvfault.o mmio.o \ 63 63 vtlb.o process.o 64 64 #Add link memcpy and memset to avoid possible structure assignment error
+7 -4
arch/ia64/kvm/optvfault.S
··· 107 107 GLOBAL_ENTRY(kvm_vps_resume_handler) 108 108 movl r30 = PAL_VPS_RESUME_HANDLER 109 109 ;; 110 - ld8 r27=[r25] 110 + ld8 r26=[r25] 111 111 shr r17=r17,IA64_ISR_IR_BIT 112 112 ;; 113 - dep r27=r17,r27,63,1 // bit 63 of r27 indicate whether enable CFLE 113 + dep r26=r17,r26,63,1 // bit 63 of r26 indicate whether enable CFLE 114 114 mov pr=r23,-2 115 115 br.sptk.many kvm_vps_entry 116 116 END(kvm_vps_resume_handler) ··· 894 894 ;; 895 895 ld8 r19=[r19] 896 896 mov b0=r29 897 - cmp.ne p6,p7 = r0,r0 897 + mov r27=cr.isr 898 898 ;; 899 - tbit.z p6,p7 = r19,IA64_PSR_IC_BIT // p1=vpsr.ic 899 + tbit.z p6,p7 = r19,IA64_PSR_IC_BIT // p7=vpsr.ic 900 + shr r27=r27,IA64_ISR_IR_BIT 900 901 ;; 901 902 (p6) ld8 r26=[r25] 902 903 (p7) mov b0=r28 904 + ;; 905 + (p6) dep r26=r27,r26,63,1 903 906 mov pr=r31,-2 904 907 br.sptk.many b0 // call pal service 905 908 ;;
+2
arch/powerpc/include/asm/kvm_ppc.h
··· 104 104 } 105 105 } 106 106 107 + extern void kvmppc_core_destroy_mmu(struct kvm_vcpu *vcpu); 108 + 107 109 #endif /* __POWERPC_KVM_PPC_H__ */
+8
arch/powerpc/kvm/44x_tlb.c
··· 124 124 } 125 125 } 126 126 127 + void kvmppc_core_destroy_mmu(struct kvm_vcpu *vcpu) 128 + { 129 + int i; 130 + 131 + for (i = 0; i <= tlb_44x_hwater; i++) 132 + kvmppc_44x_shadow_release(vcpu, i); 133 + } 134 + 127 135 void kvmppc_tlbe_set_modified(struct kvm_vcpu *vcpu, unsigned int i) 128 136 { 129 137 vcpu->arch.shadow_tlb_mod[i] = 1;
+1
arch/powerpc/kvm/powerpc.c
··· 238 238 239 239 void kvm_arch_vcpu_uninit(struct kvm_vcpu *vcpu) 240 240 { 241 + kvmppc_core_destroy_mmu(vcpu); 241 242 } 242 243 243 244 /* Note: clearing MSR[DE] just means that the debug interrupt will not be
+5
arch/s390/kvm/sigp.c
··· 237 237 u8 order_code; 238 238 int rc; 239 239 240 + /* sigp in userspace can exit */ 241 + if (vcpu->arch.sie_block->gpsw.mask & PSW_MASK_PSTATE) 242 + return kvm_s390_inject_program_int(vcpu, 243 + PGM_PRIVILEGED_OPERATION); 244 + 240 245 order_code = disp2; 241 246 if (base2) 242 247 order_code += vcpu->arch.guest_gprs[base2];
+1 -1
arch/x86/kvm/mmu.c
··· 1038 1038 } 1039 1039 1040 1040 rmap_write_protect(vcpu->kvm, sp->gfn); 1041 + kvm_unlink_unsync_page(vcpu->kvm, sp); 1041 1042 if (vcpu->arch.mmu.sync_page(vcpu, sp)) { 1042 1043 kvm_mmu_zap_page(vcpu->kvm, sp); 1043 1044 return 1; 1044 1045 } 1045 1046 1046 1047 kvm_mmu_flush_tlb(vcpu); 1047 - kvm_unlink_unsync_page(vcpu->kvm, sp); 1048 1048 return 0; 1049 1049 } 1050 1050
+1
arch/x86/kvm/paging_tmpl.h
··· 331 331 r = kvm_read_guest_atomic(vcpu->kvm, gw->pte_gpa[level - 2], 332 332 &curr_pte, sizeof(curr_pte)); 333 333 if (r || curr_pte != gw->ptes[level - 2]) { 334 + kvm_mmu_put_page(shadow_page, sptep); 334 335 kvm_release_pfn_clean(sw->pfn); 335 336 sw->sptep = NULL; 336 337 return 1;
+3 -1
arch/x86/kvm/vmx.c
··· 3149 3149 3150 3150 if (cpu_has_virtual_nmis()) { 3151 3151 if (vcpu->arch.nmi_pending && !vcpu->arch.nmi_injected) { 3152 - if (vmx_nmi_enabled(vcpu)) { 3152 + if (vcpu->arch.interrupt.pending) { 3153 + enable_nmi_window(vcpu); 3154 + } else if (vmx_nmi_enabled(vcpu)) { 3153 3155 vcpu->arch.nmi_pending = false; 3154 3156 vcpu->arch.nmi_injected = true; 3155 3157 } else {