|
[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
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |