提交 ca3f1017 编写于 作者: G Gleb Natapov 提交者: Avi Kivity

KVM paravirt: Move kvm_smp_prepare_boot_cpu() from kvmclock.c to kvm.c.

Async PF also needs to hook into smp_prepare_boot_cpu so move the hook
into generic code.
Acked-by: NRik van Riel <riel@redhat.com>
Signed-off-by: NGleb Natapov <gleb@redhat.com>
Signed-off-by: NMarcelo Tosatti <mtosatti@redhat.com>
上级 49c7754c
...@@ -65,6 +65,7 @@ struct kvm_mmu_op_release_pt { ...@@ -65,6 +65,7 @@ struct kvm_mmu_op_release_pt {
#include <asm/processor.h> #include <asm/processor.h>
extern void kvmclock_init(void); extern void kvmclock_init(void);
extern int kvm_register_clock(char *txt);
/* This instruction is vmcall. On non-VT architectures, it will generate a /* This instruction is vmcall. On non-VT architectures, it will generate a
......
...@@ -231,10 +231,21 @@ static void __init paravirt_ops_setup(void) ...@@ -231,10 +231,21 @@ static void __init paravirt_ops_setup(void)
#endif #endif
} }
#ifdef CONFIG_SMP
static void __init kvm_smp_prepare_boot_cpu(void)
{
WARN_ON(kvm_register_clock("primary cpu clock"));
native_smp_prepare_boot_cpu();
}
#endif
void __init kvm_guest_init(void) void __init kvm_guest_init(void)
{ {
if (!kvm_para_available()) if (!kvm_para_available())
return; return;
paravirt_ops_setup(); paravirt_ops_setup();
#ifdef CONFIG_SMP
smp_ops.smp_prepare_boot_cpu = kvm_smp_prepare_boot_cpu;
#endif
} }
...@@ -125,7 +125,7 @@ static struct clocksource kvm_clock = { ...@@ -125,7 +125,7 @@ static struct clocksource kvm_clock = {
.flags = CLOCK_SOURCE_IS_CONTINUOUS, .flags = CLOCK_SOURCE_IS_CONTINUOUS,
}; };
static int kvm_register_clock(char *txt) int kvm_register_clock(char *txt)
{ {
int cpu = smp_processor_id(); int cpu = smp_processor_id();
int low, high, ret; int low, high, ret;
...@@ -152,14 +152,6 @@ static void __cpuinit kvm_setup_secondary_clock(void) ...@@ -152,14 +152,6 @@ static void __cpuinit kvm_setup_secondary_clock(void)
} }
#endif #endif
#ifdef CONFIG_SMP
static void __init kvm_smp_prepare_boot_cpu(void)
{
WARN_ON(kvm_register_clock("primary cpu clock"));
native_smp_prepare_boot_cpu();
}
#endif
/* /*
* After the clock is registered, the host will keep writing to the * After the clock is registered, the host will keep writing to the
* registered memory location. If the guest happens to shutdown, this memory * registered memory location. If the guest happens to shutdown, this memory
...@@ -205,9 +197,6 @@ void __init kvmclock_init(void) ...@@ -205,9 +197,6 @@ void __init kvmclock_init(void)
#ifdef CONFIG_X86_LOCAL_APIC #ifdef CONFIG_X86_LOCAL_APIC
x86_cpuinit.setup_percpu_clockev = x86_cpuinit.setup_percpu_clockev =
kvm_setup_secondary_clock; kvm_setup_secondary_clock;
#endif
#ifdef CONFIG_SMP
smp_ops.smp_prepare_boot_cpu = kvm_smp_prepare_boot_cpu;
#endif #endif
machine_ops.shutdown = kvm_shutdown; machine_ops.shutdown = kvm_shutdown;
#ifdef CONFIG_KEXEC #ifdef CONFIG_KEXEC
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册