|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 1/2] x86/altp2m: use __get_gfn_type_access to avoid lock conflicts
On Tue, Aug 9, 2016 at 1:55 AM, Jan Beulich <JBeulich@xxxxxxxx> wrote:
>>>> On 09.08.16 at 01:56, <tamas.lengyel@xxxxxxxxxxxx> wrote:
>> Use __get_gfn_type_access instead of get_gfn_type_access when checking
>> the hostp2m entries during altp2m mem_access setting and gfn remapping
>> to avoid a lock conflict which can make dom0 freeze.
>
> You fail to mention why the resulting code is nevertheless correct:
>
>> --- a/xen/arch/x86/mm/p2m.c
>> +++ b/xen/arch/x86/mm/p2m.c
>> @@ -1787,8 +1787,8 @@ int p2m_set_altp2m_mem_access(struct domain *d, struct
>> p2m_domain *hp2m,
>> if ( !mfn_valid(mfn) )
>> {
>>
>> - mfn = get_gfn_type_access(hp2m, gfn_l, &t, &old_a,
>> - P2M_ALLOC | P2M_UNSHARE, &page_order);
>> + mfn = __get_gfn_type_access(hp2m, gfn_l, &t, &old_a,
>> + P2M_ALLOC | P2M_UNSHARE, &page_order,
>> 0);
>
> In this case the respective p2m lock is already being held.
>
>> @@ -2563,8 +2563,8 @@ int p2m_change_altp2m_gfn(struct domain *d, unsigned
>> int idx,
>> /* Check host p2m if no valid entry in alternate */
>> if ( !mfn_valid(mfn) )
>> {
>> - mfn = get_gfn_type_access(hp2m, gfn_x(old_gfn), &t, &a,
>> - P2M_ALLOC | P2M_UNSHARE, &page_order);
>> + mfn = __get_gfn_type_access(hp2m, gfn_x(old_gfn), &t, &a,
>> + P2M_ALLOC | P2M_UNSHARE, &page_order,
>> 0);
>
> In this case, however, only ap2m's lock is being held, yet you query
> hp2m, so it's not immediately obvious whether the change is correct,
> and it would seem to me that you'd want to hold the gfn lock until
> after the subsequent ap2m->set_entry() (to make sure the two don't
> go out of sync). Since taking hp2m's lock can't nest inside any of its
> ap2m-s' ones, that'd be a slightly more intrusive adjustment.
>
True, we should lock the hp2m just before we lock the ap2m here,
similar to the mem_access path, as we can't do gfn_lock after the
altp2m is already locked.
Tamas
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
https://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |