Patch "ARM: KVM: user_mem_abort: support stage 2 MMIO page mapping" has been added to the 3.14-stable tree
Subsystems (2)
This is a note to let you know that I've just added the patch titled
ARM: KVM: user_mem_abort: support stage 2 MMIO page mapping
to the 3.14-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
arm-kvm-user_mem_abort-support-stage-2-mmio-page-mapping.patch
and it can be found in the queue-3.14 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
b88657674d39fc2127d62d0de9ca142e166443c8Mon Sep 17 00:00:00 2001
From: Kim Phillips <[email protected]>
Date: Thu, 26 Jun 2014 01:45:51 +0100
Subject: ARM: KVM: user_mem_abort: support stage 2 MMIO page mapping
From: Kim Phillips <[email protected]>
commit b88657674d39fc2127d62d0de9ca142e166443c8 upstream.
A userspace process can map device MMIO memory via VFIO or /dev/mem, e.g., for platform device passthrough support in QEMU.
During early development, we found the PAGE_S2 memory type being used for MMIO mappings. This patch corrects that by using the more strongly ordered memory type for device MMIO mappings: PAGE_S2_DEVICE.
--- arch/arm/kvm/mmu.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-)
arch/arm/kvm/mmu.c +8 -3
@@ -759,6 +759,7 @@ static int user_mem_abort(struct kvm_vcpstruct kvm_mmu_memory_cache *memcache = &vcpu->arch.mmu_page_cache;struct vm_area_struct *vma;pfn_t pfn; +pgprot_t mem_type =PAGE_S2 ; write_fault =kvm_is_write_fault (kvm_vcpu_get_hsr (vcpu));if (fault_status ==FSC_PERM && !write_fault) {
@@ -809,6 +810,9 @@ static int user_mem_abort(struct kvm_vcpif (is_error_pfn (pfn))return -EFAULT ; +if (kvm_is_mmio_pfn (pfn)) + mem_type =PAGE_S2_DEVICE ; +spin_lock (&kvm->mmu_lock);if (mmu_notifier_retry (kvm, mmu_seq)) goto out_unlock;
@@ -816,7 +820,7 @@ static int user_mem_abort(struct kvm_vcp hugetlb =transparent_hugepage_adjust (&pfn, &fault_ipa);if (hugetlb) { -pmd_t new_pmd =pfn_pmd (pfn,PAGE_S2 ); +pmd_t new_pmd =pfn_pmd (pfn, mem_type); new_pmd =pmd_mkhuge (new_pmd);if (writable) {kvm_set_s2pmd_writable (&new_pmd);
@@ -825,13 +829,14 @@ static int user_mem_abort(struct kvm_vcpcoherent_cache_guest_page (vcpu, hva &PMD_MASK ,PMD_SIZE ); ret =stage2_set_pmd_huge (kvm, memcache, fault_ipa, &new_pmd); }else { -pte_t new_pte =pfn_pte (pfn,PAGE_S2 ); +pte_t new_pte =pfn_pte (pfn, mem_type);if (writable) {kvm_set_s2pte_writable (&new_pte);kvm_set_pfn_dirty (pfn); }coherent_cache_guest_page (vcpu, hva,PAGE_SIZE ); - ret =stage2_set_pte (kvm, memcache, fault_ipa, &new_pte, false); + ret =stage2_set_pte (kvm, memcache, fault_ipa, &new_pte, + mem_type ==PAGE_S2_DEVICE ); }
Patches currently in stable-queue which might be from [email protected] are
queue-3.14/arm-kvm-user_mem_abort-support-stage-2-mmio-page-mapping.patch