Unverified Commit 7b1fa0ba authored by openeuler-ci-bot's avatar openeuler-ci-bot Committed by Gitee
Browse files

!3598 arm64: add config switch and kernel parameter for cpu0 hotplug

Merge Pull Request from: @ci-robot 
 
PR sync from: Zheng Zengkai <zhengzengkai@huawei.com>
https://mailweb.openeuler.org/hyperkitty/list/kernel@openeuler.org/message/WZRTN7AFXQLOPGO3YTLBNKIURSTQSEO3/ 
Some features depend on cpu0. Cpu0 offline may cause some problems or
malfunctions.
Known dependency may be:
MegaRAID Tri-Mode SAS3508 may block the reboot process after offline CPU0.

Add config switch and kernel parameter for CPU0 hotplug to avoid these issues
for arm64 platform.

Zheng Zengkai (2):
  arm64: Add config switch and kernel parameter for CPU0 hotplug
  config: disable config ARM64_BOOTPARAM_HOTPLUG_CPU0 by default


-- 
2.20.1
 
https://gitee.com/openeuler/kernel/issues/I8RJPO 
 
Link:https://gitee.com/openeuler/kernel/pulls/3598

 

Reviewed-by: default avatarZhang Jianhua <chris.zjh@huawei.com>
Reviewed-by: default avatarXie XiuQi <xiexiuqi@huawei.com>
Reviewed-by: default avatarLiu Chao <liuchao173@huawei.com>
Signed-off-by: default avatarXie XiuQi <xiexiuqi@huawei.com>
parents cf025825 8e3b67df
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -3974,6 +3974,14 @@
			parameter, xsave area per process might occupy more
			memory on xsaves enabled systems.

	arm64_cpu0_hotplug [ARM64] Turn on arm64_cpu0_hotpluggable when
			CONFIG_ARM64_BOOTPARAM_HOTPLUG_CPU0 is off.
			Some features depend on CPU0. Known dependency is:
			MegaRAID Tri-Mode SAS3508 may block the reboot process
			after offline CPU0.
			If the dependencies are under your control, you can
			turn on arm64_cpu0_hotplug.

	nps_mtm_hs_ctr=	[KNL,ARC]
			This parameter sets the maximum duration, in
			cycles, each HW thread of the CTOP can run
+28 −0
Original line number Diff line number Diff line
@@ -1469,6 +1469,34 @@ config HOTPLUG_CPU
	  Say Y here to experiment with turning CPUs off and on.  CPUs
	  can be controlled through /sys/devices/system/cpu.

config ARM64_BOOTPARAM_HOTPLUG_CPU0
	bool "Set default setting of arm64_cpu0_hotpluggable"
	default n
	depends on HOTPLUG_CPU
	help
	  Set whether default state of arm64_cpu0_hotpluggable is on or off.

	  Say Y here to set arm64_cpu0_hotpluggable on by default. If this
	  switch is turned on, there is no need to give arm64_cpu0_hotplug
	  kernel parameter and arm64_cpu0_hotpluggable is on by default.

	  Please note: there may be some CPU0 dependencies if you want
	  to enable the CPU0 hotplug feature either by this switch or by
	  arm64_cpu0_hotplug kernel parameter.

	  For example:
	  We found the following issue related to CPU0 dependency:
	  1. echo 0 > /sys/devices/system/cpu/cpu0/online
	  2. reboot
	  MegaRAID Tri-Mode SAS3508 may block the reboot process.

	  Please make sure the dependencies are under your control before
	  you enable this feature.

	  Say N if you don't want to enable CPU0 hotplug feature by default.
	  You still can set arm64_cpu0_hotpluggable on at boot by kernel
	  parameter arm64_cpu0_hotplug.

# Common NUMA Features
config NUMA
	bool "NUMA Memory Allocation and Scheduler Support"
+1 −0
Original line number Diff line number Diff line
@@ -431,6 +431,7 @@ CONFIG_SCHED_CLUSTER=y
CONFIG_SCHED_SMT=y
CONFIG_NR_CPUS=4096
CONFIG_HOTPLUG_CPU=y
# CONFIG_ARM64_BOOTPARAM_HOTPLUG_CPU0 is not set
CONFIG_NUMA=y
CONFIG_NODES_SHIFT=7
# CONFIG_HZ_100 is not set
+19 −2
Original line number Diff line number Diff line
@@ -57,6 +57,19 @@
static int num_standard_resources;
static struct resource *standard_resources;

#ifdef CONFIG_ARM64_BOOTPARAM_HOTPLUG_CPU0
static int arm64_cpu0_hotpluggable = 1;
#else
static int arm64_cpu0_hotpluggable;
static int __init arm64_enable_cpu0_hotplug(char *str)
{
	arm64_cpu0_hotpluggable = 1;
	return 1;
}

__setup("arm64_cpu0_hotplug", arm64_enable_cpu0_hotplug);
#endif

phys_addr_t __fdt_pointer __initdata;
u64 mmu_enabled_at_boot __initdata;

@@ -396,8 +409,12 @@ static inline bool cpu_can_disable(unsigned int cpu)
#ifdef CONFIG_HOTPLUG_CPU
	const struct cpu_operations *ops = get_cpu_ops(cpu);

	if (ops && ops->cpu_can_disable)
	if (ops && ops->cpu_can_disable) {
		if (cpu == 0)
			return ops->cpu_can_disable(0) && arm64_cpu0_hotpluggable;
		else
			return ops->cpu_can_disable(cpu);
	}
#endif
	return false;
}