|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [ImageBuilder] [PATCH v2] uboot-script-gen: Add DOMU_STATIC_MEM
On Wed, 15 Jun 2022, Xenia Ragiadakou wrote:
> Add a new config parameter to configure a dom0less VM with static allocation.
> DOMU_STATIC_MEM[number]="baseaddr1 size1 ... baseaddrN sizeN"
> The parameter specifies the host physical address regions to be statically
> allocated to the VM. Each region is defined by its start address and size.
>
> For instance,
> DOMU_STATIC_MEM[0]="0x30000000 0x10000000 0x50000000 0x20000000"
> indicates that the host memory regions [0x30000000, 0x40000000) and
> [0x50000000, 0x70000000) are statically allocated to the first dom0less VM.
>
> Signed-off-by: Xenia Ragiadakou <burzalodowa@xxxxxxxxx>
Hi Xenia, thanks for the patch!
It looks fine as is, only two minor code style issues (tabs instead of
spaces for indentation.)
I think this would work. However, when static-mem is specified also the
total memory for the guest needs to match. So for instance:
#xen,static-mem-address-cells = <0x1>;
#xen,static-mem-size-cells = <0x1>;
xen,static-mem = <0x30000000 0x20000000>;
In this case memory has to be:
memory = <0x0 0x80000>;
memory is in kilobytes, so 0x20000000/1024=0x80000.
In ImageBuilder "memory" is normally set by the DOMU_MEM variable,
although that is in megabytes.
I think it would make sense to automatically calculate "memory" DOMU_MEM
based on the sizes passed via DOMU_STATIC_MEM when DOMU_STATIC_MEM is
specified: summing all the sizes together and dividing by 1024.
That could be done either with something like
if test "${DOMU_STATIC_MEM[$i]}"
then
local memory=[calculate memory]
dt_set "/chosen/domU$i" "memory" "int" "0 $memory"
add_device_tree_static_mem "/chosen/domU$i" "${DOMU_STATIC_MEM[$i]}"
Or it could be done by changing DOMU_MEM to be in kilobytes and simply
setting DOMU_MEM based on the DOMU_STATIC_MEM values when
DOMU_STATIC_MEM is specified.
Would you be OK to add that to this patch? If not, that's OK. This patch
is also good to have as is.
> ---
>
> Notes:
> v2: in add_device_tree_static_mem(), replace i with val because variable i
> is already in use as an index
>
> README.md | 4 ++++
> scripts/uboot-script-gen | 20 ++++++++++++++++++++
> 2 files changed, 24 insertions(+)
>
> diff --git a/README.md b/README.md
> index 8ce13f0..876e46d 100644
> --- a/README.md
> +++ b/README.md
> @@ -154,6 +154,10 @@ Where:
> automatically at boot as dom0-less guest. It can still be created
> later from Dom0.
>
> +- DOMU_STATIC_MEM[number]="baseaddr1 size1 ... baseaddrN sizeN"
> + if specified, indicates the host physical address regions
> + [baseaddr, baseaddr + size) to be reserved to the VM for static allocation.
> +
> - LINUX is optional but specifies the Linux kernel for when Xen is NOT
> used. To enable this set any LINUX\_\* variables and do NOT set the
> XEN variable.
> diff --git a/scripts/uboot-script-gen b/scripts/uboot-script-gen
> index 0adf523..3a5f720 100755
> --- a/scripts/uboot-script-gen
> +++ b/scripts/uboot-script-gen
> @@ -108,6 +108,22 @@ function add_device_tree_passthrough()
> dt_set "$path/module$addr" "reg" "hex" "0x0 $addr 0x0 $(printf "0x%x"
> $size)"
> }
>
> +function add_device_tree_static_mem()
> +{
> + local path=$1
> + local regions=$2
> +
> + dt_set "$path" "#xen,static-mem-address-cells" "hex" "0x2"
> + dt_set "$path" "#xen,static-mem-size-cells" "hex" "0x2"
> +
> + for val in ${regions[@]}
> + do
> + cells+=("$(printf "0x%x 0x%x" $(($val >> 32)) $(($val & ((1 << 32) -
> 1))))")
> + done
> +
> + dt_set "$path" "xen,static-mem" "hex" "${cells[*]}"
> +}
> +
> function xen_device_tree_editing()
> {
> dt_set "/chosen" "#address-cells" "hex" "0x2"
> @@ -143,6 +159,10 @@ function xen_device_tree_editing()
> dt_set "/chosen/domU$i" "#size-cells" "hex" "0x2"
> dt_set "/chosen/domU$i" "memory" "int" "0 ${DOMU_MEM[$i]}"
> dt_set "/chosen/domU$i" "cpus" "int" "${DOMU_VCPUS[$i]}"
> + if test "${DOMU_STATIC_MEM[$i]}"
> + then
> + add_device_tree_static_mem "/chosen/domU$i" "${DOMU_STATIC_MEM[$i]}"
> + fi
> dt_set "/chosen/domU$i" "vpl011" "hex" "0x1"
> add_device_tree_kernel "/chosen/domU$i" ${domU_kernel_addr[$i]}
> ${domU_kernel_size[$i]} "${DOMU_CMD[$i]}"
> if test "${domU_ramdisk_addr[$i]}"
> --
> 2.34.1
>
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |