Commit 77ba5038 authored by Dai Xin's avatar Dai Xin Committed by guzitao
Browse files

sw64: split out the idle loop in idle.c

Sunway inclusion
category: performance
bugzilla: https://gitee.com/openeuler/kernel/issues/I5XTK7



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

Signed-off-by: default avatarDai Xin <daixin@wxiat.com>
Reviewed-by: default avatarHe Sheng <hesheng@wxiat.com>
Signed-off-by: default avatarGu Zitao <guzitao@wxiat.com>
parent eaadeb46
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
/* SPDX-License-Identifier: GPL-2.0 */
#ifndef _ASM_SW64_IDLE_H
#define _ASM_SW64_IDLE_H

extern void arch_cpu_idle(void);

#endif /* _ASM_SW64_IDLE_H  */
+1 −1
Original line number Diff line number Diff line
@@ -17,7 +17,7 @@ obj-y := entry.o fpu.o traps.o process.o sys_sw64.o irq.o \
	    irq_sw64.o signal.o setup.o ptrace.o time.o \
	    systbls.o dup_print.o tc.o timer.o \
	    insn.o early_init.o topology.o cacheinfo.o \
	    vdso.o vdso/ hmcall.o stacktrace.o
	    vdso.o vdso/ hmcall.o stacktrace.o idle.o

obj-$(CONFIG_ACPI) += acpi.o
obj-$(CONFIG_SMP)	+= smp.o
+37 −0
Original line number Diff line number Diff line
// SPDX-License-Identifier: GPL-2.0
/*
 * sw64 idle loop support.
 *
 */
#include <linux/cpu.h>
#include <linux/irqflags.h>
#include <asm/cpu.h>
#include <asm/idle.h>

#ifdef CONFIG_HOTPLUG_CPU
void arch_cpu_idle_dead(void)
{
	play_dead();
}
#endif

void cpu_idle(void)
{
	int i;

	local_irq_enable();
	cpu_relax();

	if (is_in_guest())
		hcall(HCALL_HALT, 0, 0, 0);
	else {
		for (i = 0; i < 16; i++)
			asm("nop");
		asm("halt");
	}
}

void arch_cpu_idle(void)
{
	cpu_idle();
}
+0 −23
Original line number Diff line number Diff line
@@ -26,29 +26,6 @@ struct halt_info {
	char *restart_cmd;
};

#ifdef CONFIG_HOTPLUG_CPU
void arch_cpu_idle_dead(void)
{
	play_dead();
}
#endif

void arch_cpu_idle(void)
{
	int i;

	local_irq_enable();
	cpu_relax();

	if (is_in_guest())
		hcall(HCALL_HALT, 0, 0, 0);
	else {
		for (i = 0; i < 16; i++)
			asm("nop");
		asm("halt");
	}
}

static void common_shutdown_1(void *generic_ptr)
{
	struct halt_info *how = (struct halt_info *)generic_ptr;