mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 02:01:24 +01:00
xen/arm: sci: Don't create a domain with unsatisfied user requests
On Arm we stay on the safe side and refuse to create a domain on user requests (e.g. via xl.cfg, DT options) that cannot be satisfied due to the feature not being compiled in. SCI fall through the crack and does not adhere to that i.e. a user request for SCI type other than NONE when CONFIG_SCMI_SMC (and thus CONFIG_ARM_SCI) is not set would be silently ignored. Fix it by not allowing anything else other than NONE if the feature is not enabled. Fixes:10e7473d60("xen/arm: scmi-smc: passthrough SCMI SMC to domain, single agent") Signed-off-by: Michal Orzel <michal.orzel@amd.com> Reviewed-by: Luca Fancellu <luca.fancellu@arm.com> Reviewed-by: Bertrand Marquis <bertrand.marquis@arm.com> (cherry picked from commitf7b9752dc8)
This commit is contained in:
1 parent
715bf77ce1
commit
483a3035fd
2 files changed
+14
-2
No files matched your search
@@ -287,8 +287,7 @@ static int __init domu_dt_sci_parse(struct dt_device_node *node,
|
||||
|
||||
d_cfg->arch.arm_sci_type = XEN_DOMCTL_CONFIG_ARM_SCI_NONE;
|
||||
|
||||
if ( !IS_ENABLED(CONFIG_ARM_SCI) ||
|
||||
!dt_property_read_bool(node, "xen,sci_type") )
|
||||
if ( !dt_property_read_bool(node, "xen,sci_type") )
|
||||
return 0;
|
||||
|
||||
ret = dt_property_read_string(node, "xen,sci_type", &sci_type);
|
||||
@@ -298,7 +297,15 @@ static int __init domu_dt_sci_parse(struct dt_device_node *node,
|
||||
if ( !strcmp(sci_type, "none") )
|
||||
d_cfg->arch.arm_sci_type = XEN_DOMCTL_CONFIG_ARM_SCI_NONE;
|
||||
else if ( !strcmp(sci_type, "scmi_smc") )
|
||||
{
|
||||
if ( !IS_ENABLED(CONFIG_SCMI_SMC) )
|
||||
{
|
||||
printk(XENLOG_ERR "xen,sci_type=scmi_smc requested, but CONFIG_SCMI_SMC not set\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
d_cfg->arch.arm_sci_type = XEN_DOMCTL_CONFIG_ARM_SCI_SCMI_SMC;
|
||||
}
|
||||
else
|
||||
{
|
||||
printk(XENLOG_ERR "xen,sci_type in not valid (%s) for domain %s\n",
|
||||
|
||||
@@ -148,6 +148,8 @@ int sci_dt_finalize(struct domain *d, void *fdt);
|
||||
int sci_assign_dt_device(struct domain *d, struct dt_device_node *dev);
|
||||
#else
|
||||
|
||||
#include <public/arch-arm.h>
|
||||
|
||||
static inline bool sci_domain_is_enabled(struct domain *d)
|
||||
{
|
||||
return false;
|
||||
@@ -162,6 +164,9 @@ static inline int sci_domain_init(struct domain *d,
|
||||
static inline int
|
||||
sci_domain_sanitise_config(struct xen_domctl_createdomain *config)
|
||||
{
|
||||
if ( config->arch.arm_sci_type != XEN_DOMCTL_CONFIG_ARM_SCI_NONE )
|
||||
return -EINVAL;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||