|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 2/5] x86/pv: map_ldt_shadow_page() cleanup
On 29/08/17 15:14, Jan Beulich wrote:
>>>> On 29.08.17 at 13:19, <andrew.cooper3@xxxxxxxxxx> wrote:
>> --- a/xen/arch/x86/mm.c
>> +++ b/xen/arch/x86/mm.c
>> @@ -667,45 +667,49 @@ static int alloc_segdesc_page(struct page_info *page)
>> }
>>
>>
>> -/* Map shadow page at offset @off. */
>> -int map_ldt_shadow_page(unsigned int off)
>> +/*
>> + * Map a guests LDT page (at @offset bytes from the start of the LDT) into
> The comment is not really correct: The low 12 bits of offset don't
> matter for where the page gets mapped. "(covering the byte at
> @offset ..." perhaps?
Ok.
>
>> + * Xen's virtual range. Returns true if the mapping changed, false
>> otherwise.
>> + */
>> +bool map_ldt_shadow_page(unsigned int offset)
>> {
>> struct vcpu *v = current;
>> struct domain *d = v->domain;
>> - unsigned long gmfn;
>> struct page_info *page;
>> - l1_pgentry_t l1e, nl1e;
>> - unsigned long gva = v->arch.pv_vcpu.ldt_base + (off << PAGE_SHIFT);
>> - int okay;
>> + l1_pgentry_t gl1e, *pl1e;
>> + unsigned long linear = v->arch.pv_vcpu.ldt_base + offset;
>>
>> BUG_ON(unlikely(in_irq()));
>>
>> + /* Hardware limit checking should guarentee this property. */
> guarantee?
Yes.
>
>> + ASSERT((offset >> 3) <= v->arch.pv_vcpu.ldt_ents);
> Can this validly be an ASSERT()? I.e. is there really no way for
> ldt_ents for a vCPU to change between the hardware limit check
> and execution making it here? MMUEXT_SET_LDT acts on current,
> but vcpu_reset() clearing v->is_initialised and then
> arch_set_info_guest() becoming usable on this vCPU is not that
> trivial to exclude (i.e. at least the comment would probably want
> extending).
vcpu_reset() calls vcpu_pause() first, which will block until the #PF
handler completes.
arch_set_info_guest() can't be called on already-initialised vcpus.
I will extend the comment to explain why the ASSERT() is safe.
~Andrew
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
https://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |