History

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

Pull kvm fixes from Paolo Bonzini: "Two bugfixes" * tag 'for-linus' of git://git.kernel.org/pub/scm/virt/kvm/kvm: KVM: VMX: update PFEC_MASK/PFEC_MATCH together with PF intercept KVM: arm64: Restore missing ISB on nVHE __tlb_switch_to_guest

Linus Torvalds committed 6 years ago

Commit 22fbc032 parents 5ee5613 e2e1a1c2 files · +19 −10Browse files

Unified · Split

2 files
  1. arch/arm64/kvm/hyp/nvhe/tlb.c +7 −0
  2. arch/x86/kvm/vmx/vmx.c +12 −10
arch/arm64/kvm/hyp/nvhe/tlb.c+7−0
@@ -31,7 +31,14 @@ static void __tlb_switch_to_guest(struct kvm_s2_mmu *mmu, · 30 unmodified lines
31 isb();31 isb();
32 }32 }
33 33
34 /*
35 * __load_guest_stage2() includes an ISB only when the AT
36 * workaround is applied. Take care of the opposite condition,
37 * ensuring that we always have an ISB, but not two ISBs back
38 * to back.
39 */
34 __load_guest_stage2(mmu);40 __load_guest_stage2(mmu);
41 asm(ALTERNATIVE("isb", "nop", ARM64_WORKAROUND_SPECULATIVE_AT));
35}42}
36 43
37static void __tlb_switch_to_host(struct tlb_inv_context *cxt)44static void __tlb_switch_to_host(struct tlb_inv_context *cxt)
arch/x86/kvm/vmx/vmx.c+12−10
@@ -794,6 +794,18 @@ void update_exception_bitmap(struct kvm_vcpu *vcpu) · 793 unmodified lines
794 */794 */
795 if (is_guest_mode(vcpu))795 if (is_guest_mode(vcpu))
796 eb |= get_vmcs12(vcpu)->exception_bitmap;796 eb |= get_vmcs12(vcpu)->exception_bitmap;
797 else {
798 /*
799 * If EPT is enabled, #PF is only trapped if MAXPHYADDR is mismatched
800 * between guest and host. In that case we only care about present
801 * faults. For vmcs02, however, PFEC_MASK and PFEC_MATCH are set in
802 * prepare_vmcs02_rare.
803 */
804 bool selective_pf_trap = enable_ept && (eb & (1u << PF_VECTOR));
805 int mask = selective_pf_trap ? PFERR_PRESENT_MASK : 0;
806 vmcs_write32(PAGE_FAULT_ERROR_CODE_MASK, mask);
807 vmcs_write32(PAGE_FAULT_ERROR_CODE_MATCH, mask);
808 }
797 809
798 vmcs_write32(EXCEPTION_BITMAP, eb);810 vmcs_write32(EXCEPTION_BITMAP, eb);
799}811}
@@ -4355,16 +4367,6 @@ static void init_vmcs(struct vcpu_vmx *vmx) · 3555 unmodified lines
4355 vmx->pt_desc.guest.output_mask = 0x7F;4367 vmx->pt_desc.guest.output_mask = 0x7F;
4356 vmcs_write64(GUEST_IA32_RTIT_CTL, 0);4368 vmcs_write64(GUEST_IA32_RTIT_CTL, 0);
4357 }4369 }
4358
4359 /*
4360 * If EPT is enabled, #PF is only trapped if MAXPHYADDR is mismatched
4361 * between guest and host. In that case we only care about present
4362 * faults.
4363 */
4364 if (enable_ept) {
4365 vmcs_write32(PAGE_FAULT_ERROR_CODE_MASK, PFERR_PRESENT_MASK);
4366 vmcs_write32(PAGE_FAULT_ERROR_CODE_MATCH, PFERR_PRESENT_MASK);
4367 }
4368}4370}
4369 4371
4370static void vmx_vcpu_reset(struct kvm_vcpu *vcpu, bool init_event)4372static void vmx_vcpu_reset(struct kvm_vcpu *vcpu, bool init_event)

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t