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

Re: [Xen-devel] [PATCH v3 5/5] fix: add multiboot2 protocol support for EFI platforms



>>> On 18.01.17 at 14:33, <cardoe@xxxxxxxxxx> wrote:
> On 1/18/17 4:52 AM, Jan Beulich wrote:
>>>>> On 17.01.17 at 21:07, <cardoe@xxxxxxxxxx> wrote:
>>> --- a/xen/arch/x86/boot/head.S
>>> +++ b/xen/arch/x86/boot/head.S
>>> @@ -519,6 +519,7 @@ trampoline_setup:
>>>  1:
>>>          /* Switch to low-memory stack.  */
>>>          mov     sym_phys(trampoline_phys),%edi
>>> +        /* The stack base is 64kb after the location of trampoline_phys */
>>>          lea     0x10000(%edi),%esp
>> 
>> I'm sorry for being picky, but the stack _base_ isn't where the stack
>> pointer should point initially, or else there would be no room on the
>> stack at all. Perhaps you had a reason for not using the wording I
>> did suggest, but whatever wording is chosen should not risk to cause
>> confusion (otherwise I think we'd be better off not adding any
>> comment here).
> 
> So this was my perception. Maybe I'm totally wrong here.
> 
> |----------|---------|------|
> a          b         c      d
> 
> example values
> a = 0x0 (0)
> b = 0x8c000 (trampoline_phys)
> c = 0x9c000 (base of stack as it grows towards 0x8c000)
> d = 0x100000 (1mb)
> 
> mov    sym_phys(trampoline_phys),%edi
> lea    0x10000(%edi),%esp
> 
> I would think that 0x10000 + %edi would be the base or start of the
> stack since its growing downwards towards b.

Well, to me "start" and "base" are the lowest address and "end" the
highest (or one byte beyond).

>>> @@ -686,6 +683,10 @@ paddr_t __init efi_multiboot2(EFI_HANDLE ImageHandle, 
>>> EFI_SYSTEM_TABLE *SystemTa
>>>      setup_efi_pci();
>>>      efi_variables();
>>>  
>>> +    /* This is the maximum size of our trampoline + our low memory stack */
>>> +    cfg.size = max_t(UINTN, 64 << 10,
>>> +            (trampoline_end - trampoline_start) + 4096);
>> 
>> Considering the consuming code further up, I don't understand the
>> reason for the addition of 4096 here. And if there is a reason, I'm
>> pretty sure you actually mean PAGE_SIZE.
> 
> You are correct. Given that the assembly is hardcoded at 64k there is no
> reason for this. I had kicked around doing a similar max() call in
> assembly instead of hardcoding the value but didn't do it. So I should
> just remove this.

Well, I don't mind the max() (albeit it's not very useful, especially
if trampoline size would ever get pretty close to 64k). And as said
in reply to the earlier version - I think this would better be checked
at build time (see the various ASSERT()s at the end of xen.lds.S).

Jan


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
https://lists.xen.org/xen-devel

 


Rackspace

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