Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge tag 'for-linus' of git://git.kernel.org/pub/scm/virt/kvm/kvm

Pull KVM fixes from Paolo Bonzini:
- ARM/MIPS: Fixes for ioctls when copy_from_user returns nonzero
- x86: Small fix for Skylake TSC scaling
- x86: Improved fix for last week's missed hardware breakpoint bug

* tag 'for-linus' of git://git.kernel.org/pub/scm/virt/kvm/kvm:
kvm: x86: Update tsc multiplier on change.
mips/kvm: fix ioctl error handling
arm/arm64: KVM: Fix ioctl error handling
KVM: x86: fix root cause for missed hardware breakpoints

+17 -14
+1 -1
arch/arm/kvm/guest.c
··· 161 161 u64 val; 162 162 163 163 val = kvm_arm_timer_get_reg(vcpu, reg->id); 164 - return copy_to_user(uaddr, &val, KVM_REG_SIZE(reg->id)); 164 + return copy_to_user(uaddr, &val, KVM_REG_SIZE(reg->id)) ? -EFAULT : 0; 165 165 } 166 166 167 167 static unsigned long num_core_regs(void)
+1 -1
arch/arm64/kvm/guest.c
··· 194 194 u64 val; 195 195 196 196 val = kvm_arm_timer_get_reg(vcpu, reg->id); 197 - return copy_to_user(uaddr, &val, KVM_REG_SIZE(reg->id)); 197 + return copy_to_user(uaddr, &val, KVM_REG_SIZE(reg->id)) ? -EFAULT : 0; 198 198 } 199 199 200 200 /**
+2 -2
arch/mips/kvm/mips.c
··· 702 702 } else if ((reg->id & KVM_REG_SIZE_MASK) == KVM_REG_SIZE_U128) { 703 703 void __user *uaddr = (void __user *)(long)reg->addr; 704 704 705 - return copy_to_user(uaddr, vs, 16); 705 + return copy_to_user(uaddr, vs, 16) ? -EFAULT : 0; 706 706 } else { 707 707 return -EINVAL; 708 708 } ··· 732 732 } else if ((reg->id & KVM_REG_SIZE_MASK) == KVM_REG_SIZE_U128) { 733 733 void __user *uaddr = (void __user *)(long)reg->addr; 734 734 735 - return copy_from_user(vs, uaddr, 16); 735 + return copy_from_user(vs, uaddr, 16) ? -EFAULT : 0; 736 736 } else { 737 737 return -EINVAL; 738 738 }
+9 -5
arch/x86/kvm/vmx.c
··· 596 596 /* Support for PML */ 597 597 #define PML_ENTITY_NUM 512 598 598 struct page *pml_pg; 599 + 600 + u64 current_tsc_ratio; 599 601 }; 600 602 601 603 enum segment_cache_field { ··· 2129 2127 rdmsrl(MSR_IA32_SYSENTER_ESP, sysenter_esp); 2130 2128 vmcs_writel(HOST_IA32_SYSENTER_ESP, sysenter_esp); /* 22.2.3 */ 2131 2129 2132 - /* Setup TSC multiplier */ 2133 - if (cpu_has_vmx_tsc_scaling()) 2134 - vmcs_write64(TSC_MULTIPLIER, 2135 - vcpu->arch.tsc_scaling_ratio); 2136 - 2137 2130 vmx->loaded_vmcs->cpu = cpu; 2131 + } 2132 + 2133 + /* Setup TSC multiplier */ 2134 + if (kvm_has_tsc_control && 2135 + vmx->current_tsc_ratio != vcpu->arch.tsc_scaling_ratio) { 2136 + vmx->current_tsc_ratio = vcpu->arch.tsc_scaling_ratio; 2137 + vmcs_write64(TSC_MULTIPLIER, vmx->current_tsc_ratio); 2138 2138 } 2139 2139 2140 2140 vmx_vcpu_pi_load(vcpu, cpu);
+4 -5
arch/x86/kvm/x86.c
··· 2752 2752 } 2753 2753 2754 2754 kvm_make_request(KVM_REQ_STEAL_UPDATE, vcpu); 2755 - vcpu->arch.switch_db_regs |= KVM_DEBUGREG_RELOAD; 2756 2755 } 2757 2756 2758 2757 void kvm_arch_vcpu_put(struct kvm_vcpu *vcpu) ··· 6618 6619 * KVM_DEBUGREG_WONT_EXIT again. 6619 6620 */ 6620 6621 if (unlikely(vcpu->arch.switch_db_regs & KVM_DEBUGREG_WONT_EXIT)) { 6621 - int i; 6622 - 6623 6622 WARN_ON(vcpu->guest_debug & KVM_GUESTDBG_USE_HW_BP); 6624 6623 kvm_x86_ops->sync_dirty_debug_regs(vcpu); 6625 - for (i = 0; i < KVM_NR_DB_REGS; i++) 6626 - vcpu->arch.eff_db[i] = vcpu->arch.db[i]; 6624 + kvm_update_dr0123(vcpu); 6625 + kvm_update_dr6(vcpu); 6626 + kvm_update_dr7(vcpu); 6627 + vcpu->arch.switch_db_regs &= ~KVM_DEBUGREG_RELOAD; 6627 6628 } 6628 6629 6629 6630 /*