|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH] x86/mm: Take the p2m lock even in shadow mode.
At 09:58 -0500 on 21 Feb (1361440689), Andres Lagar-Cavilla wrote:
> > 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()).
> That is absolutely the case. Here is a rough patch:
Applied, thanks. I've taken your S-o-b below to apply to this patch
too; hope that's OK.
Tim.
> diff -r 7324955b35ad xen/arch/x86/mm/shadow/multi.c
> --- a/xen/arch/x86/mm/shadow/multi.c
> +++ b/xen/arch/x86/mm/shadow/multi.c
> @@ -4861,6 +4861,7 @@ static mfn_t emulate_gva_to_mfn(struct v
> struct sh_emulate_ctxt *sh_ctxt)
> {
> unsigned long gfn;
> + struct page_info *page;
> mfn_t mfn;
> p2m_type_t p2mt;
> uint32_t pfec = PFEC_page_present | PFEC_write_access;
> @@ -4878,22 +4879,30 @@ static mfn_t emulate_gva_to_mfn(struct v
>
> /* Translate the GFN to an MFN */
> ASSERT(!paging_locked_by_me(v->domain));
> - mfn = get_gfn(v->domain, _gfn(gfn), &p2mt);
> -
> + page = get_page_from_gfn(v->domain, gfn, &p2mt, P2M_ALLOC);
> +
> + /* Sanity checking */
> + if ( page == NULL )
> + {
> + return _mfn(BAD_GFN_TO_MFN);
> + }
> if ( p2m_is_readonly(p2mt) )
> {
> - put_gfn(v->domain, gfn);
> + put_page(page);
> return _mfn(READONLY_GFN);
> }
> if ( !p2m_is_ram(p2mt) )
> {
> - put_gfn(v->domain, gfn);
> + put_page(page);
> return _mfn(BAD_GFN_TO_MFN);
> }
> -
> + mfn = page_to_mfn(page);
> ASSERT(mfn_valid(mfn));
> +
> v->arch.paging.last_write_was_pt = !!sh_mfn_is_a_page_table(mfn);
> - put_gfn(v->domain, gfn);
> + /* Note shadow cannot page out or unshare this mfn, so the map won't
> + * disappear. Otherwise, caller must hold onto page until done. */
> + put_page(page);
> return mfn;
> }
>
>
>
> > They're not addressed here but may be in a
> > follow-up patch.
> >
>
> Acked-by: Andres Lagar-Cavilla <andres@xxxxxxxxxxxxxxxx>
> or Signed-off-by: Andres Lagar-Cavilla <andres@xxxxxxxxxxxxxxxx>? see
> http://lists.xen.org/archives/html/xen-devel/2012-04/msg00962.html
>
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |