[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-changelog] [xen stable-4.2] x86/mm: Take the p2m lock even in shadow mode.



commit 3c4cd2c6a0e1795c837dd0cfb15db08a5d6694eb
Author:     Tim Deegan <tim@xxxxxxx>
AuthorDate: Thu Mar 7 17:55:16 2013 +0100
Commit:     Jan Beulich <jbeulich@xxxxxxxx>
CommitDate: Thu Mar 7 17:55:16 2013 +0100

    x86/mm: Take the p2m lock even in shadow mode.
    
    The reworking of p2m lookups to use get_gfn()/put_gfn() left the
    shadow code not taking the p2m lock, even in cases where the p2m would
    be updated (i.e. PoD).
    
    In many cases, shadow code doesn't need the exclusion that
    get_gfn()/put_gfn() provides, as it has its own interlocks against p2m
    updates, but this is taking things too far, and can lead to crashes in
    the PoD code.
    
    Now that most shadow-code p2m lookups are done with explicitly
    unlocked accessors, or with the get_page_from_gfn() accessor, which is
    often lock-free, we can just turn this locking on.
    
    The remaining locked lookups are in sh_page_fault() (in a path that's
    almost always already serializing on the paging lock), and in
    emulate_map_dest() (which can probably be updated to use
    get_page_from_gfn()).  They're not addressed here but may be in a
    follow-up patch.
    
    Signed-off-by: Tim Deegan <tim@xxxxxxx>
    Acked-by: Andres Lagar-Cavilla <andres@xxxxxxxxxxxxxxxx>
    master changeset: a15d87475ed95840dba693ab0a56d0b48a215cbc
    master date: 2013-02-21 15:16:20 +0000
---
 xen/arch/x86/mm/p2m.c |    6 ++----
 1 files changed, 2 insertions(+), 4 deletions(-)

diff --git a/xen/arch/x86/mm/p2m.c b/xen/arch/x86/mm/p2m.c
index 674fa05..e111d64 100644
--- a/xen/arch/x86/mm/p2m.c
+++ b/xen/arch/x86/mm/p2m.c
@@ -163,8 +163,7 @@ mfn_t __get_gfn_type_access(struct p2m_domain *p2m, 
unsigned long gfn,
         return _mfn(gfn);
     }
 
-    /* For now only perform locking on hap domains */
-    if ( locked && (hap_enabled(p2m->domain)) )
+    if ( locked )
         /* Grab the lock here, don't release until put_gfn */
         gfn_lock(p2m, gfn, 0);
 
@@ -197,8 +196,7 @@ mfn_t __get_gfn_type_access(struct p2m_domain *p2m, 
unsigned long gfn,
 
 void __put_gfn(struct p2m_domain *p2m, unsigned long gfn)
 {
-    if ( !p2m || !paging_mode_translate(p2m->domain) 
-              || !hap_enabled(p2m->domain) )
+    if ( !p2m || !paging_mode_translate(p2m->domain) )
         /* Nothing to do in this case */
         return;
 
--
generated by git-patchbot for /home/xen/git/xen.git#stable-4.2

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.