|
[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.
On Feb 21, 2013, at 12:42 PM, Tim Deegan <tim@xxxxxxx> wrote:
> 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.
Cool, thanks
Andres
>
> 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 |