All of lore.kernel.org
 help / color / mirror / Atom feed
From: Avi Kivity <avi@redhat.com>
To: Gerd Hoffmann <kraxel@redhat.com>
Cc: seabios@seabios.org, kvm@vger.kernel.org
Subject: Re: [PATCH] tsc: use kvmclock for calibration
Date: Thu, 09 Aug 2012 17:05:09 +0300	[thread overview]
Message-ID: <5023C395.40900@redhat.com> (raw)
In-Reply-To: <5023C2BE.5070702@redhat.com>

On 08/09/2012 05:01 PM, Avi Kivity wrote:
> On 08/09/2012 04:57 PM, Gerd Hoffmann wrote:
>>   Hi,
>> 
>>>> +u64 kvm_tsc_khz(void)
>>>> +{
>>>> +    u32 eax, ebx, ecx, edx, msr;
>>>> +    struct pvclock_vcpu_time_info time;
>>>> +    u32 addr = (u32)(&time);
>>>> +    u64 khz;
>>>> +
>>>> +    /* check presence and figure msr number */
>>>> +    cpuid(KVM_CPUID_FEATURES, &eax, &ebx, &ecx, &edx);
>>>> +    if (eax & KVM_FEATURE_CLOCKSOURCE2) {
>>>> +        msr = MSR_KVM_SYSTEM_TIME_NEW;
>>>> +    } else if (eax & KVM_FEATURE_CLOCKSOURCE) {
>>>> +        msr = MSR_KVM_SYSTEM_TIME;
>>>> +    } else {
>>>> +        return 0;
>>>> +    }
>>>> +
>>>> +    /* ask kvm hypervisor to fill struct */
>>>> +    memset(&time, 0, sizeof(time));
>>>> +    wrmsr(msr, addr | 1);
>>> 
>>> How can this work?
>> 
>> It did in my testing, although maybe by pure luck ...
>> 
>>> There is a 64-byte alignment requirement.
>> 
>> 64 bytes?  Sure?  The whole struct is only 32 bytes in size ...
> 
> er, the documentation says 4 bytes (so stack alignment works).  I
> distinctly remember having a large alignment requirement so we don't
> cross a page or slot boundary... something's wrong here.

	case MSR_KVM_SYSTEM_TIME: {
		kvmclock_reset(vcpu);

		vcpu->arch.time = data;
		kvm_make_request(KVM_REQ_CLOCK_UPDATE, vcpu);

		/* we verify if the enable bit is set... */
		if (!(data & 1))
			break;

		/* ...but clean it before doing the actual write */
		vcpu->arch.time_offset = data & ~(PAGE_MASK | 1);

		vcpu->arch.time_page =
				gfn_to_page(vcpu->kvm, data >> PAGE_SHIFT);

		if (is_error_page(vcpu->arch.time_page))
			vcpu->arch.time_page = NULL;

		break;

So your tests worked by pure luck, but the bug is in kvm.  We need to
grab two pages here.


-- 
error compiling committee.c: too many arguments to function

  reply	other threads:[~2012-08-09 14:05 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-08-09 11:57 [PATCH] tsc: use kvmclock for calibration Gerd Hoffmann
2012-08-09 12:53 ` Avi Kivity
2012-08-09 13:25   ` [SeaBIOS] " Fred .
2012-08-09 13:57   ` Gerd Hoffmann
2012-08-09 14:01     ` Avi Kivity
2012-08-09 14:05       ` Avi Kivity [this message]
2012-08-09 14:12         ` Gerd Hoffmann
2012-08-09 14:17           ` Avi Kivity
2012-08-09 14:18       ` Gerd Hoffmann
2012-08-09 14:20         ` Avi Kivity
2012-08-09 19:02           ` Marcelo Tosatti
2012-08-12 10:56             ` Avi Kivity
2012-08-09 19:09       ` Marcelo Tosatti
2012-08-10  7:18         ` Gleb Natapov
2012-08-10  7:30           ` Gleb Natapov
2012-08-10  8:10         ` Gerd Hoffmann
2012-08-10 21:26           ` Marcelo Tosatti
2012-08-13 10:37             ` Gerd Hoffmann
2012-08-13 10:46               ` Gleb Natapov
2012-08-13 12:55                 ` [SeaBIOS] " Fred .
2012-08-12  9:00           ` Avi Kivity
2012-08-09 18:59   ` Marcelo Tosatti
2012-08-12  9:01     ` Avi Kivity

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=5023C395.40900@redhat.com \
    --to=avi@redhat.com \
    --cc=kraxel@redhat.com \
    --cc=kvm@vger.kernel.org \
    --cc=seabios@seabios.org \
    /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.