From: Zachary Amsden <zach@vmware.com>
To: Andi Kleen <ak@muc.de>
Cc: Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
Andrew Morton <akpm@osdl.org>,
Rusty Russell <rusty@rustcorp.com.au>,
Jeremy Fitzhardinge <jeremy@goop.org>,
Chris Wright <chrisw@sous-sol.org>
Subject: Re: [PATCH 5/11] Fix PIT override bug for paravirt
Date: Tue, 06 Feb 2007 16:54:32 -0800 [thread overview]
Message-ID: <45C92348.7090201@vmware.com> (raw)
In-Reply-To: <20070206123023.GE47229@muc.de>
[-- Attachment #1: Type: text/plain, Size: 611 bytes --]
Andi Kleen wrote:
> On Mon, Feb 05, 2007 at 07:53:02PM -0800, Zachary Amsden wrote:
>
>> The time initialization changed for i386 when some code moved into time_init.
>> This made it no longer possible to override the PIT / HPET, which broke
>> paravirt guests.
>>
>
> Looks still fragile. Can this be done cleaner?
>
> In particularly some comments would be good, but clearer code
> logic would be preferred.
>
> -Andi
>
Well, the logic is still overly complicated, but I axed the ifdef and
commented it. It is difficult to work around the number of different
compile and boot sequences here.
[-- Attachment #2: pit-override --]
[-- Type: text/plain, Size: 2091 bytes --]
diff -r 31c3528be5d2 arch/i386/kernel/paravirt.c
--- a/arch/i386/kernel/paravirt.c Fri Feb 02 16:29:46 2007 -0800
+++ b/arch/i386/kernel/paravirt.c Tue Feb 06 16:16:54 2007 -0800
@@ -497,7 +497,7 @@ struct paravirt_ops paravirt_ops = {
.memory_setup = machine_specific_memory_setup,
.get_wallclock = native_get_wallclock,
.set_wallclock = native_set_wallclock,
- .time_init = time_init_hook,
+ .time_init = native_time_init,
.init_IRQ = native_init_IRQ,
.cpuid = native_cpuid,
diff -r 31c3528be5d2 arch/i386/kernel/time.c
--- a/arch/i386/kernel/time.c Fri Feb 02 16:29:46 2007 -0800
+++ b/arch/i386/kernel/time.c Tue Feb 06 16:27:06 2007 -0800
@@ -266,10 +266,24 @@ static void __init hpet_time_init(void)
{
if (!hpet_enable())
setup_pit_timer();
+ time_init_hook();
+}
+
+void __init native_time_init(void)
+{
+ late_time_init = hpet_time_init;
+}
+
+/*
+ * This is called directly from init code; we must delay timer setup in the
+ * HPET case as we can't make the decision to turn on HPET this early in the
+ * boot process. So we call do_time_init(), which either calls
+ * native_time_init above or a paravirt-op which implements an alternative
+ * timer. This may seem like overkill, but is necessary for the rather large
+ * number of timer combinations. But remember, this is all dealing with time,
+ * and with time, too much is never enough.
+ */
+void __init time_init(void)
+{
do_time_init();
}
-
-void __init time_init(void)
-{
- late_time_init = hpet_time_init;
-}
diff -r 31c3528be5d2 include/asm-i386/time.h
--- a/include/asm-i386/time.h Fri Feb 02 16:29:46 2007 -0800
+++ b/include/asm-i386/time.h Tue Feb 06 16:21:05 2007 -0800
@@ -28,13 +28,15 @@ static inline int native_set_wallclock(u
return retval;
}
+extern void native_time_init(void);
+
#ifdef CONFIG_PARAVIRT
#include <asm/paravirt.h>
#else /* !CONFIG_PARAVIRT */
#define get_wallclock() native_get_wallclock()
#define set_wallclock(x) native_set_wallclock(x)
-#define do_time_init() time_init_hook()
+#define do_time_init() native_time_init()
#endif /* CONFIG_PARAVIRT */
prev parent reply other threads:[~2007-02-07 0:54 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-02-06 3:53 [PATCH 5/11] Fix PIT override bug for paravirt Zachary Amsden
2007-02-06 12:30 ` Andi Kleen
2007-02-07 0:54 ` Zachary Amsden [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=45C92348.7090201@vmware.com \
--to=zach@vmware.com \
--cc=ak@muc.de \
--cc=akpm@osdl.org \
--cc=chrisw@sous-sol.org \
--cc=jeremy@goop.org \
--cc=linux-kernel@vger.kernel.org \
--cc=rusty@rustcorp.com.au \
/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.