All of lore.kernel.org
 help / color / mirror / Atom feed
From: Arjan Koers <0h61vkll2ly8@xutrox.com>
To: Zachary Amsden <zamsden@redhat.com>
Cc: Glauber Costa <glommer@redhat.com>,
	kvm@vger.kernel.org, Avi Kivity <avi@redhat.com>,
	Andre Przywara <andre.przywara@amd.com>
Subject: Re: 2.6.35-rc1 regression with pvclock and smp guests
Date: Mon, 02 Aug 2010 23:35:28 +0200	[thread overview]
Message-ID: <4C573A20.6030001@xutrox.com> (raw)
In-Reply-To: <4C5729F6.2050605@redhat.com>

[-- Attachment #1: Type: text/plain, Size: 3613 bytes --]

On 2010-08-02 22:26, Zachary Amsden wrote:
> On 08/02/2010 04:43 AM, Glauber Costa wrote:
>> On Sat, Jul 31, 2010 at 01:55:10PM -1000, Zachary Amsden wrote:
>>   
>>> On 07/31/2010 06:36 AM, Arjan Koers wrote:
>>>     
>>>> On 2010-07-31 13:53, Arjan Koers wrote:
>>>>       
>>>>> The kernel boots successfully when CONFIG_PRINTK_TIME is not set.
>>>>>
>>>>>          
>>>> The problem occurs when this message is printed:
>>>>
>>>> [    0.016000] kvm-clock: cpu 1, msr 0:1511c01, secondary cpu clock
>>>>
>>>> When I disable that printk, the kernel boots with
>>>> CONFIG_PRINTK_TIME=y
>>>>
>>>> --- a/arch/x86/kernel/kvmclock.c
>>>> +++ b/arch/x86/kernel/kvmclock.c
>>>> @@ -131,8 +131,8 @@ static int kvm_register_clock(char *txt)
>>>>       int low, high;
>>>>       low = (int)__pa(&per_cpu(hv_clock, cpu)) | 1;
>>>>       high = ((u64)__pa(&per_cpu(hv_clock, cpu))>>   32);
>>>> -    printk(KERN_INFO "kvm-clock: cpu %d, msr %x:%x, %s\n",
>>>> -           cpu, high, low, txt);
>>>> +    /*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);
>>>>   }
>>>>
>>>> So the problem appears to be that the clock of the second CPU
>>>> is used too soon (or that clock setup should finish earlier).
>>>>        
>>> That's almost hilarious.  The printk from setting up the kvm clock
>>> is invoking the kvm clock before it is setup.
>>>
>>> There's no reason other printks couldn't do the same thing, however.
>>> I think it's safest to keep an initialized flag and check for it
>>> before attempting to return a meaningful value.
>>>      
>> I was on vacations, just got back.
>>
>> I think it is safe to just patch our own use of it. Before that, all
>> other
>> printks will be handled by the main cpu anyway, since it'll be the
>> only one active
>> at the moment. The only possible offenders for this are us, and the
>> cpu initialization
>> code, which is already fragile in multiple ways anyway.
>>
>> A flag would only make things more complicated and dirty
>>    
> Can we just do this?


Sorry, the patch doesn't help. See line 68 in my debug log:
65: ffff880001411c00    1b68905d7 156558001892 6e10a    1b6c0631e       375d47       13c5ce  15655813de60
66: ffff880001411c00    1b68905d7 156558001892 6e10a    1b6c0653b       375f64       13c68f  15655813df21
67: ffff880001411c00    1b68905d7 156558001892 6e10a    1b6c06746       37616f       13c74a  15655813dfdc
68: ffff880001511c00    1967ac192 15654c8d826a 63c6c 3bf58bf0ea18 3bf3f5762886 15695466a1e5  2acea0f4244f
69: ffff880001411c00    1b6f3fbda 156558264b1e 6e10e    1b6f424aa         28d0          e93  1565582659b1
70: ffff880001411c00    1b6f3fbda 156558264b1e 6e10e    1b6f4a1e0         a606         3b4b  156558268669
71: ffff880001411c00    1b6f3fbda 156558264b1e 6e10e    1b6f4ba63         be89         440b  156558268f29
72: ffff880001411c00    1b6f3fbda 156558264b1e 6e10e    1b6f4d8e7         dd0d         4ef1  156558269a0f
73: ffff880001511c00 3bf58bf16356 15655825e74b 40496 3bf58bf4d52c        371d6        13aef  15655827223a
74: ffff880001511c00 3bf58bf16356 15655825e74b 40496 3bf58bf4ebec        38896        1430f  156558272a5a

I don't think that pvclock_clocksource_read is receiving
completely random uninitialized data. The values in shadow
are wrong, but could be interpreted as valid data
(shadow.tsc_to_nsec_mul = b6dc43b6, shadow.tsc_shift = ffffffff,
shadow.flags = 0 and shadow.version is always even).


I've attached the printk patches for 2.6.34.1 and 2.6.35, in case
anyone needs them...

[-- Attachment #2: 2.6.34.1.patch --]
[-- Type: text/x-patch, Size: 1055 bytes --]

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.

Signed-off-by: Arjan Koers <0h61vkll2ly8@xutrox.com>

diff --git a/arch/x86/kernel/kvmclock.c b/arch/x86/kernel/kvmclock.c
index feaeb0d..71bf2df 100644
--- a/arch/x86/kernel/kvmclock.c
+++ b/arch/x86/kernel/kvmclock.c
@@ -125,12 +125,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

[-- Attachment #3: 2.6.35.patch --]
[-- Type: text/x-patch, Size: 1055 bytes --]

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.

Signed-off-by: Arjan Koers <0h61vkll2ly8@xutrox.com>

diff --git a/arch/x86/kernel/kvmclock.c b/arch/x86/kernel/kvmclock.c
index eb9b76c..ca43ce3 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

  parent reply	other threads:[~2010-08-02 21:35 UTC|newest]

Thread overview: 81+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-07-22 12:53 2.6.35-rc1 regression with pvclock and smp guests Andre Przywara
2010-07-25  8:44 ` Avi Kivity
2010-07-26  8:47   ` Andre Przywara
2010-07-26 18:59     ` Arjan Koers
2010-07-27 21:00       ` Arjan Koers
2010-07-28 10:37         ` Avi Kivity
2010-07-31  0:34           ` Arjan Koers
2010-07-31  1:38             ` Zachary Amsden
2010-07-31 11:50               ` Arjan Koers
2010-07-31  2:39             ` Zachary Amsden
2010-07-31 11:53               ` Arjan Koers
2010-07-31 16:36                 ` Arjan Koers
2010-07-31 19:45                   ` Arjan Koers
2010-07-31 23:55                   ` Zachary Amsden
2010-08-02 14:43                     ` Glauber Costa
2010-08-02 16:16                       ` Arjan Koers
2010-08-02 18:07                         ` Glauber Costa
2010-08-02 20:26                       ` Zachary Amsden
2010-08-02 21:10                         ` Glauber Costa
2010-08-02 21:35                         ` Arjan Koers [this message]
2010-08-03  0:00                           ` Zachary Amsden
2010-09-28 11:16                           ` Michael Tokarev
2010-09-29  8:12                             ` Michael Tokarev
2010-09-29  8:28                           ` Avi Kivity
2010-09-29  9:17                             ` Michael Tokarev
2010-09-29  9:19                               ` Michael Tokarev
2010-09-29 19:26                                 ` Arjan Koers
2010-09-30  7:55                                   ` Michael Tokarev
2010-09-30  9:59                                     ` Michael Tokarev
2010-09-30 13:54                                       ` Zachary Amsden
2010-09-30 15:12                                         ` Michael Tokarev
2010-09-30 15:32                                           ` Zachary Amsden
2010-09-30 18:49                                             ` Arjan Koers
2010-09-30 19:05                                               ` Marcelo Tosatti
2010-09-30 20:16                                                 ` Arjan Koers
2010-09-30 23:02                                                 ` Michael Tokarev
2010-09-30 23:07                                                   ` Michael Tokarev
2010-10-01  1:13                                                     ` Zachary Amsden
2010-10-02  5:35                                                     ` Zachary Amsden
2010-10-02  7:35                                                       ` Michael Tokarev
2010-10-02  7:40                                                         ` Michael Tokarev
2010-10-02  7:50                                                           ` Michael Tokarev
2010-10-02 16:10                                                         ` Arjan Koers
2010-10-02 20:26                                                           ` Michael Tokarev
2010-10-02 23:42                                                           ` Zachary Amsden
2010-10-03  8:27                                                             ` Michael Tokarev
2010-10-08  0:12                                                             ` Arjan Koers
2010-10-08  2:47                                                               ` Zachary Amsden
2010-10-08 22:06                                                                 ` Marcelo Tosatti
2010-10-09  1:10                                                                   ` Arjan Koers
2010-10-09  2:27                                                                     ` Zachary Amsden
2010-10-09  6:29                                                                       ` Michael Tokarev
2010-10-09  8:59                                                                         ` Arjan Koers
2010-10-11 20:47                                                                           ` Zachary Amsden
2010-10-13 12:18                                                                             ` Glauber Costa
2010-10-10  1:20                                                                       ` Arjan Koers
2010-10-11 17:53                                                                       ` Anthony Liguori
2010-10-11 18:36                                                                         ` Marcelo Tosatti
2010-10-09  2:29                                                                     ` Zachary Amsden
2010-10-10  1:26                                                                     ` Arjan Koers
2010-10-20 20:47                                                                     ` Arjan Koers
2010-10-09  7:59                                                                   ` Michael Tokarev
2010-10-09  8:31                                                                     ` Michael Tokarev
2010-10-02 21:55                                                         ` Zachary Amsden
2010-10-03  8:16                                                           ` Michael Tokarev
2010-10-03  8:22                                                             ` Avi Kivity
2010-10-03  8:30                                                             ` Michael Tokarev
2010-07-27 10:03     ` Avi Kivity
2010-07-27 11:49       ` Andre Przywara
2010-07-27 12:06         ` Avi Kivity
2010-07-27 12:21           ` Andre Przywara
2010-07-27 12:34             ` Avi Kivity
2010-07-27 13:48               ` Andre Przywara
2010-07-27 13:58                 ` Avi Kivity
2010-07-27 14:55                   ` Andre Przywara
2010-07-27 21:51                     ` Andre Przywara
2010-07-28  3:00                       ` Zachary Amsden
2010-07-28  7:55                         ` Andre Przywara
2010-07-28 12:25                       ` Andre Przywara
2010-07-30 22:54                         ` Zachary Amsden
2010-08-02 10:12                           ` Andre Przywara

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4C573A20.6030001@xutrox.com \
    --to=0h61vkll2ly8@xutrox.com \
    --cc=andre.przywara@amd.com \
    --cc=avi@redhat.com \
    --cc=glommer@redhat.com \
    --cc=kvm@vger.kernel.org \
    --cc=zamsden@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.