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

Re: [PATCH] xen/device-tree: Allow exact match for overlapping regions


  • To: Julien Grall <julien@xxxxxxx>, Luca Fancellu <luca.fancellu@xxxxxxx>, <xen-devel@xxxxxxxxxxxxxxxxxxxx>
  • From: Michal Orzel <michal.orzel@xxxxxxx>
  • Date: Wed, 13 Nov 2024 17:56:17 +0100
  • Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=xen.org smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none (0)
  • Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=jzwFEEcm+JKqaqUNoLGC42+3zmQ28sPUCt15psim9BQ=; b=fOY5VMnwERC5oTnVhJ147M4hxY0tynSyYEwn184ohhXerJtk91naeqhnh48hWi7tyQ+S9EFDsZOgBlHdwJQAu+9L5klF7aAPsgBNABfwLYozdnmAXQ5mTNmB8JFXrJiIDpt1KjS8FJt2OEUWqQVeEyzuC0M7CtyMLDwc+u/PR6XMfnn4MeTksjRyOfpBxxZFgtk7qV3Rj9dEjyjhnQH2A3noFsKB/HdGueUGpxq6zCSqVdMLLmq65+iQzjQ2R+be4YHS0TfE++APW78yG0edcu6Ak3Td5hmEzk14PPh8VYgfKN9jcLfSo3sY3PWdbBDQMY+oNmwC6N2W9S0Qes0e2w==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Hjf9/3eAVc/G0Z39vGpRaT6RtcbW+jNDTnc0f1i/Cy7C74hhAnyUZa1qBCt3s0o2KW2Dj5Gd/ZMQVAwxBgi+8fhde1LT3fTuV7MOi6rJwcpxRuiz1Wfnxn5vtDt413kJ35l6FWHuBLGMPue6jviMzEdcgnBhbWcKoUpb9KYbebOgDju2A1eeeKk7ee66Vre6Skip3Th1kCevxBKUIk2Ou0DXr7GF3MIqcvB6tDc3n3mE+yswd7m8oLugCyMhUV5SPAIglJog5X3Y50KPRgOTLjPVN5IG8vJs5BCEgVjNFjUTeIg5RMsWotpIFM0qPhY4uXYW7evZU25rSFaGqNxRvw==
  • Cc: Stefano Stabellini <sstabellini@xxxxxxxxxx>, Bertrand Marquis <bertrand.marquis@xxxxxxx>, Volodymyr Babchuk <Volodymyr_Babchuk@xxxxxxxx>, Shawn Anastasio <sanastasio@xxxxxxxxxxxxxxxxxxxxx>, Grygorii Strashko <grygorii_strashko@xxxxxxxx>
  • Delivery-date: Wed, 13 Nov 2024 16:56:46 +0000
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>


On 13/11/2024 17:41, Julien Grall wrote:
> 
> 
> Hi,
> 
> On 13/11/2024 15:40, Michal Orzel wrote:
>>
>>
>> On 13/11/2024 15:40, Julien Grall wrote:
>>>
>>>
>>> Hi,
>>>
>>> On 13/11/2024 14:19, Michal Orzel wrote:
>>>>
>>>>
>>>> On 13/11/2024 14:50, Julien Grall wrote:
>>>>>
>>>>>
>>>>> Hi Michal,
>>>>>
>>>>> On 06/11/2024 15:07, Michal Orzel wrote:
>>>>>>
>>>>>>
>>>>>> On 06/11/2024 14:41, Luca Fancellu wrote:
>>>>>>>
>>>>>>>
>>>>>>> There are some cases where the device tree exposes a memory range
>>>>>>> in both /memreserve/ and reserved-memory node, in this case the
>>>>>>> current code will stop Xen to boot since it will find that the
>>>>>>> latter range is clashing with the already recorded /memreserve/
>>>>>>> ranges.
>>>>>>>
>>>>>>> Furthermore, u-boot lists boot modules ranges, such as ramdisk,
>>>>>>> in the /memreserve/ part and even in this case this will prevent
>>>>>>> Xen to boot since it will see that the module memory range that
>>>>>>> it is going to add in 'add_boot_module' clashes with a /memreserve/
>>>>>>> range.
>>>>>>>
>>>>>>> When Xen populate the data structure that tracks the memory ranges,
>>>>>>> it also adds a memory type described in 'enum membank_type', so
>>>>>>> in order to fix this behavior, allow the 
>>>>>>> 'check_reserved_regions_overlap'
>>>>>>> function to check for exact memory range match given a specific memory
>>>>>>> type; allowing reserved-memory node ranges and boot modules to have an
>>>>>>> exact match with ranges from /memreserve/.
>>>>>>>
>>>>>>> While there, set a type for the memory recorded during ACPI boot.
>>>>>>>
>>>>>>> Fixes: 53dc37829c31 ("xen/arm: Add DT reserve map regions to 
>>>>>>> bootinfo.reserved_mem")
>>>>>>> Reported-by: Shawn Anastasio <sanastasio@xxxxxxxxxxxxxxxxxxxxx>
>>>>>>> Reported-by: Grygorii Strashko <grygorii_strashko@xxxxxxxx>
>>>>>>> Signed-off-by: Luca Fancellu <luca.fancellu@xxxxxxx>
>>>>>>> ---
>>>>>>> I tested this patch adding the same range in a /memreserve/ entry and
>>>>>>> /reserved-memory node, and by letting u-boot pass a ramdisk.
>>>>>>> I've also tested that a configuration running static shared memory 
>>>>>>> still works
>>>>>>> fine.
>>>>>>> ---
>>>>>> So we have 2 separate issues. I don't particularly like the concept of 
>>>>>> introducing MEMBANK_NONE
>>>>>> and the changes below look a bit too much for me, given that for boot 
>>>>>> modules we can only have
>>>>>> /memreserve/ matching initrd.
>>>>>
>>>>> How so? Is this an observation or part of a specification?
>>>> Not sure what specification you would want to see.
>>>
>>> Anything that you bake your observation. My concern with observation is ...
>>>
>>>    It's all part of U-Boot and Linux behavior that is not documented
>>> (except for code comments).
>>>> My statement is based on the U-Boot and Linux behavior. U-Boot part only 
>>>> present for initrd:
>>>> https://github.com/u-boot/u-boot/blob/master/boot/fdt_support.c#L249
>>>
>>> ... a user is not forced to use U-boot. So this is not a good reason to
>> I thought that this behavior is solely down to u-boot playing tricks with 
>> memreserve.
> 
> Sure we noticed that U-boot is doing some we didn't expect. But this
> really doesn't mean there are not other interesting behavior happening.
> 
>>
>>> rely on it. If Linux starts to rely on it, then it is probably a better
>>> argument, but first I would need to see the code. Can you paste a link?
>> Not sure how I would do that given that it is all scattered.
> 
> There are no requirements to be all scattered.
> 
>  > But if it means sth, here is kexec code> to create fdt. It is clear
> they do the same trick as u-boot.
>> https://github.com/torvalds/linux/blob/master/drivers/of/kexec.c#L355
> 
> Yet this doesn't provide any information why this only has to be an
> exact region... It only tells me the current behavior.
> 
>>
>>>
>>>>
>>>> For things that Xen can be interested in, only region for ramdisk for dom0 
>>>> can match the /memreserve/ region.
>>>> Providing a generic solution (like Luca did) would want providing an 
>>>> example of sth else that can match which I'm not aware of.
>>>
>>> I would argue this is the other way around. If we are not certain that
>>> /memreserve/ will not be used for any other boot module, then we should
>>> have a generic solution. Otherwise, we will end up with similar weird
>>> issue in the future.
>> We have 3 possible modules for bootloader->kernel workflow: kernel, dtb and 
>> ramdisk. The first 2 are not described in DT so I'm not sure
>> what are your examples of bootmodules for which you want kernel know about 
>> memory reservation other than ramdisk.
> 
> The DTB is not described but the kernel is. We also have XSM modules.
> All of which could in theory be in memreserve if for some reasons the
> bootloader wanted to preserve the modules for future use (think
> Live-Update)...
> 
> Anyway, to be honest, I don't understand why you are pushing back at a
> more generic solution... Yes this may be what we just notice today, but
> I haven't seen any evidence that it never happen.
> 
> So I would rather go with the generic solution.
My reluctance comes from the fact that it's difficult for me to later justify 
(if someone asks) a code like that
in the port we maintain because I can't answer the question about the rationale 
of other modules.
All you wrote is just a theory. Neither you nor anyone seen a code where a 
bootloader sets up /memreserve/
for sth else than initrd. That's it. I understand that generic solution solves 
the possible future problems
(the current u-boot behavior dates back to 2014 and nothing new happened since 
that time) but at least I find
it more difficult to reason about. I can see you might not see it the same way 
I do, therefore I am fine with
the generic solution.

~Michal



 


Rackspace

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