diff mbox series

[ImageBuilder,2/2] uboot-script-gen: Enable direct mapping of statically allocated memory

Message ID 20220619124316.378365-2-burzalodowa@gmail.com (mailing list archive)
State New, archived
Headers show
Series [ImageBuilder,1/2] uboot-script-gen: Skip dom0 instead of exiting if DOM0_KERNEL is not set | expand

Commit Message

Xenia Ragiadakou June 19, 2022, 12:43 p.m. UTC
Direct mapping for dom0less VMs is disabled by default in XEN and can be
enabled through the 'direct-map' property.
Add a new config parameter DOMU_DIRECT_MAP to be able to enable or disable
direct mapping, i.e set to 1 for enabling and to 0 for disabling.
This parameter is optional. Direct mapping is enabled by default for all
dom0less VMs with static allocation.

The property 'direct-map' is a boolean property. Boolean properties are true
if present and false if missing.
Add a new data_type 'bool' in function dt_set() to setup a boolean property.

Signed-off-by: Xenia Ragiadakou <burzalodowa@gmail.com>
---
 README.md                |  4 ++++
 scripts/uboot-script-gen | 18 ++++++++++++++++++
 2 files changed, 22 insertions(+)

Comments

Stefano Stabellini June 22, 2022, 12:12 a.m. UTC | #1
On Sun, 19 Jun 2022, Xenia Ragiadakou wrote:
> Direct mapping for dom0less VMs is disabled by default in XEN and can be
> enabled through the 'direct-map' property.
> Add a new config parameter DOMU_DIRECT_MAP to be able to enable or disable
> direct mapping, i.e set to 1 for enabling and to 0 for disabling.
> This parameter is optional. Direct mapping is enabled by default for all
> dom0less VMs with static allocation.
> 
> The property 'direct-map' is a boolean property. Boolean properties are true
> if present and false if missing.
> Add a new data_type 'bool' in function dt_set() to setup a boolean property.
> 
> Signed-off-by: Xenia Ragiadakou <burzalodowa@gmail.com>

Reviewed-by: Stefano Stabellini <sstabellini@kernel.org>


> ---
>  README.md                |  4 ++++
>  scripts/uboot-script-gen | 18 ++++++++++++++++++
>  2 files changed, 22 insertions(+)
> 
> diff --git a/README.md b/README.md
> index c52e4b9..17ff206 100644
> --- a/README.md
> +++ b/README.md
> @@ -168,6 +168,10 @@ Where:
>    if specified, indicates the host physical address regions
>    [baseaddr, baseaddr + size) to be reserved to the VM for static allocation.
>  
> +- DOMU_DIRECT_MAP[number] can be set to 1 or 0.
> +  If set to 1, the VM is direct mapped. The default is 1.
> +  This is only applicable when DOMU_STATIC_MEM is specified.
> +
>  - 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 bdc8a6b..e85c6ec 100755
> --- a/scripts/uboot-script-gen
> +++ b/scripts/uboot-script-gen
> @@ -27,6 +27,7 @@ function dt_mknode()
>  #   hex
>  #   str
>  #   str_a
> +#   bool
>  function dt_set()
>  {
>      local path=$1
> @@ -49,6 +50,12 @@ function dt_set()
>                  array+=" \"$element\""
>              done
>              echo "fdt set $path $var $array" >> $UBOOT_SOURCE
> +        elif test $data_type = "bool"
> +        then
> +            if test "$data" -eq 1
> +            then
> +                echo "fdt set $path $var" >> $UBOOT_SOURCE
> +            fi
>          else
>              echo "fdt set $path $var \"$data\"" >> $UBOOT_SOURCE
>          fi
> @@ -65,6 +72,12 @@ function dt_set()
>          elif test $data_type = "str_a"
>          then
>              fdtput $FDTEDIT -p -t s $path $var $data
> +        elif test $data_type = "bool"
> +        then
> +            if test "$data" -eq 1
> +            then
> +                fdtput $FDTEDIT -p $path $var
> +            fi
>          else
>              fdtput $FDTEDIT -p -t s $path $var "$data"
>          fi
> @@ -206,6 +219,7 @@ function xen_device_tree_editing()
>          if test "${DOMU_STATIC_MEM[$i]}"
>          then
>              add_device_tree_static_mem "/chosen/domU$i" "${DOMU_STATIC_MEM[$i]}"
> +            dt_set "/chosen/domU$i" "direct-map" "bool" "${DOMU_DIRECT_MAP[$i]}"
>          fi
>          dt_set "/chosen/domU$i" "vpl011" "hex" "0x1"
>          if test "$DOM0_KERNEL"
> @@ -470,6 +484,10 @@ function xen_config()
>          then
>              DOMU_CMD[$i]="console=ttyAMA0"
>          fi
> +        if test -z "${DOMU_DIRECT_MAP[$i]}"
> +        then
> +             DOMU_DIRECT_MAP[$i]=1
> +        fi
>          i=$(( $i + 1 ))
>      done
>  }
> -- 
> 2.34.1
>
Ayan Kumar Halder June 23, 2022, 10:02 a.m. UTC | #2
(Resending mail, as the previous delivery failed)

On 21/06/2022 12:34, Ayan Kumar Halder wrote:
> Hi,
>
> On 19/06/2022 13:43, Xenia Ragiadakou wrote:
>> Direct mapping for dom0less VMs is disabled by default in XEN and can be
>> enabled through the 'direct-map' property.
>> Add a new config parameter DOMU_DIRECT_MAP to be able to enable or 
>> disable
>> direct mapping, i.e set to 1 for enabling and to 0 for disabling.
>> This parameter is optional. Direct mapping is enabled by default for all
>> dom0less VMs with static allocation.
>>
>> The property 'direct-map' is a boolean property. Boolean properties 
>> are true
>> if present and false if missing.
>> Add a new data_type 'bool' in function dt_set() to setup a boolean 
>> property.
>>
>> Signed-off-by: Xenia Ragiadakou <burzalodowa@gmail.com>
>> ---
>>   README.md                |  4 ++++
>>   scripts/uboot-script-gen | 18 ++++++++++++++++++
>>   2 files changed, 22 insertions(+)
>>
>> diff --git a/README.md b/README.md
>> index c52e4b9..17ff206 100644
>> --- a/README.md
>> +++ b/README.md
>> @@ -168,6 +168,10 @@ Where:
>>     if specified, indicates the host physical address regions
>>     [baseaddr, baseaddr + size) to be reserved to the VM for static 
>> allocation.
>>   +- DOMU_DIRECT_MAP[number] can be set to 1 or 0.
>> +  If set to 1, the VM is direct mapped. The default is 1.
>> +  This is only applicable when DOMU_STATIC_MEM is specified.
>
> Can't we just use $DOMU_STATIC_MEM to set "direct-map" in dts ?
>
> Is there a valid use-case for static allocation without direct mapping 
> ? Sorry, it is not very clear to me.
>
> - Ayan
>
>> +
>>   - 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 bdc8a6b..e85c6ec 100755
>> --- a/scripts/uboot-script-gen
>> +++ b/scripts/uboot-script-gen
>> @@ -27,6 +27,7 @@ function dt_mknode()
>>   #   hex
>>   #   str
>>   #   str_a
>> +#   bool
>>   function dt_set()
>>   {
>>       local path=$1
>> @@ -49,6 +50,12 @@ function dt_set()
>>                   array+=" \"$element\""
>>               done
>>               echo "fdt set $path $var $array" >> $UBOOT_SOURCE
>> +        elif test $data_type = "bool"
>> +        then
>> +            if test "$data" -eq 1
>> +            then
>> +                echo "fdt set $path $var" >> $UBOOT_SOURCE
>> +            fi
>>           else
>>               echo "fdt set $path $var \"$data\"" >> $UBOOT_SOURCE
>>           fi
>> @@ -65,6 +72,12 @@ function dt_set()
>>           elif test $data_type = "str_a"
>>           then
>>               fdtput $FDTEDIT -p -t s $path $var $data
>> +        elif test $data_type = "bool"
>> +        then
>> +            if test "$data" -eq 1
>> +            then
>> +                fdtput $FDTEDIT -p $path $var
>> +            fi
>>           else
>>               fdtput $FDTEDIT -p -t s $path $var "$data"
>>           fi
>> @@ -206,6 +219,7 @@ function xen_device_tree_editing()
>>           if test "${DOMU_STATIC_MEM[$i]}"
>>           then
>>               add_device_tree_static_mem "/chosen/domU$i" 
>> "${DOMU_STATIC_MEM[$i]}"
>> +            dt_set "/chosen/domU$i" "direct-map" "bool" 
>> "${DOMU_DIRECT_MAP[$i]}"
>>           fi
>>           dt_set "/chosen/domU$i" "vpl011" "hex" "0x1"
>>           if test "$DOM0_KERNEL"
>> @@ -470,6 +484,10 @@ function xen_config()
>>           then
>>               DOMU_CMD[$i]="console=ttyAMA0"
>>           fi
>> +        if test -z "${DOMU_DIRECT_MAP[$i]}"
>> +        then
>> +             DOMU_DIRECT_MAP[$i]=1
>> +        fi
>>           i=$(( $i + 1 ))
>>       done
>>   }
Xenia Ragiadakou June 23, 2022, 12:05 p.m. UTC | #3
Hi Ayan!

On 6/23/22 13:02, Ayan Kumar Halder wrote:
> (Resending mail, as the previous delivery failed)
>
> On 21/06/2022 12:34, Ayan Kumar Halder wrote:
>> Hi,
>>
>> On 19/06/2022 13:43, Xenia Ragiadakou wrote:
>>> Direct mapping for dom0less VMs is disabled by default in XEN and 
>>> can be
>>> enabled through the 'direct-map' property.
>>> Add a new config parameter DOMU_DIRECT_MAP to be able to enable or 
>>> disable
>>> direct mapping, i.e set to 1 for enabling and to 0 for disabling.
>>> This parameter is optional. Direct mapping is enabled by default for 
>>> all
>>> dom0less VMs with static allocation.
>>>
>>> The property 'direct-map' is a boolean property. Boolean properties 
>>> are true
>>> if present and false if missing.
>>> Add a new data_type 'bool' in function dt_set() to setup a boolean 
>>> property.
>>>
>>> Signed-off-by: Xenia Ragiadakou <burzalodowa@gmail.com>
>>> ---
>>>   README.md                |  4 ++++
>>>   scripts/uboot-script-gen | 18 ++++++++++++++++++
>>>   2 files changed, 22 insertions(+)
>>>
>>> diff --git a/README.md b/README.md
>>> index c52e4b9..17ff206 100644
>>> --- a/README.md
>>> +++ b/README.md
>>> @@ -168,6 +168,10 @@ Where:
>>>     if specified, indicates the host physical address regions
>>>     [baseaddr, baseaddr + size) to be reserved to the VM for static 
>>> allocation.
>>>   +- DOMU_DIRECT_MAP[number] can be set to 1 or 0.
>>> +  If set to 1, the VM is direct mapped. The default is 1.
>>> +  This is only applicable when DOMU_STATIC_MEM is specified.
>>
>> Can't we just use $DOMU_STATIC_MEM to set "direct-map" in dts ?
>>
>> Is there a valid use-case for static allocation without direct 
>> mapping ? Sorry, it is not very clear to me.
>>
Thank you for taking the time to review the patch!

I agree with you that static allocation without direct mapping is not a 
common configuration, that's why, in the script, direct mapping is 
enabled by default.

My reasoning was that, since direct mapping is not enabled by default in 
XEN for all domUs with static allocation but instead requires the 
'direct-map' property to be present in the domU dt node, then such a 
configuration is still valid.
I thought that with this parameter it is much easier to setup (and test) 
both configurations.


Xenia
Ayan Kumar Halder June 23, 2022, 1:59 p.m. UTC | #4
On 23/06/2022 13:05, xenia wrote:
> Hi Ayan!
Hi Xenia,
>
> On 6/23/22 13:02, Ayan Kumar Halder wrote:
>> (Resending mail, as the previous delivery failed)
>>
>> On 21/06/2022 12:34, Ayan Kumar Halder wrote:
>>> Hi,
>>>
>>> On 19/06/2022 13:43, Xenia Ragiadakou wrote:
>>>> Direct mapping for dom0less VMs is disabled by default in XEN and 
>>>> can be
>>>> enabled through the 'direct-map' property.
>>>> Add a new config parameter DOMU_DIRECT_MAP to be able to enable or 
>>>> disable
>>>> direct mapping, i.e set to 1 for enabling and to 0 for disabling.
>>>> This parameter is optional. Direct mapping is enabled by default 
>>>> for all
>>>> dom0less VMs with static allocation.
>>>>
>>>> The property 'direct-map' is a boolean property. Boolean properties 
>>>> are true
>>>> if present and false if missing.
>>>> Add a new data_type 'bool' in function dt_set() to setup a boolean 
>>>> property.
>>>>
>>>> Signed-off-by: Xenia Ragiadakou <burzalodowa@gmail.com>
>>>> ---
>>>>   README.md                |  4 ++++
>>>>   scripts/uboot-script-gen | 18 ++++++++++++++++++
>>>>   2 files changed, 22 insertions(+)
>>>>
>>>> diff --git a/README.md b/README.md
>>>> index c52e4b9..17ff206 100644
>>>> --- a/README.md
>>>> +++ b/README.md
>>>> @@ -168,6 +168,10 @@ Where:
>>>>     if specified, indicates the host physical address regions
>>>>     [baseaddr, baseaddr + size) to be reserved to the VM for static 
>>>> allocation.
>>>>   +- DOMU_DIRECT_MAP[number] can be set to 1 or 0.
>>>> +  If set to 1, the VM is direct mapped. The default is 1.
>>>> +  This is only applicable when DOMU_STATIC_MEM is specified.
>>>
>>> Can't we just use $DOMU_STATIC_MEM to set "direct-map" in dts ?
>>>
>>> Is there a valid use-case for static allocation without direct 
>>> mapping ? Sorry, it is not very clear to me.
>>>
> Thank you for taking the time to review the patch!
>
> I agree with you that static allocation without direct mapping is not 
> a common configuration, that's why, in the script, direct mapping is 
> enabled by default.
>
> My reasoning was that, since direct mapping is not enabled by default 
> in XEN for all domUs with static allocation but instead requires the 
> 'direct-map' property to be present in the domU dt node, then such a 
> configuration is still valid.
> I thought that with this parameter it is much easier to setup (and 
> test) both configurations.

Thanks for the explanation. This makes sense to me. :)

In this case, can we remove the below snippet from your patch.

+        if test -z "${DOMU_DIRECT_MAP[$i]}"
+        then
+ DOMU_DIRECT_MAP[$i]=1
+        fi

The reason being if the user wants to set 'direct-map' prop in dts, then 
the user can specify it in the config.
Else, (by default) the direct-map will be set to false. This is inline 
with XEN's behavior as you described above.

- Ayan

- Ayan

>
>
> Xenia
>
diff mbox series

Patch

diff --git a/README.md b/README.md
index c52e4b9..17ff206 100644
--- a/README.md
+++ b/README.md
@@ -168,6 +168,10 @@  Where:
   if specified, indicates the host physical address regions
   [baseaddr, baseaddr + size) to be reserved to the VM for static allocation.
 
+- DOMU_DIRECT_MAP[number] can be set to 1 or 0.
+  If set to 1, the VM is direct mapped. The default is 1.
+  This is only applicable when DOMU_STATIC_MEM is specified.
+
 - 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 bdc8a6b..e85c6ec 100755
--- a/scripts/uboot-script-gen
+++ b/scripts/uboot-script-gen
@@ -27,6 +27,7 @@  function dt_mknode()
 #   hex
 #   str
 #   str_a
+#   bool
 function dt_set()
 {
     local path=$1
@@ -49,6 +50,12 @@  function dt_set()
                 array+=" \"$element\""
             done
             echo "fdt set $path $var $array" >> $UBOOT_SOURCE
+        elif test $data_type = "bool"
+        then
+            if test "$data" -eq 1
+            then
+                echo "fdt set $path $var" >> $UBOOT_SOURCE
+            fi
         else
             echo "fdt set $path $var \"$data\"" >> $UBOOT_SOURCE
         fi
@@ -65,6 +72,12 @@  function dt_set()
         elif test $data_type = "str_a"
         then
             fdtput $FDTEDIT -p -t s $path $var $data
+        elif test $data_type = "bool"
+        then
+            if test "$data" -eq 1
+            then
+                fdtput $FDTEDIT -p $path $var
+            fi
         else
             fdtput $FDTEDIT -p -t s $path $var "$data"
         fi
@@ -206,6 +219,7 @@  function xen_device_tree_editing()
         if test "${DOMU_STATIC_MEM[$i]}"
         then
             add_device_tree_static_mem "/chosen/domU$i" "${DOMU_STATIC_MEM[$i]}"
+            dt_set "/chosen/domU$i" "direct-map" "bool" "${DOMU_DIRECT_MAP[$i]}"
         fi
         dt_set "/chosen/domU$i" "vpl011" "hex" "0x1"
         if test "$DOM0_KERNEL"
@@ -470,6 +484,10 @@  function xen_config()
         then
             DOMU_CMD[$i]="console=ttyAMA0"
         fi
+        if test -z "${DOMU_DIRECT_MAP[$i]}"
+        then
+             DOMU_DIRECT_MAP[$i]=1
+        fi
         i=$(( $i + 1 ))
     done
 }