@@ -10,7 +10,7 @@ config X86
select ALTERNATIVE_CALL
select ARCH_MAP_DOMAIN_PAGE
select ARCH_SUPPORTS_INT128
- select CORE_PARKING
+ imply CORE_PARKING
select HAS_ALTERNATIVE
select HAS_COMPAT
select HAS_CPUFREQ
@@ -727,12 +727,17 @@ ret_t do_platform_op(
case XEN_CORE_PARKING_SET:
idle_nums = min_t(uint32_t,
op->u.core_parking.idle_nums, num_present_cpus() - 1);
- ret = continue_hypercall_on_cpu(
- 0, core_parking_helper, (void *)(unsigned long)idle_nums);
+ if ( CONFIG_NR_CPUS > 1 )
+ ret = continue_hypercall_on_cpu(
+ 0, core_parking_helper,
+ (void *)(unsigned long)idle_nums);
+ else if ( idle_nums )
+ ret = -EINVAL;
break;
case XEN_CORE_PARKING_GET:
- op->u.core_parking.idle_nums = get_cur_idle_nums();
+ op->u.core_parking.idle_nums = CONFIG_NR_CPUS > 1
+ ? get_cur_idle_nums() : 0;
ret = __copy_field_to_guest(u_xenpf_op, op, u.core_parking) ?
-EFAULT : 0;
break;
@@ -152,6 +152,10 @@ long arch_do_sysctl(
long (*fn)(void *);
void *hcpu;
+ if ( CONFIG_NR_CPUS <= 1 )
+ /* Mimic behavior of the functions otherwise invoked. */
+ return op != XEN_SYSCTL_CPU_HOTPLUG_OFFLINE ? 0 : -EINVAL;
+
switch ( op )
{
case XEN_SYSCTL_CPU_HOTPLUG_ONLINE:
@@ -10,6 +10,7 @@ config COMPAT
config CORE_PARKING
bool
+ depends on NR_CPUS > 1
config GRANT_TABLE
bool "Grant table support" if EXPERT
Gcc12 takes issue with core_parking_remove()'s for ( ; i < cur_idle_nums; ++i ) core_parking_cpunum[i] = core_parking_cpunum[i + 1]; complaining that the right hand side array access is past the bounds of 1. Clearly the compiler can't know that cur_idle_nums can only ever be zero in this case (as the sole CPU cannot be parked). Arrange for core_parking.c's contents to not be needed altogether, and then disable its building when NR_CPUS == 1. Signed-off-by: Jan Beulich <jbeulich@suse.com> --- v3: Use "imply" and "depends on" in Kconfig. Adjust the arch_do_sysctl() change. v2: Disable building of core_parking.c altogether.