From: Gleb Natapov <gleb@redhat.com>
To: Nickolai Zeldovich <nickolai@csail.mit.edu>
Cc: Marcelo Tosatti <mtosatti@redhat.com>,
Thomas Gleixner <tglx@linutronix.de>,
Ingo Molnar <mingo@redhat.com>, "H. Peter Anvin" <hpa@zytor.com>,
x86@kernel.org, kvm@vger.kernel.org,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH] kvm: fix i8254 counter 0 wraparound
Date: Tue, 18 Dec 2012 11:12:56 +0200 [thread overview]
Message-ID: <20121218091256.GG11016@redhat.com> (raw)
In-Reply-To: <1355571277-6096-1-git-send-email-nickolai@csail.mit.edu>
On Sat, Dec 15, 2012 at 06:34:37AM -0500, Nickolai Zeldovich wrote:
> The kvm i8254 emulation for counter 0 (but not for counters 1 and 2)
> has at least two bugs in mode 0:
>
> 1. The OUT bit, computed by pit_get_out(), is never set high.
>
> 2. The counter value, computed by pit_get_count(), wraps back around to
> the initial counter value, rather than wrapping back to 0xFFFF
> (which is the behavior described in the comment in __kpit_elapsed,
> the behavior implemented by qemu, and the behavior observed on AMD
> hardware).
>
> The bug stems from __kpit_elapsed computing the elapsed time mod the
> initial counter value (stored as nanoseconds in ps->period). This is both
> unnecessary (none of the callers of kpit_elapsed expect the value to be
> at most the initial counter value) and incorrect (it causes pit_get_count
> to appear to wrap around to the initial counter value rather than 0xFFFF).
> Removing this mod from __kpit_elapsed fixes both of the above bugs.
>
> Signed-off-by: Nickolai Zeldovich <nickolai@csail.mit.edu>
Applied, thanks!
> ---
> arch/x86/kvm/i8254.c | 1 -
> 1 file changed, 1 deletion(-)
>
> diff --git a/arch/x86/kvm/i8254.c b/arch/x86/kvm/i8254.c
> index 11300d2..c1d30b2 100644
> --- a/arch/x86/kvm/i8254.c
> +++ b/arch/x86/kvm/i8254.c
> @@ -122,7 +122,6 @@ static s64 __kpit_elapsed(struct kvm *kvm)
> */
> remaining = hrtimer_get_remaining(&ps->timer);
> elapsed = ps->period - ktime_to_ns(remaining);
> - elapsed = mod_64(elapsed, ps->period);
>
> return elapsed;
> }
> --
> 1.7.10.4
--
Gleb.
prev parent reply other threads:[~2012-12-18 9:13 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <1355571277-6096-1-git-send-email-nickolai@csail.mit.edu>
2012-12-17 18:34 ` [PATCH] kvm: fix i8254 counter 0 wraparound Gleb Natapov
2012-12-17 19:41 ` Marcelo Tosatti
2012-12-18 9:12 ` Gleb Natapov [this message]
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=20121218091256.GG11016@redhat.com \
--to=gleb@redhat.com \
--cc=hpa@zytor.com \
--cc=kvm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@redhat.com \
--cc=mtosatti@redhat.com \
--cc=nickolai@csail.mit.edu \
--cc=tglx@linutronix.de \
--cc=x86@kernel.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox