[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH v2 3/8] xen/x86: manually build xen.mb.efi binary



>>> On 11.07.18 at 13:41, <daniel.kiper@xxxxxxxxxx> wrote:
> On Tue, Jul 10, 2018 at 07:54:51AM -0600, Jan Beulich wrote:
>> >>> On 10.07.18 at 12:48, <daniel.kiper@xxxxxxxxxx> wrote:
>> > On Fri, Jul 06, 2018 at 09:08:29AM -0600, Jan Beulich wrote:
>> >> >>> On 06.07.18 at 16:02, <daniel.kiper@xxxxxxxxxx> wrote:
>> >> > On Thu, Jul 05, 2018 at 02:18:03AM -0600, Jan Beulich wrote:
>> >> >> >>> On 04.07.18 at 18:35, <daniel.kiper@xxxxxxxxxx> wrote:
>> >> >> > On Wed, Jul 04, 2018 at 09:27:43AM -0600, Jan Beulich wrote:
>> >> >> >> >>> On 04.07.18 at 16:01, <daniel.kiper@xxxxxxxxxx> wrote:
>> >> >> >> > On Mon, Jun 25, 2018 at 09:36:07AM -0600, Jan Beulich wrote:
>> >> >> >> >> >>> On 19.06.18 at 16:35, <daniel.kiper@xxxxxxxxxx> wrote:
>> >> >> >> >> > @@ -582,6 +587,12 @@ static void __init 
>> >> >> >> >> > efi_arch_memory_setup(void)
>> >> >> >> >> >      if ( !efi_enabled(EFI_LOADER) )
>> >> >> >> >> >          return;
>> >> >> >> >> >
>> >> >> >> >> > +    if ( efi_enabled(EFI_MB_LOADER) )
>> >> >> >> >> > +        for ( pte = __page_tables_start; pte < 
>> >> >> >> >> > __page_tables_end;
>> >> >> >> >> > +              pte += ( pte != (intpte_t *)l2_identmap ) ? 1 : 
>> >> >> >> >> > 4 * L2_PAGETABLE_ENTRIES )
>> >> >> >> >>
>> >> >> >> >> Please avoid explicit casts - &l2e_get_intpte(l2_identmap[0]) or
>> >> >> >> >> something along those lines ought to work here. Same for
>> >> >> >> >> 4 * L2_PAGETABLE_ENTRIES - you mean ARRAY_SIZE() there.
>> >> >> >> >
>> >> >> >> > OK.
>> >> >> >> >
>> >> >> >> >> Also this whole code block needs a comment, to explain what it
>> >> >> >> >> does and also why l2_identmap needs skipping.
>> >> >> >> >>
>> >> >> >> >> Furthermore - isn't this off by one, and you process 
>> >> >> >> >> l2_identmap[0]
>> >> >> >> >> this way, skipping the rest _plus_ the first following entry? I 
>> >> >> >> >> think
>> >> >> >> >
>> >> >> >> > The code mimics similar code in head.S.
>> >> >> >>
>> >> >> >> I can't see a similar off-by-1 in head.S.
>> >> >> >
>> >> >> >  662         /*
>> >> >> >  663          * Update frame addresses in page tables excluding 
>> >> >> > l2_identmap
>> >> >> >  664          * without its first entry which points to l1_identmap.
>> >> >> >  665          */
>> >> >> >  666         mov     
>> >> >> > $((__page_tables_end-__page_tables_start)/8),%ecx
>> >> >> >  667         mov     $(((l2_identmap-__page_tables_start)/8)+1),%edx
>> >> >> >  668 1:      cmp     
>> >> >> > $((l2_identmap+l2_identmap_sizeof-__page_tables_start)/8),%ecx
>> >> >> >  669         cmove   %edx,%ecx
>> >> >> >  670         testl   
>> >> >> > $_PAGE_PRESENT,sym_fs(__page_tables_start)-8(,%ecx,8)
>> >> >> >  671         jz      2f
>> >> >> >  672         add     %esi,sym_fs(__page_tables_start)-8(,%ecx,8)
>> >> >> >  673 2:      loop    1b
>> >> >>
>> >> >> Well - this is the code in question, but you fail to point out where
>> >> >> the off-by-1 is.
>> >> >
>> >> > Line 667, 668 and 669.
>> >>
>> >> I don't think so, no. Note the -8 in lines 670 and 672.
>> >
>> > However, you are missing +1 in line 667.
>>
>> I don't think I am: The first entry of l2_identmap actually needs
>> processing afaics (and as the comment says), as that's the only one
>> with non-absolute contents. IOW - part of my original comment was
>> wrong, but the other half (you skipping one entry) still seems
>> applicable, as does the part concerning the missing comment.
> 
> It seems correct to me. l2_identmap[0] gets updated and then
> we move to l3_bootmap[0]. Am I missing something?

Hmm, yes, I think you're right. But the way you've coded it it's
less obvious than in the assembly variant, and typically it should
be the other way around. I'd really like you to make this a closer
match.

Jan



_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/xen-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.