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:
"Last minute KVM/ARM fixes; even the generic change actually affects
nothing but ARM"

* tag 'for-linus' of git://git.kernel.org/pub/scm/virt/kvm/kvm:
kvm: fix kvm_is_mmio_pfn() and rename to kvm_is_reserved_pfn()
arm/arm64: kvm: drop inappropriate use of kvm_is_mmio_pfn()
arm/arm64: KVM: vgic: Fix error code in kvm_vgic_create()
arm64: KVM: Handle traps of ICC_SRE_EL1 as RAZ/WI
arm64: KVM: fix unmapping with 48-bit VAs

+34 -19
+8 -2
arch/arm/kvm/mmu.c
··· 197 197 pgd = pgdp + pgd_index(addr); 198 198 do { 199 199 next = kvm_pgd_addr_end(addr, end); 200 - unmap_puds(kvm, pgd, addr, next); 200 + if (!pgd_none(*pgd)) 201 + unmap_puds(kvm, pgd, addr, next); 201 202 } while (pgd++, addr = next, addr != end); 202 203 } 203 204 ··· 835 834 return kvm_vcpu_dabt_iswrite(vcpu); 836 835 } 837 836 837 + static bool kvm_is_device_pfn(unsigned long pfn) 838 + { 839 + return !pfn_valid(pfn); 840 + } 841 + 838 842 static int user_mem_abort(struct kvm_vcpu *vcpu, phys_addr_t fault_ipa, 839 843 struct kvm_memory_slot *memslot, unsigned long hva, 840 844 unsigned long fault_status) ··· 910 904 if (is_error_pfn(pfn)) 911 905 return -EFAULT; 912 906 913 - if (kvm_is_mmio_pfn(pfn)) 907 + if (kvm_is_device_pfn(pfn)) 914 908 mem_type = PAGE_S2_DEVICE; 915 909 916 910 spin_lock(&kvm->mmu_lock);
+9
arch/arm64/kvm/sys_regs.c
··· 424 424 /* VBAR_EL1 */ 425 425 { Op0(0b11), Op1(0b000), CRn(0b1100), CRm(0b0000), Op2(0b000), 426 426 NULL, reset_val, VBAR_EL1, 0 }, 427 + 428 + /* ICC_SRE_EL1 */ 429 + { Op0(0b11), Op1(0b000), CRn(0b1100), CRm(0b1100), Op2(0b101), 430 + trap_raz_wi }, 431 + 427 432 /* CONTEXTIDR_EL1 */ 428 433 { Op0(0b11), Op1(0b000), CRn(0b1101), CRm(0b0000), Op2(0b001), 429 434 access_vm_reg, reset_val, CONTEXTIDR_EL1, 0 }, ··· 695 690 { Op1( 0), CRn(10), CRm( 2), Op2( 1), access_vm_reg, NULL, c10_NMRR }, 696 691 { Op1( 0), CRn(10), CRm( 3), Op2( 0), access_vm_reg, NULL, c10_AMAIR0 }, 697 692 { Op1( 0), CRn(10), CRm( 3), Op2( 1), access_vm_reg, NULL, c10_AMAIR1 }, 693 + 694 + /* ICC_SRE */ 695 + { Op1( 0), CRn(12), CRm(12), Op2( 5), trap_raz_wi }, 696 + 698 697 { Op1( 0), CRn(13), CRm( 0), Op2( 1), access_vm_reg, NULL, c13_CID }, 699 698 }; 700 699
+1 -1
arch/ia64/kvm/kvm-ia64.c
··· 1563 1563 1564 1564 for (i = 0; i < npages; i++) { 1565 1565 pfn = gfn_to_pfn(kvm, base_gfn + i); 1566 - if (!kvm_is_mmio_pfn(pfn)) { 1566 + if (!kvm_is_reserved_pfn(pfn)) { 1567 1567 kvm_set_pmt_entry(kvm, base_gfn + i, 1568 1568 pfn << PAGE_SHIFT, 1569 1569 _PAGE_AR_RWX | _PAGE_MA_WB);
+3 -3
arch/x86/kvm/mmu.c
··· 630 630 * kvm mmu, before reclaiming the page, we should 631 631 * unmap it from mmu first. 632 632 */ 633 - WARN_ON(!kvm_is_mmio_pfn(pfn) && !page_count(pfn_to_page(pfn))); 633 + WARN_ON(!kvm_is_reserved_pfn(pfn) && !page_count(pfn_to_page(pfn))); 634 634 635 635 if (!shadow_accessed_mask || old_spte & shadow_accessed_mask) 636 636 kvm_set_pfn_accessed(pfn); ··· 2461 2461 spte |= PT_PAGE_SIZE_MASK; 2462 2462 if (tdp_enabled) 2463 2463 spte |= kvm_x86_ops->get_mt_mask(vcpu, gfn, 2464 - kvm_is_mmio_pfn(pfn)); 2464 + kvm_is_reserved_pfn(pfn)); 2465 2465 2466 2466 if (host_writable) 2467 2467 spte |= SPTE_HOST_WRITEABLE; ··· 2737 2737 * PT_PAGE_TABLE_LEVEL and there would be no adjustment done 2738 2738 * here. 2739 2739 */ 2740 - if (!is_error_noslot_pfn(pfn) && !kvm_is_mmio_pfn(pfn) && 2740 + if (!is_error_noslot_pfn(pfn) && !kvm_is_reserved_pfn(pfn) && 2741 2741 level == PT_PAGE_TABLE_LEVEL && 2742 2742 PageTransCompound(pfn_to_page(pfn)) && 2743 2743 !has_wrprotected_page(vcpu->kvm, gfn, PT_DIRECTORY_LEVEL)) {
+1 -1
include/linux/kvm_host.h
··· 703 703 int kvm_cpu_has_pending_timer(struct kvm_vcpu *vcpu); 704 704 void kvm_vcpu_kick(struct kvm_vcpu *vcpu); 705 705 706 - bool kvm_is_mmio_pfn(pfn_t pfn); 706 + bool kvm_is_reserved_pfn(pfn_t pfn); 707 707 708 708 struct kvm_irq_ack_notifier { 709 709 struct hlist_node link;
+4 -4
virt/kvm/arm/vgic.c
··· 1933 1933 1934 1934 int kvm_vgic_create(struct kvm *kvm) 1935 1935 { 1936 - int i, vcpu_lock_idx = -1, ret = 0; 1936 + int i, vcpu_lock_idx = -1, ret; 1937 1937 struct kvm_vcpu *vcpu; 1938 1938 1939 1939 mutex_lock(&kvm->lock); ··· 1948 1948 * vcpu->mutex. By grabbing the vcpu->mutex of all VCPUs we ensure 1949 1949 * that no other VCPUs are run while we create the vgic. 1950 1950 */ 1951 + ret = -EBUSY; 1951 1952 kvm_for_each_vcpu(i, vcpu, kvm) { 1952 1953 if (!mutex_trylock(&vcpu->mutex)) 1953 1954 goto out_unlock; ··· 1956 1955 } 1957 1956 1958 1957 kvm_for_each_vcpu(i, vcpu, kvm) { 1959 - if (vcpu->arch.has_run_once) { 1960 - ret = -EBUSY; 1958 + if (vcpu->arch.has_run_once) 1961 1959 goto out_unlock; 1962 - } 1963 1960 } 1961 + ret = 0; 1964 1962 1965 1963 spin_lock_init(&kvm->arch.vgic.lock); 1966 1964 kvm->arch.vgic.in_kernel = true;
+8 -8
virt/kvm/kvm_main.c
··· 107 107 108 108 static bool largepages_enabled = true; 109 109 110 - bool kvm_is_mmio_pfn(pfn_t pfn) 110 + bool kvm_is_reserved_pfn(pfn_t pfn) 111 111 { 112 112 if (pfn_valid(pfn)) 113 - return !is_zero_pfn(pfn) && PageReserved(pfn_to_page(pfn)); 113 + return PageReserved(pfn_to_page(pfn)); 114 114 115 115 return true; 116 116 } ··· 1321 1321 else if ((vma->vm_flags & VM_PFNMAP)) { 1322 1322 pfn = ((addr - vma->vm_start) >> PAGE_SHIFT) + 1323 1323 vma->vm_pgoff; 1324 - BUG_ON(!kvm_is_mmio_pfn(pfn)); 1324 + BUG_ON(!kvm_is_reserved_pfn(pfn)); 1325 1325 } else { 1326 1326 if (async && vma_is_valid(vma, write_fault)) 1327 1327 *async = true; ··· 1427 1427 if (is_error_noslot_pfn(pfn)) 1428 1428 return KVM_ERR_PTR_BAD_PAGE; 1429 1429 1430 - if (kvm_is_mmio_pfn(pfn)) { 1430 + if (kvm_is_reserved_pfn(pfn)) { 1431 1431 WARN_ON(1); 1432 1432 return KVM_ERR_PTR_BAD_PAGE; 1433 1433 } ··· 1456 1456 1457 1457 void kvm_release_pfn_clean(pfn_t pfn) 1458 1458 { 1459 - if (!is_error_noslot_pfn(pfn) && !kvm_is_mmio_pfn(pfn)) 1459 + if (!is_error_noslot_pfn(pfn) && !kvm_is_reserved_pfn(pfn)) 1460 1460 put_page(pfn_to_page(pfn)); 1461 1461 } 1462 1462 EXPORT_SYMBOL_GPL(kvm_release_pfn_clean); ··· 1477 1477 1478 1478 void kvm_set_pfn_dirty(pfn_t pfn) 1479 1479 { 1480 - if (!kvm_is_mmio_pfn(pfn)) { 1480 + if (!kvm_is_reserved_pfn(pfn)) { 1481 1481 struct page *page = pfn_to_page(pfn); 1482 1482 if (!PageReserved(page)) 1483 1483 SetPageDirty(page); ··· 1487 1487 1488 1488 void kvm_set_pfn_accessed(pfn_t pfn) 1489 1489 { 1490 - if (!kvm_is_mmio_pfn(pfn)) 1490 + if (!kvm_is_reserved_pfn(pfn)) 1491 1491 mark_page_accessed(pfn_to_page(pfn)); 1492 1492 } 1493 1493 EXPORT_SYMBOL_GPL(kvm_set_pfn_accessed); 1494 1494 1495 1495 void kvm_get_pfn(pfn_t pfn) 1496 1496 { 1497 - if (!kvm_is_mmio_pfn(pfn)) 1497 + if (!kvm_is_reserved_pfn(pfn)) 1498 1498 get_page(pfn_to_page(pfn)); 1499 1499 } 1500 1500 EXPORT_SYMBOL_GPL(kvm_get_pfn);