From: Don Slutz <dslutz@verizon.com>
To: xen-devel@lists.xen.org
Cc: Keir Fraser <keir@xen.org>, Don Slutz <dslutz@verizon.com>,
Jan Beulich <jbeulich@suse.com>
Subject: [PATCH 1/1] hpet: Act more like real hardware
Date: Wed, 26 Feb 2014 13:00:47 -0500 [thread overview]
Message-ID: <1393437647-16694-2-git-send-email-dslutz@verizon.com> (raw)
In-Reply-To: <1393437647-16694-1-git-send-email-dslutz@verizon.com>
Currently in 32 bit mode the routine hpet_set_timer() will convert a
time in the past to a time in future. This is done by the uint32_t
cast of diff.
Even without this issue, hpet_tick_to_ns() does not support past
times.
Real hardware does not support past times.
So just do the same thing in 32 bit mode as 64 bit mode.
Without this change it is possible for an HVM guest running linux to
get the message:
..MP-BIOS bug: 8254 timer not connected to IO-APIC
On the guest console(s); and will panic.
Also Xen hypervisor console with be flooded with:
vioapic.c:352:d1 Unsupported delivery mode 7
vioapic.c:352:d1 Unsupported delivery mode 7
vioapic.c:352:d1 Unsupported delivery mode 7
Signed-off-by: Don Slutz <dslutz@verizon.com>
---
xen/arch/x86/hvm/hpet.c | 13 +++----------
1 file changed, 3 insertions(+), 10 deletions(-)
diff --git a/xen/arch/x86/hvm/hpet.c b/xen/arch/x86/hvm/hpet.c
index 4324b52..14b1a39 100644
--- a/xen/arch/x86/hvm/hpet.c
+++ b/xen/arch/x86/hvm/hpet.c
@@ -197,10 +197,6 @@ static void hpet_stop_timer(HPETState *h, unsigned int tn)
hpet_get_comparator(h, tn);
}
-/* the number of HPET tick that stands for
- * 1/(2^10) second, namely, 0.9765625 milliseconds */
-#define HPET_TINY_TIME_SPAN ((h->stime_freq >> 10) / STIME_PER_HPET_TICK)
-
static void hpet_set_timer(HPETState *h, unsigned int tn)
{
uint64_t tn_cmp, cur_tick, diff;
@@ -231,14 +227,11 @@ static void hpet_set_timer(HPETState *h, unsigned int tn)
diff = tn_cmp - cur_tick;
/*
- * Detect time values set in the past. This is hard to do for 32-bit
- * comparators as the timer does not have to be set that far in the future
- * for the counter difference to wrap a 32-bit signed integer. We fudge
- * by looking for a 'small' time value in the past.
+ * Detect time values set in the past. Since hpet_tick_to_ns() does
+ * not handle this, use 0 for both 64 and 32 bit mode.
*/
if ( (int64_t)diff < 0 )
- diff = (timer_is_32bit(h, tn) && (-diff > HPET_TINY_TIME_SPAN))
- ? (uint32_t)diff : 0;
+ diff = 0;
if ( (tn <= 1) && (h->hpet.config & HPET_CFG_LEGACY) )
/* if LegacyReplacementRoute bit is set, HPET specification requires
--
1.8.4
next prev parent reply other threads:[~2014-02-26 18:00 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-02-26 18:00 [PATCH 0/1] Prevent one cause of "MP-BIOS bug: 8254 timer"... message from linux Don Slutz
2014-02-26 18:00 ` Don Slutz [this message]
2014-02-27 9:20 ` [PATCH 1/1] hpet: Act more like real hardware Jan Beulich
2014-02-27 23:56 ` Don Slutz
2014-02-28 9:06 ` Jan Beulich
2014-02-28 14:01 ` Don Slutz
2014-03-11 19:20 ` Don Slutz
2014-03-12 8:48 ` Jan Beulich
2014-03-12 13:43 ` Slutz, Donald Christopher
2014-03-12 19:23 ` Slutz, Donald Christopher
2014-04-08 23:42 ` Don Slutz
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=1393437647-16694-2-git-send-email-dslutz@verizon.com \
--to=dslutz@verizon.com \
--cc=jbeulich@suse.com \
--cc=keir@xen.org \
--cc=xen-devel@lists.xen.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;
as well as URLs for NNTP newsgroup(s).