Commit 6fc275da authored by Yu Liao's avatar Yu Liao
Browse files

cpu/hotplug: fix kabi breakage in enum cpuhp_state

hulk inclusion
category: bugfix
bugzilla: https://gitee.com/openeuler/kernel/issues/I8JEVI



--------------------------------

Commit baecdf2dbe73 ("hrtimers: Push pending hrtimers away from outgoing
CPU earlier") add a new step in enum cpuhp_state breaks kabi.

In order to fix the kabi breakage, we had to move the hrtimers:dying
step into smpcfd:dying and create a new function smpcfd_and_hrtimer_dying_cpu().

Signed-off-by: default avatarYu Liao <liaoyu15@huawei.com>
parent 1ff7bdda
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -154,7 +154,6 @@ enum cpuhp_state {
	CPUHP_AP_ARM_CORESIGHT_CTI_STARTING,
	CPUHP_AP_ARM64_ISNDEP_STARTING,
	CPUHP_AP_SMPCFD_DYING,
	CPUHP_AP_HRTIMERS_DYING,
	CPUHP_AP_X86_TBOOT_DYING,
	CPUHP_AP_ARM_CACHE_B15_RAC_DYING,
	CPUHP_AP_ONLINE,
+1 −1
Original line number Diff line number Diff line
@@ -545,7 +545,7 @@ int hrtimers_prepare_cpu(unsigned int cpu);
#ifdef CONFIG_HOTPLUG_CPU
int hrtimers_cpu_dying(unsigned int cpu);
#else
#define hrtimers_cpu_dying	NULL
static inline int hrtimers_cpu_dying(unsigned int cpu) { return 0; }
#endif

#endif
+1 −0
Original line number Diff line number Diff line
@@ -278,5 +278,6 @@ int smp_call_on_cpu(unsigned int cpu, int (*func)(void *), void *par,
int smpcfd_prepare_cpu(unsigned int cpu);
int smpcfd_dead_cpu(unsigned int cpu);
int smpcfd_dying_cpu(unsigned int cpu);
int smpcfd_and_hrtimer_dying_cpu(unsigned int cpu);

#endif /* __LINUX_SMP_H */
+13 −6
Original line number Diff line number Diff line
@@ -1676,17 +1676,24 @@ static struct cpuhp_step cpuhp_hp_states[] = {
		.startup.single		= NULL,
		.teardown.single	= rcutree_dying_cpu,
	},
	/*
	 * In order to fix the kabi breakage, we had to move the hrtimers:dying
	 * step into smpcfd:dying and create a new function smpcfd_and_hrtimer_dying_cpu().
	 * Please ensure that there are no other steps with teardown handler
	 * between smpcfd:dying and cpu:teardown.
	 */
	[CPUHP_AP_SMPCFD_DYING] = {
		.name			= "smpcfd:dying",
		.startup.single		= NULL,
		.teardown.single	= smpcfd_dying_cpu,
	},
	[CPUHP_AP_HRTIMERS_DYING] = {
		.name			= "hrtimers:dying",
		.startup.single		= NULL,
		.teardown.single	= hrtimers_cpu_dying,
		.teardown.single	= smpcfd_and_hrtimer_dying_cpu,
	},

	/*
	 * Attention: Please do not add steps between smpcfd:dying
	 * and ap:online. Please refer to the above for specific
	 * reasons.
	 */

	/* Entry state on starting. Interrupts enabled from here on. Transient
	 * state for synchronsization */
	[CPUHP_AP_ONLINE] = {
+8 −0
Original line number Diff line number Diff line
@@ -75,6 +75,14 @@ int smpcfd_dead_cpu(unsigned int cpu)
	return 0;
}

int smpcfd_and_hrtimer_dying_cpu(unsigned int cpu)
{
	hrtimers_cpu_dying(cpu);
	smpcfd_dying_cpu(cpu);

	return 0;
}

int smpcfd_dying_cpu(unsigned int cpu)
{
	/*