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

Re: [PATCH] x86/hvm/dom0: fix PVH initrd and metadata placement


  • To: Xenia Ragiadakou <xenia.ragiadakou@xxxxxxx>
  • From: Jan Beulich <jbeulich@xxxxxxxx>
  • Date: Thu, 26 Oct 2023 14:37:09 +0200
  • Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com; dkim=pass header.d=suse.com; arc=none
  • Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=7BsNwxmn3Vf+ElTPZZquO3BrSJg0FRfqwFU1woJ87Dg=; b=C1YzcjcG3DQAX0VBU0NAXOd+mgn50W0HKapqNYPUk3yiT9aVNNW0uETQGjm1P6b+8p6P1KVpr+dwTh0u3exqdNksocmywIDWIoKRYq1C0KTpuaAhcMjqrUoSQQf/7LTUJGqOrd7/LeaGLCwWo8BpArtrJ0ZYMrVGCF2fwqqEtgbBusCHEY7yDwEgVJjNGxCW1k+0B5SNacX90U0hrlCWDpaGFUwRwM0vEHUmqit08QBTLo/v4rL7WUuCTyiIBo5NfUyuNQYeAzIMrq1F85Ryd99F3J7pcmspeAT3A9kN7o8MtP6UwvdynNkcTFWiPPQLLA+PO55C9GDh9n2k71oU8g==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=oD4us4lWXEemcaWVAZetQsAKHPmbGTZDDt9mvyShngopjfZFS/pcj2UfPRNvY0JNUtu5dHaVKjnU3oP8tO1fjLaMsynUOziPLJJpsSXkdgKEF04bY7IdDsmPXYWOiV53d7S7wsBiPJz0DuU5J2xnSjyIDBr2oaS8reNYrVbsyMnXQoWVpSkxr+PAGkDUhBzlaHg+1YTLLzf3HQ2IxX8jdOsaXKl5JJk4FPrEirK46j09zDaWp1Ai/bZRzfxB8PGnUaGZRBXE2L/Hsnh0I4fOaKKJkz3cxuUdZzbJiQPCaOcZ1g1acbgTP+GpZzq4sgkBhhvcTgiR0lZToJSjdRz8Ng==
  • Authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=suse.com;
  • Cc: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>, Roger Pau Monné <roger.pau@xxxxxxxxxx>, Wei Liu <wl@xxxxxxx>, xen-devel@xxxxxxxxxxxxxxxxxxxx
  • Delivery-date: Thu, 26 Oct 2023 12:37:52 +0000
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>

On 26.10.2023 14:35, Xenia Ragiadakou wrote:
> 
> 
> On 26/10/23 14:51, Jan Beulich wrote:
>> On 26.10.2023 11:46, Xenia Ragiadakou wrote:
>>> On 26/10/23 11:45, Jan Beulich wrote:
>>>> On 26.10.2023 10:34, Xenia Ragiadakou wrote:
>>>>> On 26/10/23 10:35, Jan Beulich wrote:
>>>>>> On 26.10.2023 08:45, Xenia Ragiadakou wrote:
>>>>>>> --- a/xen/arch/x86/hvm/dom0_build.c
>>>>>>> +++ b/xen/arch/x86/hvm/dom0_build.c
>>>>>>> @@ -518,7 +518,7 @@ static paddr_t __init find_memory(
>>>>>>>             if ( end <= kernel_start || start >= kernel_end )
>>>>>>>                 ; /* No overlap, nothing to do. */
>>>>>>>             /* Deal with the kernel already being loaded in the region. 
>>>>>>> */
>>>>>>> -        else if ( kernel_start - start > end - kernel_end )
>>>>>>> +        else if ( kernel_start + kernel_end > start + end )
>>>>>> What meaning has the sum of the start and end of either range? I can't
>>>>>> figure how comparing those two values will be generally correct / useful.
>>>>>> If the partial-overlap case needs handling in the first place, I think
>>>>>> new conditionals need adding (and the existing one needs constraining to
>>>>>> "kernel range fully contained") to use
>>>>>> - as before, the larger of the non-overlapping ranges at start and end
>>>>>>      if the kernel range is fully contained,
>>>>>> - the tail of the range when the overlap is at the start,
>>>>>> - the head of the range when the overlap is at the end.
>>>>> Yes it is not quite straight forward to understand and is based on the
>>>>> assumption that end > kernel_start and start < kernel_end, due to
>>>>> the first condition failing.
>>>>>
>>>>> Both cases:
>>>>> (start < kernel_start && end < kernel_end) and
>>>>> (kernel_start - start > end - kernel_end)
>>>>> fall into the condition ( kernel_start + kernel_end > start + end )
>>>>>
>>>>> And both the cases:
>>>>> (start > kernel_start && end > kernel_end) and
>>>>> (end - kernel_end > kernel_start - start)
>>>>> fall into the condition ( kernel_start + kernel_end < start + end )
>>>>>
>>>>> ... unless of course I miss a case
>>>> Well, mathematically (i.e. ignoring the potential for overflow) the
>>>> original expression and your replacement are identical anyway. But
>>>> overflow needs to be taken into consideration, and hence there is a
>>>> (theoretical only at this point) risk with the replacement expression
>>>> as well. As a result I still think that ...
>>>>
>>>>>> That said, in the "kernel range fully contained" case it may want
>>>>>> considering to use the tail range if it is large enough, rather than
>>>>>> the larger of the two ranges. In fact when switching to that model, we
>>>>>> ought to be able to get away with one less conditional, as then the
>>>>>> "kernel range fully contained" case doesn't need treating specially.
>>>> ... this alternative approach may want considering (provided we need
>>>> to make a change in the first place, which I continue to be
>>>> unconvinced of).
>>> Hmm, I see your point regarding the overflow.
>>> Given that start < kernel_end and end > kernel_start, this could
>>> be resolved by changing the above condition into:
>>> if ( kernel_end - start > end - kernel_start )
>>>
>>> Would that work for you?
>>
>> That would look quite a bit more natural, yes. But I don't think it covers
>> all cases: What if the E820 range is a proper sub-range of the kernel one?
>> If we consider kernel range crossing E820 region boundaries, we also need
>> to take that possibility into account, I think.
> 
> You are right, this case is not handled and can lead to either of the 
> issues mentioned in commit message.
> Maybe we should check whether end > start before proceeding with 
> checking the size.

It looks like it all boils down to the alternative I did sketch out.

Jan



 


Rackspace

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