Re: [Query] Unable to probe reserved-memory carveouts in DomU with Xen
"Orzel, Michal" <[email protected]>
| Newsgroups | org.xenproject.lists.xen-devel |
|---|---|
| Message-ID | <[email protected]> |
On 24-Jul-26 11:26, Beleswar Prasad Padhi wrote:
>
> On 24/07/26 14:28, Orzel, Michal wrote:
>>
>> On 24-Jul-26 10:32, Padhi, Beleswar wrote:
>>> Hello,
>>>
>>> Thanks for the response! I see, this would solve the cma problem. But
>>> there are usecases
>>> when we want to use the reserved-memory node; one example is the
>>> firmware for
>>> remote processors. In that case, how do we passthrough reserved-memory
>>> nodes to
>>> DomUs?
>> I'm afraid we don't have a solution for that at the moment but this is a
>> limitation we are aware of.
>
>
> No problem, I can look into implementing it. Thanks for the
> heads up!
>
>> So far, when it comes to /reserved-memory we only
>> have a static shared memory feature allowing to set up a shmem communication
>> region between domUs, where the range is exposed to domains in DT following this
>> spec:
>> https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/Documentation/devicetree/bindings/reserved-memory/xen,shared-memory.txt
>
>
> I see, is there any working example or documentation on
> how to use these regions? DT/dom1.cfg configuration?
This is a dom0less feature (for boot time predefined domains) documented here:
https://xenbits.xenproject.org/gitweb/?p=xen.git;a=blob;f=docs/misc/arm/device-tree/booting.txt
For libxl, we don't have a nice way to do that in upstream but you can check our
Xilinx docs:
https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/1718583312/Xen+on+ARM+Share+memory+between+guests
~Michal
>
> Thanks a lot,
> Beleswar
>
>>
>> Cheers,
>> Michal
>>
>>> Example:
>>> 60
>>> 61 mcu_r52_0_fw_memory_region: memory@a1000000 {
>>> 62 compatible = "shared-dma-pool";
>>> 63 reg = <0x00 0xa1000000 0x00 0x100000>;
>>> 64 no-map;
>>> 65 };
>>>
>>> Thanks,
>>> Beleswar
>>>
>>> On 7/24/2026 1:52 PM, Orzel, Michal wrote:
>>>> Hi,
>>>>
>>>> I'm afraid this will not work. The reason is that Xen only copies nodes from the
>>>> passthrough DTB to final DTB that are placed under `/passthrough` node and
>>>> `/aliases`. /reserved-memory needs to be under root node `/`, therefore it will
>>>> not be copied. However, it seems like you are not using CMA node specifying a
>>>> fixed memory region (using `reg`) but size. In that case you should be able to
>>>> achieve the same using `cma=128M` kernel cmdline parameter.
>>>>
>>>> ~Michal
>>>>
>>>> On 24-Jul-26 08:55, Beleswar Prasad Padhi wrote:
>>>>> Hi all,
>>>>>
>>>>> I have been trying to use reserved-memory carveouts in DomU, but failing constantly.
>>>>>
>>>>> This is the log from Dom1 boot:
>>>>>
>>>>> [ 0.000000] earlycon: uart8250 at MMIO32 0x0000000053914000 (options '115200n
>>>>> 8')
>>>>> [ 0.000000] printk: legacy bootconsole [uart8250] enabled
>>>>> [ 0.000000] Xen 4.21 support found
>>>>> [ 0.000000] efi: UEFI not found.
>>>>> *[ 0.000000] OF: reserved mem: Reserved memory: No reserved-memory node in the DT*
>>>>> [ 0.000000] Zone ranges:
>>>>> [ 0.000000] DMA [mem 0x0000000040000000-0x0000000051ffffff]
>>>>> [ 0.000000] DMA32 empty
>>>>> [ 0.000000] Normal empty
>>>>> [ 0.000000] Movable zone start for each node
>>>>> [ 0.000000] Early memory node ranges
>>>>> [ 0.000000] node 0: [mem 0x0000000040000000-0x0000000051ffffff]
>>>>> [ 0.000000] Initmem setup node 0 [mem 0x0000000040000000-0x0000000051ffffff]
>>>>> [ 0.000000] On node 0, zone DMA: 24576 pages in unavailable ranges
>>>>> [ 0.000000] cma: Reserved 32 MiB at 0x000000004f800000
>>>>>
>>>>> This is my passthrough.dts:
>>>>>
>>>>> 1 /*
>>>>> 2 * This is a partial DT for passthrough node to DomU.
>>>>> 3 */
>>>>> 4 #include <dt-bindings/interrupt-controller/irq.h>
>>>>> 5 #include <dt-bindings/interrupt-controller/arm-gic.h>
>>>>> 6
>>>>> 7 /dts-v1/;
>>>>> 8
>>>>> 9 / {
>>>>> 10 #address-cells = <2>;
>>>>> 11 #size-cells = <1>;
>>>>> 12
>>>>> ~ 13 reserved-memory {
>>>>> ~ 14 #address-cells = <2>;
>>>>> ~ 15 #size-cells = <2>;
>>>>> + 16 ranges;
>>>>> + 17
>>>>> + 18 /* CMA region for framebuffer allocation */
>>>>> + 19 linux,cma {
>>>>> + 20 compatible = "shared-dma-pool";
>>>>> + 21 reusable;
>>>>> + 22 size = <0x00 0x08000000>; /* 128MB CMA pool */
>>>>> + 23 linux,cma-default;
>>>>> + 24 };
>>>>> 25 };
>>>>> 26
>>>>> 27 passthrough {
>>>>> 28 compatible = "simple-bus";
>>>>> 29 ranges;
>>>>> 30 #address-cells = <2>;
>>>>> 31 #size-cells = <1>;
>>>>> 32
>>>>> 33 misc_clk: misc_clk {
>>>>> 34 #clock-cells = <0>;
>>>>> 35 clock-frequency = <100000000>;
>>>>> 36 compatible = "fixed-clock";
>>>>> 37 };
>>>>>
>>>>> 73 uart@53914000 {
>>>>> 74 compatible = "ns16550a";
>>>>> 75 reg = <0x00 0x53914000 0x1000>;
>>>>> ~_ 76 interrupts = <0 302 4>;
>>>>> 77 reg-shift = <2>;
>>>>> 78 reg-io-width = <4>;
>>>>> 79 clocks = <&misc_clk>;
>>>>> 80 oversampling-rate = <16>;
>>>>> 81 programmable-char-timeout = <4>;
>>>>> 82 status = "okay";
>>>>> 83 xen,path = "/bus@100000/bus@22000000/uart@53914000";
>>>>> 84 xen,reg = <0x0 0x53914000 0x1000 0x0 0x53914000>;
>>>>> 85 xen,force-assign-without-iommu;
>>>>> 86 };
>>>>> 87 };
>>>>>
>>>>> 88 };
>>>>>
>>>>>
>>>>> And this is my dom1.cfg file:
>>>>>
>>>>> 1 name = "dom1"
>>>>> 2 memory = 256
>>>>> 3 vcpus = 4
>>>>> 4
>>>>> 5 kernel = "/boot/xen-dom1/Image"
>>>>> 6 extra = "console=ttyS0,115200n8 earlycon=uart8250,mmio32,0x53914000,115200n8 loglevel=8 root=/dev/xvda rw"
>>>>> 7
>>>>> 8 # UART1 (0x53914000) passthrough to Dom1 console
>>>>> 9 iomem = ["0x53914,1"]
>>>>> 11 irqs = [ 334 ]
>>>>> 12 dtdev = [ "/bus@100000/bus@22000000/uart@53914000"]
>>>>> 13 vif = ["script=vif-route"]
>>>>> 14 device_tree = "/boot/xen-dom1/passthrough.dtb"
>>>>> 15 #
>>>>> 17 disk = ["phy:/dev/vda2,xvda,rw"]
>>>>>
>>>>>
>>>>> Am I doing something wrong? Any help or debugging leads would be really appreciated...
>>>>>
>>>>> Thank you,
>>>>> Beleswar
>>>>>
>>>>>