From: Stefano Stabellini <stefano.stabellini@xilinx.com>
Introduce a new "xen,enhanced" dom0less property to enable/disable PV
driver interfaces for dom0less guests. Currently only "enabled" and
"disabled" are supported property values (and empty). Leave the option
open to implement further possible values in the future (e.g.
"xenstore" to enable only xenstore.)
The configurable option is for domUs only. For dom0 we always set the
corresponding property in the Xen code to true (PV interfaces enabled.)
This patch only parses the property. Next patches will make use of it.
Signed-off-by: Stefano Stabellini <stefano.stabellini@xilinx.com>
Reviewed-by: Bertrand Marquis <bertrand.marquis@arm.com>
CC: Julien Grall <julien@xen.org>
CC: Volodymyr Babchuk <Volodymyr_Babchuk@epam.com>
CC: Bertrand Marquis <bertrand.marquis@arm.com>
---
Changes in v4:
- move xen,enhanced to the bottom of the list
- do not set kinfo.dom0less_enhanced for dom0
Changes in v3:
- improve commit message
Changes in v2:
- rename kinfo.enhanced to kinfo.dom0less_enhanced
- set kinfo.dom0less_enhanced to true for dom0
- handle -ENODATA in addition to -EILSEQ
---
docs/misc/arm/device-tree/booting.txt | 18 ++++++++++++++++++
xen/arch/arm/domain_build.c | 7 +++++++
xen/arch/arm/include/asm/kernel.h | 3 +++
3 files changed, 28 insertions(+)
diff --git a/docs/misc/arm/device-tree/booting.txt b/docs/misc/arm/device-tree/booting.txt
index a94125394e..92097c4969 100644
--- a/docs/misc/arm/device-tree/booting.txt
+++ b/docs/misc/arm/device-tree/booting.txt
@@ -188,6 +188,24 @@ with the following properties:
An empty property to request the memory of the domain to be
direct-map (guest physical address == physical address).
+- xen,enhanced
+
+ A string property. Possible property values are:
+
+ - "enabled" (or missing property value)
+ Xen PV interfaces, including grant-table and xenstore, will be
+ enabled for the VM.
+
+ - "disabled"
+ Xen PV interfaces are disabled.
+
+ If the xen,enhanced property is present with no value, it defaults
+ to "enabled". If the xen,enhanced property is not present, PV
+ interfaces are disabled.
+
+ In the future other possible property values might be added to
+ enable only selected interfaces.
+
Under the "xen,domain" compatible node, one or more sub-nodes are present
for the DomU kernel and ramdisk.
diff --git a/xen/arch/arm/domain_build.c b/xen/arch/arm/domain_build.c
index f22450b4b7..016f56a99f 100644
--- a/xen/arch/arm/domain_build.c
+++ b/xen/arch/arm/domain_build.c
@@ -3154,6 +3154,7 @@ static int __init construct_domU(struct domain *d,
const struct dt_device_node *node)
{
struct kernel_info kinfo = {};
+ const char *dom0less_enhanced;
int rc;
u64 mem;
@@ -3169,6 +3170,12 @@ static int __init construct_domU(struct domain *d,
kinfo.vpl011 = dt_property_read_bool(node, "vpl011");
+ rc = dt_property_read_string(node, "xen,enhanced", &dom0less_enhanced);
+ if ( rc == -EILSEQ ||
+ rc == -ENODATA ||
+ (rc == 0 && !strcmp(dom0less_enhanced, "enabled")) )
+ kinfo.dom0less_enhanced = true;
+
if ( vcpu_create(d, 0) == NULL )
return -ENOMEM;
diff --git a/xen/arch/arm/include/asm/kernel.h b/xen/arch/arm/include/asm/kernel.h
index 874aa108a7..c4dc039b54 100644
--- a/xen/arch/arm/include/asm/kernel.h
+++ b/xen/arch/arm/include/asm/kernel.h
@@ -36,6 +36,9 @@ struct kernel_info {
/* Enable pl011 emulation */
bool vpl011;
+ /* Enable PV drivers */
+ bool dom0less_enhanced;
+
/* GIC phandle */
uint32_t phandle_gic;
--
2.25.1