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

Re: [Xen-devel] [Xen-staging] [xen] x86/mm: Take the p2m lock even in shadow mode.



Ian, 

I suppose this came from the commit bot on the xen.git tree? Could we
get the branch added to the Subject (e.g. [xen staging] / [xen
staging/4.2] etc). If it could include the committer as well as the
author in the metadata that might be useful too.

Cheers,
Ian.

On Thu, 2013-02-21 at 19:12 +0000, patchbot@xxxxxxx wrote:
> commit a15d87475ed95840dba693ab0a56d0b48a215cbc
> Author: Tim Deegan <tim@xxxxxxx>
> Date:   Thu Feb 21 14:07:19 2013 +0000
> 
>     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>
> ---
>  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 de1dd82..2db73c9 100644
> --- a/xen/arch/x86/mm/p2m.c
> +++ b/xen/arch/x86/mm/p2m.c
> @@ -218,8 +218,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);
>  
> @@ -248,8 +247,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#staging
> 
> _______________________________________________
> Xen-staging mailing list
> Xen-staging@xxxxxxxxxxxxx
> http://lists.xensource.com/xen-staging



_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

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