All of lore.kernel.org
 help / color / mirror / Atom feed
From: Zachary Amsden <zach@vmware.com>
To: Chris Wright <chrisw@sous-sol.org>
Cc: Andrew Morton <akpm@osdl.org>, Andi Kleen <ak@muc.de>,
	Jeremy Fitzhardinge <jeremy@goop.org>,
	Rusty Russell <rusty@rustcorp.com.au>,
	Virtualization Mailing List <virtualization@lists.osdl.org>,
	Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
	Dan Hecht <dhecht@vmware.com>, Ingo Molnar <mingo@elte.hu>,
	Thomas Gleixner <tglx@linutronix.de>
Subject: Re: [PATCH 9/10] Vmi timer update.patch
Date: Tue, 10 Apr 2007 10:03:47 -0700	[thread overview]
Message-ID: <461BC373.10306@vmware.com> (raw)
In-Reply-To: <20070410023702.GJ10574@sequoia.sous-sol.org>

Chris Wright wrote:


Thanks for the review!  Comments inline.

>> +/* paravirt_ops.get_wallclock = vmi_get_wallclock */
>>     
>
> Style nit, these pv_ops.foo = vmi_foo style comments aren't really useful.
>
>   

Yeah, and easy to get out of sync.  I'll drop them.

>> +	.rating         = 1000,
>>     
>
> Heh, no messing around ;-)
>   

Yes, VMI has 1000 hps.


>> +	printk(KERN_WARNING "vmi: registering clock event %s. mult=%lu shift=%u\n", 
>> +	       evt->name, evt->mult, evt->shift);
>>     
>
> Why is this a warning? ;-)
>   

Debug info, I can remove it.

>> +void __init vmi_time_init(void)
>> +{
>> +	/* Disable PIT: BIOSes start PIT CH0 with 18.2hz peridic. */
>> +	outb_p(0x3a, PIT_MODE); /* binary, mode 5, LSB/MSB, ch 0 */
>>     
>
> That shouldn't be necessary using clockevents.
>   

Actually, I'm not so sure.  If clockevents simply masks the PIT when 
disabling it, we still have overhead of keeping the latch in sync, which 
requires a timer at the PIT frequency.  I can instrument to see how 
exactly the PIT gets disabled.


>> +	vmi_time_init_clockevent();
>> +	setup_irq(0, &vmi_clock_action);
>> +}
>> +
>> +#ifdef CONFIG_X86_LOCAL_APIC
>> +void __devinit vmi_time_bsp_init(void)
>> +{
>> +	/*
>> +	 * On APIC systems, we want local timers to fire on each cpu.  We do
>> +	 * this by programming LVTT to deliver timer events to the IRQ handler
>> +	 * for IRQ-0, since we can't re-use the APIC local timer handler
>> +	 * without interfering with that code.
>> +	 */
>> +	clockevents_notify(CLOCK_EVT_NOTIFY_SUSPEND, NULL);
>>     
>
> Why do you do this suspend...
>   

We need to cancel all pending PIT timer events and restart then local 
timer, which requires atomically taking over IRQ-0.  We use the IDT gate 
for IRQ-0 because it is already an exclusive interrupt, but we can't 
re-use the LVTT IDT gate for local timer since that requires a custom 
custom SMP interrupt in entry.S.  So we must be absolutely sure when we 
get an interrupt on IRQ-0 that it came from the VMI local (rather than 
PIT) delivery path.

>   
>> +	local_irq_disable();
>> +#ifdef CONFIG_X86_SMP
>> +	/*
>> +	 * XXX handle_percpu_irq only defined for SMP; we need to switch over
>> +	 * to using it, since this is a local interrupt, which each CPU must
>> +	 * handle individually without locking out or dropping simultaneous
>> +	 * local timers on other CPUs.  We also don't want to trigger the
>> +	 * quirk workaround code for interrupts which gets invoked from
>> +	 * handle_percpu_irq via eoi, so we use our own IRQ chip.
>> +	 */
>> +	set_irq_chip_and_handler_name(0, &vmi_chip, handle_percpu_irq, "lvtt");
>> +#else
>> +	set_irq_chip_and_handler_name(0, &vmi_chip, handle_edge_irq, "lvtt");
>> +#endif
>> +	vmi_wiring = VMI_ALARM_WIRED_LVTT;
>> +	apic_write(APIC_LVTT, vmi_get_timer_vector());
>>     
>
> isn't this just your ->startup?
>   

Which structure has a ->startup function we can use?  Sorry if this 
seems ignorant, I'm not quite sure what you mean.

>   
>> +	local_irq_enable();
>> +	clockevents_notify(CLOCK_EVT_NOTIFY_RESUME, NULL);
>>     
>
> ...and resume?  Instead of letting clockevents core handle all of that,
> and just registering right here?
>   

It wasn't clear that clockevents would issue a resume notify for us; if 
so we could handle this setup in the callback, but it has to be done on 
the correct CPU.  I can try it and see if that works.

Thanks,

Zach

  reply	other threads:[~2007-04-10 17:03 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-04-10  0:06 [PATCH 9/10] Vmi timer update.patch Zachary Amsden
2007-04-10  0:06 ` Zachary Amsden
2007-04-10  2:37 ` Chris Wright
2007-04-10 17:03   ` Zachary Amsden [this message]
2007-04-10 17:24     ` Chris Wright
2007-04-10 17:24       ` Chris Wright
2007-04-10 21:57       ` Zachary Amsden
2007-04-10 22:16         ` Jeremy Fitzhardinge
2007-04-10 22:16           ` Jeremy Fitzhardinge
2007-04-10 22:28           ` Zachary Amsden
2007-04-10 22:28             ` Zachary Amsden
2007-04-10 22:38             ` Chris Wright
2007-04-10 22:38               ` Chris Wright
2007-04-10 22:28         ` Chris Wright
2007-04-10 22:28           ` Chris Wright
2007-04-10 22:59           ` Zachary Amsden
2007-04-10 22:59             ` Zachary Amsden
2007-04-12  1:19       ` Zachary Amsden

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=461BC373.10306@vmware.com \
    --to=zach@vmware.com \
    --cc=ak@muc.de \
    --cc=akpm@osdl.org \
    --cc=chrisw@sous-sol.org \
    --cc=dhecht@vmware.com \
    --cc=jeremy@goop.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@elte.hu \
    --cc=rusty@rustcorp.com.au \
    --cc=tglx@linutronix.de \
    --cc=virtualization@lists.osdl.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.