aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArjan Koers <0h61vkll2ly8@xutrox.com>2010-08-02 23:35:28 +0200
committerAvi Kivity <avi@redhat.com>2010-10-24 10:53:06 +0200
commit19b6a85b78a5d4b466c537bdbf0eaecae5e2c4e2 (patch)
treedc4098988a3a8691e3c6f9f6c5a8cedf53218cb7
parentKVM: x86: TSC catchup mode (diff)
downloadlinux-dev-19b6a85b78a5d4b466c537bdbf0eaecae5e2c4e2.tar.xz
linux-dev-19b6a85b78a5d4b466c537bdbf0eaecae5e2c4e2.zip
KVM guest: Move a printk that's using the clock before it's ready
Fix a hang during SMP kernel boot on KVM that showed up after commit 489fb490dbf8dab0249ad82b56688ae3842a79e8 (2.6.35) and 59aab522154a2f17b25335b63c1cf68a51fb6ae0 (2.6.34.1). The problem only occurs when CONFIG_PRINTK_TIME is set. KVM-Stable-Tag. Signed-off-by: Arjan Koers <0h61vkll2ly8@xutrox.com> Signed-off-by: Avi Kivity <avi@redhat.com>
-rw-r--r--arch/x86/kernel/kvmclock.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/arch/x86/kernel/kvmclock.c b/arch/x86/kernel/kvmclock.c
index eb9b76c716c2..ca43ce31a19c 100644
--- a/arch/x86/kernel/kvmclock.c
+++ b/arch/x86/kernel/kvmclock.c
@@ -128,13 +128,15 @@ static struct clocksource kvm_clock = {
static int kvm_register_clock(char *txt)
{
int cpu = smp_processor_id();
- int low, high;
+ int low, high, ret;
+
low = (int)__pa(&per_cpu(hv_clock, cpu)) | 1;
high = ((u64)__pa(&per_cpu(hv_clock, cpu)) >> 32);
+ ret = native_write_msr_safe(msr_kvm_system_time, low, high);
printk(KERN_INFO "kvm-clock: cpu %d, msr %x:%x, %s\n",
cpu, high, low, txt);
- return native_write_msr_safe(msr_kvm_system_time, low, high);
+ return ret;
}
#ifdef CONFIG_X86_LOCAL_APIC