[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v5 06/12] xen/common: add dom0 xen command line argument for Arm
Hi Luca, > On 12 Apr 2023, at 11:49, Luca Fancellu <Luca.Fancellu@xxxxxxx> wrote: > > 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 <luca.fancellu@xxxxxxx> > Reviewed-by: Jan Beulich <jbeulich@xxxxxxxx> Reviewed-by: Bertrand Marquis <bertrand.marquis@xxxxxxx> Cheers Bertrand > --- > Changes from v4: > - return EINVAL in Arm implementation of parse_arch_dom0_param, > shorten variable name in the funtion from str_begin, str_end to > s, e. Removed variable rc from x86 parse_arch_dom0_param > implementation. (Jan) > - Add R-By Jan > Changes from v3: > - new patch > --- > xen/arch/arm/domain_build.c | 5 ++++ > xen/arch/x86/dom0_build.c | 48 ++++++++++++++----------------------- > xen/common/domain.c | 23 ++++++++++++++++++ > xen/include/xen/domain.h | 1 + > 4 files changed, 47 insertions(+), 30 deletions(-) > > diff --git a/xen/arch/arm/domain_build.c b/xen/arch/arm/domain_build.c > index 4f9d4f9d8867..eeb4662f0eee 100644 > --- a/xen/arch/arm/domain_build.c > +++ b/xen/arch/arm/domain_build.c > @@ -59,6 +59,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)) > diff --git a/xen/arch/x86/dom0_build.c b/xen/arch/x86/dom0_build.c > index 79234f18ff01..9f5300a3efbb 100644 > --- a/xen/arch/x86/dom0_build.c > +++ b/xen/arch/x86/dom0_build.c > @@ -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); > diff --git a/xen/common/domain.c b/xen/common/domain.c > index 626debbae095..7779ba088675 100644 > --- a/xen/common/domain.c > +++ b/xen/common/domain.c > @@ -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. > diff --git a/xen/include/xen/domain.h b/xen/include/xen/domain.h > index 26f9c4f6dd5b..1df8f933d076 100644 > --- a/xen/include/xen/domain.h > +++ b/xen/include/xen/domain.h > @@ -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 *); > -- > 2.34.1 >
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |