[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH 1/3] x86/pv: Options to disable and/or compile out 32bit PV support
On 20/04/2020 15:05, Jan Beulich wrote: > On 17.04.2020 17:50, Andrew Cooper wrote: >> This is the start of some performance and security-hardening improvements, >> based on the fact that 32bit PV guests are few and far between these days. >> >> Ring1 is full or architectural corner cases, such as counting as supervisor > ... full of ... > >> --- a/docs/misc/xen-command-line.pandoc >> +++ b/docs/misc/xen-command-line.pandoc >> @@ -1694,7 +1694,17 @@ The following resources are available: >> CDP, one COS will corespond two CBMs other than one with CAT, due to the >> sum of CBMs is fixed, that means actual `cos_max` in use will >> automatically >> reduce to half when CDP is enabled. >> - >> + >> +### pv >> + = List of [ 32=<bool> ] >> + >> + Applicability: x86 >> + >> +Controls for aspects of PV guest support. >> + >> +* The `32` boolean controls whether 32bit PV guests can be created. It >> + defaults to `true`, and is ignored when `CONFIG_PV32` is compiled out. > Rather than ignoring in the way you do, how about ... > >> --- a/xen/arch/x86/pv/domain.c >> +++ b/xen/arch/x86/pv/domain.c >> @@ -16,6 +16,39 @@ >> #include <asm/pv/domain.h> >> #include <asm/shadow.h> >> >> +#ifdef CONFIG_PV32 >> +int8_t __read_mostly opt_pv32 = -1; >> +#endif >> + >> +static int parse_pv(const char *s) >> +{ >> + const char *ss; >> + int val, rc = 0; >> + >> + do { >> + ss = strchr(s, ','); >> + if ( !ss ) >> + ss = strchr(s, '\0'); >> + >> + if ( (val = parse_boolean("32", s, ss)) >= 0 ) >> + { >> +#ifdef CONFIG_PV32 >> + opt_pv32 = val; >> +#else >> + printk(XENLOG_INFO >> + "CONFIG_PV32 disabled - ignoring 'pv=32' setting\n"); >> +#endif >> + } > ... moving the #ifdef ahead of the if(), and the #endif here (may > want converting to "else if" with a placeholder if(0) for this > purpose), with the separate printk() dropped? In this specific case, it would be even more awkward as there is no use of val outside of the ifdef. > I'm in particular > concerned that we may gain a large number of such printk()s over > time, if we added them in such cases. The printk() was a bit of an afterthought, but deliberately avoiding the -EINVAL path was specifically not. In the case that the user tries to use `pv=no-32` without CONFIG_PV32, they should see something other than (XEN) parameter "pv=no-32" unknown! I don't think overloading the return value is a clever move, because then every parse function has to take care of ensuring that -EOPNOTSUPP (or ENODEV?) never clobbers -EINVAL. We could have a generic helper which looks like: static inline void ignored_param(const char *cfg, const char *name, const char *s, const char *ss) { printk(XENLOG_INFO "%s disabled - ignoring '%s=%*.s' setting\n", cfg, name, s, (int)(ss - s)); } which at least would keep all the users consistent. > See parse_iommu_param() for > how I'd prefer things to look like in the long run. I'm aware of that, just as you are aware of my specific dislike for the ifndefs, which make the logic opaque and hard to follow. ~Andrew
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |