diff options
| -rw-r--r-- | arch/x86/include/asm/pvclock.h | 9 | ||||
| -rw-r--r-- | arch/x86/kvm/mmu.c | 2 | ||||
| -rw-r--r-- | arch/x86/kvm/paging_tmpl.h | 2 | ||||
| -rw-r--r-- | arch/x86/kvm/vmx.c | 3 |
4 files changed, 11 insertions, 5 deletions
diff --git a/arch/x86/include/asm/pvclock.h b/arch/x86/include/asm/pvclock.h index 31d84acc1512..a518c0a45044 100644 --- a/arch/x86/include/asm/pvclock.h +++ b/arch/x86/include/asm/pvclock.h | |||
| @@ -22,6 +22,8 @@ static inline u64 pvclock_scale_delta(u64 delta, u32 mul_frac, int shift) | |||
| 22 | u64 product; | 22 | u64 product; |
| 23 | #ifdef __i386__ | 23 | #ifdef __i386__ |
| 24 | u32 tmp1, tmp2; | 24 | u32 tmp1, tmp2; |
| 25 | #else | ||
| 26 | ulong tmp; | ||
| 25 | #endif | 27 | #endif |
| 26 | 28 | ||
| 27 | if (shift < 0) | 29 | if (shift < 0) |
| @@ -42,8 +44,11 @@ static inline u64 pvclock_scale_delta(u64 delta, u32 mul_frac, int shift) | |||
| 42 | : "a" ((u32)delta), "1" ((u32)(delta >> 32)), "2" (mul_frac) ); | 44 | : "a" ((u32)delta), "1" ((u32)(delta >> 32)), "2" (mul_frac) ); |
| 43 | #elif defined(__x86_64__) | 45 | #elif defined(__x86_64__) |
| 44 | __asm__ ( | 46 | __asm__ ( |
| 45 | "mul %%rdx ; shrd $32,%%rdx,%%rax" | 47 | "mul %[mul_frac] ; shrd $32, %[hi], %[lo]" |
| 46 | : "=a" (product) : "0" (delta), "d" ((u64)mul_frac) ); | 48 | : [lo]"=a"(product), |
| 49 | [hi]"=d"(tmp) | ||
| 50 | : "0"(delta), | ||
| 51 | [mul_frac]"rm"((u64)mul_frac)); | ||
| 47 | #else | 52 | #else |
| 48 | #error implement me! | 53 | #error implement me! |
| 49 | #endif | 54 | #endif |
diff --git a/arch/x86/kvm/mmu.c b/arch/x86/kvm/mmu.c index bd14bb4c8594..aee38623b768 100644 --- a/arch/x86/kvm/mmu.c +++ b/arch/x86/kvm/mmu.c | |||
| @@ -565,7 +565,7 @@ gfn_to_memslot_dirty_bitmap(struct kvm_vcpu *vcpu, gfn_t gfn, | |||
| 565 | 565 | ||
| 566 | static bool mapping_level_dirty_bitmap(struct kvm_vcpu *vcpu, gfn_t large_gfn) | 566 | static bool mapping_level_dirty_bitmap(struct kvm_vcpu *vcpu, gfn_t large_gfn) |
| 567 | { | 567 | { |
| 568 | return gfn_to_memslot_dirty_bitmap(vcpu, large_gfn, true); | 568 | return !gfn_to_memslot_dirty_bitmap(vcpu, large_gfn, true); |
| 569 | } | 569 | } |
| 570 | 570 | ||
| 571 | static int mapping_level(struct kvm_vcpu *vcpu, gfn_t large_gfn) | 571 | static int mapping_level(struct kvm_vcpu *vcpu, gfn_t large_gfn) |
diff --git a/arch/x86/kvm/paging_tmpl.h b/arch/x86/kvm/paging_tmpl.h index 6c4dc010c4cb..9d03ad4dd5ec 100644 --- a/arch/x86/kvm/paging_tmpl.h +++ b/arch/x86/kvm/paging_tmpl.h | |||
| @@ -121,7 +121,7 @@ static int FNAME(walk_addr_generic)(struct guest_walker *walker, | |||
| 121 | gva_t addr, u32 access) | 121 | gva_t addr, u32 access) |
| 122 | { | 122 | { |
| 123 | pt_element_t pte; | 123 | pt_element_t pte; |
| 124 | pt_element_t __user *ptep_user; | 124 | pt_element_t __user *uninitialized_var(ptep_user); |
| 125 | gfn_t table_gfn; | 125 | gfn_t table_gfn; |
| 126 | unsigned index, pt_access, uninitialized_var(pte_access); | 126 | unsigned index, pt_access, uninitialized_var(pte_access); |
| 127 | gpa_t pte_gpa; | 127 | gpa_t pte_gpa; |
diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c index 4c3fa0f67469..d48ec60ea421 100644 --- a/arch/x86/kvm/vmx.c +++ b/arch/x86/kvm/vmx.c | |||
| @@ -2047,7 +2047,8 @@ static void ept_update_paging_mode_cr0(unsigned long *hw_cr0, | |||
| 2047 | unsigned long cr0, | 2047 | unsigned long cr0, |
| 2048 | struct kvm_vcpu *vcpu) | 2048 | struct kvm_vcpu *vcpu) |
| 2049 | { | 2049 | { |
| 2050 | vmx_decache_cr3(vcpu); | 2050 | if (!test_bit(VCPU_EXREG_CR3, (ulong *)&vcpu->arch.regs_avail)) |
| 2051 | vmx_decache_cr3(vcpu); | ||
| 2051 | if (!(cr0 & X86_CR0_PG)) { | 2052 | if (!(cr0 & X86_CR0_PG)) { |
| 2052 | /* From paging/starting to nonpaging */ | 2053 | /* From paging/starting to nonpaging */ |
| 2053 | vmcs_write32(CPU_BASED_VM_EXEC_CONTROL, | 2054 | vmcs_write32(CPU_BASED_VM_EXEC_CONTROL, |
