Skip to content

Commit

Permalink
xen/common: add dom0 xen command line argument for Arm
Browse files Browse the repository at this point in the history
Currently x86 defines a Xen command line argument dom0=<list> where
there can be specified dom0 controlling sub-options, to use it also
on Arm, move the code that loops through the list of arguments from
x86 to the common code and from there, call architecture specific
functions to handle the comma separated sub-options.

No functional changes are intended.

Signed-off-by: Luca Fancellu <[email protected]>
Reviewed-by: Jan Beulich <[email protected]>
Reviewed-by: Bertrand Marquis <[email protected]>
  • Loading branch information
luca-fancellu authored and Julien Grall committed Jun 7, 2023
1 parent ac5855d commit f2095a5
Show file tree
Hide file tree
Showing 4 changed files with 47 additions and 30 deletions.
5 changes: 5 additions & 0 deletions xen/arch/arm/domain_build.c
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,11 @@ static int __init parse_dom0_mem(const char *s)
}
custom_param("dom0_mem", parse_dom0_mem);

int __init parse_arch_dom0_param(const char *s, const char *e)
{
return -EINVAL;
}

/* Override macros from asm/page.h to make them work with mfn_t */
#undef virt_to_mfn
#define virt_to_mfn(va) _mfn(__virt_to_mfn(va))
Expand Down
48 changes: 18 additions & 30 deletions xen/arch/x86/dom0_build.c
Original file line number Diff line number Diff line change
Expand Up @@ -266,42 +266,30 @@ bool __initdata opt_dom0_pvh = !IS_ENABLED(CONFIG_PV);
bool __initdata opt_dom0_verbose = IS_ENABLED(CONFIG_VERBOSE_DEBUG);
bool __initdata opt_dom0_msr_relaxed;

static int __init cf_check parse_dom0_param(const char *s)
int __init parse_arch_dom0_param(const char *s, const char *e)
{
const char *ss;
int rc = 0;
int val;

do {
int val;

ss = strchr(s, ',');
if ( !ss )
ss = strchr(s, '\0');

if ( IS_ENABLED(CONFIG_PV) && !cmdline_strcmp(s, "pv") )
opt_dom0_pvh = false;
else if ( IS_ENABLED(CONFIG_HVM) && !cmdline_strcmp(s, "pvh") )
opt_dom0_pvh = true;
if ( IS_ENABLED(CONFIG_PV) && !cmdline_strcmp(s, "pv") )
opt_dom0_pvh = false;
else if ( IS_ENABLED(CONFIG_HVM) && !cmdline_strcmp(s, "pvh") )
opt_dom0_pvh = true;
#ifdef CONFIG_SHADOW_PAGING
else if ( (val = parse_boolean("shadow", s, ss)) >= 0 )
opt_dom0_shadow = val;
else if ( (val = parse_boolean("shadow", s, e)) >= 0 )
opt_dom0_shadow = val;
#endif
else if ( (val = parse_boolean("verbose", s, ss)) >= 0 )
opt_dom0_verbose = val;
else if ( IS_ENABLED(CONFIG_PV) &&
(val = parse_boolean("cpuid-faulting", s, ss)) >= 0 )
opt_dom0_cpuid_faulting = val;
else if ( (val = parse_boolean("msr-relaxed", s, ss)) >= 0 )
opt_dom0_msr_relaxed = val;
else
rc = -EINVAL;

s = ss + 1;
} while ( *ss );
else if ( (val = parse_boolean("verbose", s, e)) >= 0 )
opt_dom0_verbose = val;
else if ( IS_ENABLED(CONFIG_PV) &&
(val = parse_boolean("cpuid-faulting", s, e)) >= 0 )
opt_dom0_cpuid_faulting = val;
else if ( (val = parse_boolean("msr-relaxed", s, e)) >= 0 )
opt_dom0_msr_relaxed = val;
else
return -EINVAL;

return rc;
return 0;
}
custom_param("dom0", parse_dom0_param);

static char __initdata opt_dom0_ioports_disable[200] = "";
string_param("dom0_ioports_disable", opt_dom0_ioports_disable);
Expand Down
23 changes: 23 additions & 0 deletions xen/common/domain.c
Original file line number Diff line number Diff line change
Expand Up @@ -364,6 +364,29 @@ static int __init cf_check parse_extra_guest_irqs(const char *s)
}
custom_param("extra_guest_irqs", parse_extra_guest_irqs);

static int __init cf_check parse_dom0_param(const char *s)
{
const char *ss;
int rc = 0;

do {
int ret;

ss = strchr(s, ',');
if ( !ss )
ss = strchr(s, '\0');

ret = parse_arch_dom0_param(s, ss);
if ( ret && !rc )
rc = ret;

s = ss + 1;
} while ( *ss );

return rc;
}
custom_param("dom0", parse_dom0_param);

/*
* Release resources held by a domain. There may or may not be live
* references to the domain, and it may or may not be fully constructed.
Expand Down
1 change: 1 addition & 0 deletions xen/include/xen/domain.h
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ typedef union {
struct vcpu *vcpu_create(struct domain *d, unsigned int vcpu_id);

unsigned int dom0_max_vcpus(void);
int parse_arch_dom0_param(const char *s, const char *e);
struct vcpu *alloc_dom0_vcpu0(struct domain *dom0);

int vcpu_reset(struct vcpu *);
Expand Down

0 comments on commit f2095a5

Please sign in to comment.