WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-devel

[Xen-devel] [PATCH] x86/cpa: make sure cpa is safe to call in lazy mmu m

To: Ingo Molnar <mingo@xxxxxxx>
Subject: [Xen-devel] [PATCH] x86/cpa: make sure cpa is safe to call in lazy mmu mode
From: Jeremy Fitzhardinge <jeremy@xxxxxxxx>
Date: Wed, 11 Feb 2009 09:32:19 -0800
Cc: kvm-devel <kvm-devel@xxxxxxxxxxxxxxxxxxxxx>, Xen-devel <xen-devel@xxxxxxxxxxxxxxxxxxx>, the arch/x86 maintainers <x86@xxxxxxxxxx>, Stable Kernel <stable@xxxxxxxxxx>, Marcelo Tosatti <mtosatti@xxxxxxxxxx>
Delivery-date: Wed, 11 Feb 2009 09:32:51 -0800
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-devel-request@lists.xensource.com?subject=help>
List-id: Xen developer discussion <xen-devel.lists.xensource.com>
List-post: <mailto:xen-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
User-agent: Thunderbird 2.0.0.19 (X11/20090105)
[ Ingo, this needs to go upstream and -stable. -J ]

commit 2193cee29f66b873b9f8ac2cebb2c7b755ec73a3
Author: Jeremy Fitzhardinge <jeremy.fitzhardinge@xxxxxxxxxx>
Date:   Tue Feb 10 14:15:52 2009 -0800

   x86/cpa: make sure cpa is safe to call in lazy mmu mode
Impact: fix race leading to crash under KVM and Xen

   The CPA code may be called while we're in lazy mmu update mode - for
   example, when using DEBUG_PAGE_ALLOC and doing a slab allocation
   in an interrupt handler which interrupted a lazy mmu update.  In this
   case, the in-memory pagetable state may be out of date due to pending
   queued updates.  We need to flush any pending updates before inspecting
   the page table.  Similarly, we must explicitly flush any modifications
   CPA may have made (which comes down to flushing queued operations when
   flushing the TLB).
Signed-off-by: Jeremy Fitzhardinge <jeremy.fitzhardinge@xxxxxxxxxx>
   Acked-by: Marcelo Tosatti <mtosatti@xxxxxxxxxx>

diff --git a/arch/x86/mm/pageattr.c b/arch/x86/mm/pageattr.c
index 84ba748..fb12f06 100644
--- a/arch/x86/mm/pageattr.c
+++ b/arch/x86/mm/pageattr.c
@@ -576,6 +576,13 @@ static int __change_page_attr(struct cpa_data *cpa, int 
primary)
        else
                address = *cpa->vaddr;

+       /*
+        * If we're called with lazy mmu updates enabled, the
+        * in-memory pte state may be stale.  Flush pending updates to
+        * bring them up to date.
+        */
+       arch_flush_lazy_mmu_mode();
+
repeat:
        kpte = lookup_address(address, &level);
        if (!kpte)
@@ -854,6 +861,13 @@ static int change_page_attr_set_clr(unsigned long *addr, 
int numpages,
        } else
                cpa_flush_all(cache);

+ /* + * If we've been called with lazy mmu updates enabled, then
+        * make sure that everything gets flushed out before we
+        * return.
+        */
+       arch_flush_lazy_mmu_mode();
+
out:
        return ret;
}



_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel

<Prev in Thread] Current Thread [Next in Thread>