|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH V4 3/3] x86/altp2m: fix display frozen when switching to a new view early
On 11/9/18 4:19 PM, Razvan Cojocaru wrote:
> On 11/8/18 8:14 PM, George Dunlap wrote:
>> On 11/01/2018 02:45 PM, Razvan Cojocaru wrote:
>> ...here and...
>>
>>> +
>>> int p2m_set_ioreq_server(struct domain *d,
>>> unsigned int flags,
>>> struct hvm_ioreq_server *s)
>>> @@ -994,12 +1033,12 @@ int p2m_change_type_one(struct domain *d, unsigned
>>> long gfn_l,
>>> }
>>>
>>> /* Modify the p2m type of a range of gfns from ot to nt. */
>>> -void p2m_change_type_range(struct domain *d,
>>> - unsigned long start, unsigned long end,
>>> - p2m_type_t ot, p2m_type_t nt)
>>> +static void change_type_range(struct p2m_domain *p2m,
>>> + unsigned long start, unsigned long end,
>>> + p2m_type_t ot, p2m_type_t nt)
>>> {
>>> unsigned long gfn = start;
>>> - struct p2m_domain *p2m = p2m_get_hostp2m(d);
>>> + struct domain *d = p2m->domain;
>>> int rc = 0;
>>>
>>> ASSERT(ot != nt);
>>> @@ -1052,6 +1091,24 @@ void p2m_change_type_range(struct domain *d,
>>> p2m_unlock(p2m);
>>> }
>>>
>>> +void p2m_change_type_range(struct domain *d,
>>> + unsigned long start, unsigned long end,
>>> + p2m_type_t ot, p2m_type_t nt)
>>> +{
>>> + change_type_range(p2m_get_hostp2m(d), start, end, ot, nt);
>>> +
>>> +#ifdef CONFIG_HVM
>>> + if ( unlikely(altp2m_active(d)) )
>>> + {
>>> + unsigned int i;
>>> +
>>> + for ( i = 0; i < MAX_ALTP2M; i++ )
>>> + if ( d->arch.altp2m_eptp[i] != mfn_x(INVALID_MFN) )
>>> + change_type_range(d->arch.altp2m_p2m[i], start, end, ot,
>>> nt);
>>> + }
>>> +#endif
>>> +}
>>> +
>>
>> ...here you grab & release each lock separately, inside the update
>> function. memory_type_changed is probably more or less idempotent, so
>> won't matter if two different calls race; but it seems likely that if
>> two p2m_change_type_range() calls happen concurrently, the various
>> altp2ms will get different results. Is it worth refactoring both of
>> these so that, like change_entry_type_global, you hold the host p2m lock
>> while you change the individual altp2m locks?
>
> I have changed the code to do all the modifications under hostp2m lock,
> and on changing the resolution on a host with three altp2ms I get a
> "Watchdog timer detects that CPU3 is stuck!" hypervisor crash:
Apologies, this is clearly my fault. I've missed a copy-paste problem
that went wrong - I have a p2m_lock() where there should have been a
p2m_unlock().
I'm sorry for the noise.
Thanks,
Razvan
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |