From: Dan Hecht <dhecht@vmware.com>
To: tglx@linutronix.de
Cc: Jeremy Fitzhardinge <jeremy@goop.org>,
James Morris <jmorris@namei.org>,
Virtualization Mailing List <virtualization@lists.osdl.org>,
akpm@linux-foundation.org, john stultz <johnstul@us.ibm.com>,
Ingo Molnar <mingo@elte.hu>, LKML <linux-kernel@vger.kernel.org>
Subject: Re: + stupid-hack-to-make-mainline-build.patch added to -mm tree
Date: Wed, 07 Mar 2007 13:33:41 -0800 [thread overview]
Message-ID: <45EF2FB5.1080604@vmware.com> (raw)
In-Reply-To: <1173302503.24738.795.camel@localhost.localdomain>
On 03/07/2007 01:21 PM, Thomas Gleixner wrote:
> On Wed, 2007-03-07 at 11:49 -0800, Dan Hecht wrote:
>> Jeremy, I saw you sent out the Xen version earlier, thanks. Here's ours
>> for reference (please excuse any formating issues); it's also lean.
>> We'll send out a proper patch later after some more testing:
>
> Ah. Bitching loud enough speeds things up. :)
>
We've always planned to do this. We just didn't want to create the
dependency between paravirt_ops and clockevents too early such that they
would depend on each other to merge to main line. Now that they are
both there, we are all for it.
>> /** vmi clockevent */
>>
>> static struct clock_event_device vmi_global_clockevent;
>>
>> static inline u32 vmi_alarm_wiring(struct clock_event_device *evt)
>> {
>> return (evt == &vmi_global_clockevent) ?
>> VMI_ALARM_WIRED_IRQ0 : VMI_ALARM_WIRED_LVTT;
>> }
>>
>> static void vmi_timer_set_mode(enum clock_event_mode mode,
>> struct clock_event_device *evt)
>> {
>> u32 wiring;
>> cycle_t now, cycles_per_hz;
>> BUG_ON(!irqs_disabled());
>>
>> wiring = vmi_alarm_wiring(evt);
>> if (wiring == VMI_ALARM_WIRED_LVTT)
>> /* Route the interrupt to the correct vector */
>> apic_write_around(APIC_LVTT, LOCAL_TIMER_VECTOR);
>
> Wire that in the hypervisor.
>
>> switch (mode) {
>> case CLOCK_EVT_MODE_ONESHOT:
>> break;
>> case CLOCK_EVT_MODE_PERIODIC:
>> cycles_per_hz = vmi_timer_ops.get_cycle_frequency();
>> (void)do_div(cycles_per_hz, HZ);
>> now = vmi_timer_ops.get_cycle_counter(vmi_counter(VMI_PERIODIC));
>> vmi_timer_ops.set_alarm(wiring | VMI_PERIODIC,
>> now, cycles_per_hz);
>
> paravirt_ops->paravirt_clockevent->set_periodic(vcpu, period);
>
Huh? paravirt_ops isn't a hypervisor interface, it's just a linux code
abstraction. The code on both sides of paravirt_ops is *linux* code,
any way you cut it. clockevents is already a linux code abstraction.
why introduce the redundancy?
>> break;
>> case CLOCK_EVT_MODE_UNUSED:
>> case CLOCK_EVT_MODE_SHUTDOWN:
>
> paravirt_ops->paravirt_clockevent->stop_event(vcpu, mode);
>
You would be introducing the same redundancy.
>
>> switch (evt->mode) {
>> case CLOCK_EVT_MODE_ONESHOT:
>> vmi_timer_ops.cancel_alarm(VMI_ONESHOT);
>> break;
>> case CLOCK_EVT_MODE_PERIODIC:
>> vmi_timer_ops.cancel_alarm(VMI_PERIODIC);
>> break;
>> default:
>> break;
>> }
>> break;
>> default:
>> break;
>> }
>> }
>
> This whole vmi_timer_ops thing is horrible. All hypervisors can share
> paravirt_ops->paravirt_clockevent and retrieve the methods on boot.
>
vmi_timer_ops.whatever is where the kernel <-> hypervisor boundary is
crossed for VMI.
>> static int vmi_timer_next_event(unsigned long delta,
>> struct clock_event_device *evt)
>> {
>> /* Unfortunately, set_next_event interface only passes relative
>> * expiry, but we want absolute expiry. It'd be better if were
>> * were passed an aboslute expiry, since a bunch of time may
>> * have been stolen between the time the delta is computed and
>> * when we set the alarm below. */
>> cycle_t now = vmi_timer_ops.get_cycle_counter(vmi_counter(VMI_ONESHOT));
>>
>> BUG_ON(evt->mode != CLOCK_EVT_MODE_ONESHOT);
>> vmi_timer_ops.set_alarm(vmi_alarm_wiring(evt) | VMI_ONESHOT,
>> now + delta, 0);
>> return 0;
>> }
>
> Great. Now we have:
>
> s64 event = startup_offset + ktime_to_ns(evt->next_event);
>
> if (HYPERVISOR_set_timer_op(event) < 0)
> BUG();
> and
>
> vmi_timer_ops.set_alarm(vmi_alarm_wiring(evt) | VMI_ONESHOT, now + delta, 0);
>
> How will the next implementations look like ?
>
> lguest_program_timer(delta + lguest_current_time(), LGUEST_TIMER_SHOOT_ONCE);
>
> virt_nextgen_ops.set_timer_event(delta, NO_WE_NEED_NO_FLAGS);
>
> .......
>
> This is tinkering of the best. My understanding of the paravirt
> discussion at Kernel Summit was, that paravirt ops are exactly there to
> prevent the above random hackery in the kernel and to allow _ALL_
> hypervisors to interact via a sane interface inside of the kernel.
>
No, that was not the point of paravirt_ops. It is actually the complete
opposite of the intention of paravirt_ops. paravirt_ops' intent is
exactly to allow for *multiple* hypervisor ABIs to exist in the kernel.
At kernel summit, paravirt_ops was proposed to allow for multiple
hypervisor ABI's to be targeted by the kernel. The code on both sides
of paravirt_ops is *linux* code.
> You are just perverting the whole idea of a standartized
> paravirtualization interface.
>
> This things can be done for clocksources, clockevents, interrupts (the
> generic irq code allows this) and probaly for a whole bunch of other
> stuff.
>
> The current paravirt interface is completely insane and will explode
> into an unmaintainable nightmare within no time, if we keep accepting
> that crap further.
>
> No thanks.
>
Again, you are misunderstanding the intent of paravirt_ops and history
behind it's development.
>> #ifdef CONFIG_X86_LOCAL_APIC
>>
>> /* Replacement for lapic timer local clock event.
>> * paravirt_ops.setup_boot_clock = vmi_nop
>> * (continue using global_clock_event on cpu0)
>> * paravirt_ops.setup_secondary_clock = vmi_timer_setup_local_alarm
>> */
>> void __devinit vmi_timer_setup_local_alarm(void)
>> {
>> struct clock_event_device *evt = &__get_cpu_var(local_clock_events);
>>
>> /* Then, start it back up as a local clockevent device. */
>> memcpy(evt, &vmi_clockevent, sizeof(*evt));
>> evt->cpumask = cpumask_of_cpu(smp_processor_id());
>>
>> printk(KERN_WARNING "vmi: registering clock event %s. mult=%lu
>> shift=%u\n",
>> evt->name, evt->mult, evt->shift);
>> clockevents_register_device(evt);
>> }
>>
>> #endif
>
> Why the hell do you need an lapic emulator here? This is exactly the
> kind of crap, we do not want to have. clockevents do not care which
> piece of hardware is calling them and we do not care how a particular
> hypervisor is wiring that hardware.
>
Again, I said in a previous mail that we am fine with introducing our
own interrupt handler rather than using the lapic one.
Dan
next prev parent reply other threads:[~2007-03-07 21:33 UTC|newest]
Thread overview: 169+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-03-06 6:52 + stupid-hack-to-make-mainline-build.patch added to -mm tree akpm
[not found] ` <45ED16D2.3000202@vmware.com>
[not found] ` <20070306084258.GA15745@elte.hu>
[not found] ` <20070306084647.GA16280@elte.hu>
2007-03-06 8:55 ` Zachary Amsden
2007-03-06 10:59 ` Thomas Gleixner
2007-03-06 21:07 ` Dan Hecht
2007-03-06 21:07 ` Dan Hecht
2007-03-06 22:21 ` Andi Kleen
2007-03-06 22:21 ` Andi Kleen
2007-03-06 21:32 ` Dan Hecht
2007-03-06 23:53 ` Thomas Gleixner
2007-03-07 0:24 ` Jeremy Fitzhardinge
2007-03-07 0:35 ` Dan Hecht
2007-03-07 0:49 ` Thomas Gleixner
2007-03-07 0:53 ` Dan Hecht
2007-03-07 1:18 ` Thomas Gleixner
2007-03-07 2:08 ` Dan Hecht
2007-03-07 8:37 ` Thomas Gleixner
2007-03-07 17:41 ` Jeremy Fitzhardinge
2007-03-07 17:41 ` Jeremy Fitzhardinge
2007-03-07 17:49 ` Ingo Molnar
2007-03-07 17:49 ` Ingo Molnar
2007-03-07 18:03 ` James Morris
2007-03-07 18:03 ` James Morris
2007-03-07 18:35 ` Jeremy Fitzhardinge
2007-03-07 18:35 ` Jeremy Fitzhardinge
2007-03-08 0:45 ` Alan Cox
2007-03-08 0:45 ` Alan Cox
2007-03-07 17:52 ` Ingo Molnar
2007-03-07 17:52 ` Ingo Molnar
2007-03-07 18:28 ` Jeremy Fitzhardinge
2007-03-07 18:53 ` Thomas Gleixner
2007-03-07 18:53 ` Thomas Gleixner
2007-03-07 18:11 ` James Morris
2007-03-07 18:11 ` James Morris
2007-03-07 18:56 ` Thomas Gleixner
2007-03-07 19:05 ` Jeremy Fitzhardinge
2007-03-07 19:49 ` Dan Hecht
2007-03-07 20:11 ` Jeremy Fitzhardinge
2007-03-07 20:49 ` Dan Hecht
2007-03-07 20:49 ` Dan Hecht
2007-03-07 21:14 ` Thomas Gleixner
2007-03-07 21:14 ` Thomas Gleixner
2007-03-07 20:57 ` Thomas Gleixner
2007-03-07 20:57 ` Thomas Gleixner
2007-03-07 21:02 ` Dan Hecht
2007-03-07 21:08 ` Jeremy Fitzhardinge
2007-03-07 21:19 ` Thomas Gleixner
2007-03-07 21:19 ` Thomas Gleixner
2007-03-07 21:14 ` Dan Hecht
2007-03-07 21:21 ` Thomas Gleixner
2007-03-07 21:33 ` Dan Hecht [this message]
2007-03-07 22:05 ` Jeremy Fitzhardinge
2007-03-07 23:05 ` Thomas Gleixner
2007-03-07 23:05 ` Thomas Gleixner
2007-03-07 23:25 ` Zachary Amsden
2007-03-07 23:36 ` Jeremy Fitzhardinge
2007-03-07 23:40 ` Zachary Amsden
2007-03-07 23:40 ` Zachary Amsden
2007-03-08 18:30 ` Chris Wright
2007-03-08 18:30 ` Chris Wright
2007-03-08 0:22 ` Thomas Gleixner
2007-03-08 1:01 ` Daniel Arai
2007-03-08 1:01 ` Daniel Arai
2007-03-08 1:23 ` Jeremy Fitzhardinge
2007-03-08 1:23 ` Jeremy Fitzhardinge
2007-03-08 7:02 ` Thomas Gleixner
2007-03-08 7:28 ` Thomas Gleixner
2007-03-08 8:01 ` Zachary Amsden
2007-03-08 8:01 ` Zachary Amsden
2007-03-08 18:24 ` Chris Wright
2007-03-08 18:44 ` Daniel Arai
2007-03-08 19:14 ` Chris Wright
2007-03-08 19:14 ` Chris Wright
2007-03-08 19:17 ` Ingo Molnar
2007-03-08 19:17 ` Ingo Molnar
2007-03-08 19:42 ` Jeremy Fitzhardinge
2007-03-08 19:47 ` Chris Wright
2007-03-08 19:47 ` Chris Wright
2007-03-08 19:52 ` Jeremy Fitzhardinge
2007-03-08 20:10 ` Chris Wright
2007-03-08 20:18 ` Jeremy Fitzhardinge
2007-03-08 20:18 ` Jeremy Fitzhardinge
2007-03-08 20:23 ` Chris Wright
2007-03-08 20:23 ` Chris Wright
2007-03-08 20:33 ` Jeremy Fitzhardinge
2007-03-08 20:42 ` Chris Wright
2007-03-08 20:42 ` Chris Wright
2007-03-08 20:42 ` Jeremy Fitzhardinge
2007-03-08 20:42 ` Jeremy Fitzhardinge
2007-03-08 21:45 ` Andi Kleen
2007-03-08 21:45 ` Andi Kleen
2007-03-08 19:54 ` Ingo Molnar
2007-03-08 19:54 ` Ingo Molnar
2007-03-08 9:10 ` hardwired VMI crap Ingo Molnar
2007-03-08 10:06 ` Zachary Amsden
2007-03-08 11:09 ` Thomas Gleixner
2007-03-08 20:46 ` Zachary Amsden
2007-03-08 20:46 ` Zachary Amsden
2007-03-08 21:13 ` Ingo Molnar
2007-03-08 22:17 ` Zachary Amsden
2007-03-08 22:33 ` Ingo Molnar
2007-03-08 22:39 ` Zachary Amsden
2007-03-16 10:12 ` Pavel Machek
2007-03-08 21:15 ` Jeremy Fitzhardinge
2007-03-08 21:34 ` Ingo Molnar
2007-03-08 21:34 ` Ingo Molnar
2007-03-08 21:43 ` Andi Kleen
2007-03-08 22:30 ` Ingo Molnar
2007-03-08 22:36 ` Zachary Amsden
2007-03-08 23:39 ` Jeremy Fitzhardinge
2007-03-08 23:39 ` Jeremy Fitzhardinge
2007-03-08 23:55 ` Zachary Amsden
2007-03-08 23:55 ` Zachary Amsden
2007-03-09 0:10 ` Jeremy Fitzhardinge
2007-03-09 0:29 ` Linus Torvalds
2007-03-09 0:29 ` Linus Torvalds
2007-03-09 0:22 ` Daniel Walker
2007-03-09 0:22 ` Daniel Walker
2007-03-09 0:28 ` Thomas Gleixner
2007-03-09 0:28 ` Thomas Gleixner
2007-03-09 0:04 ` Thomas Gleixner
2007-03-09 0:04 ` Thomas Gleixner
2007-03-09 0:44 ` Jeremy Fitzhardinge
2007-03-08 22:31 ` Zachary Amsden
2007-03-08 22:31 ` Zachary Amsden
2007-03-08 21:39 ` Andi Kleen
2007-03-08 21:39 ` Andi Kleen
2007-03-08 22:58 ` Zachary Amsden
2007-03-08 22:42 ` Ingo Molnar
2007-03-08 23:39 ` Zachary Amsden
2007-03-08 18:35 ` Chris Wright
2007-03-08 18:35 ` Chris Wright
2007-03-07 23:33 ` + stupid-hack-to-make-mainline-build.patch added to -mm tree Jeremy Fitzhardinge
2007-03-07 23:52 ` Dan Hecht
2007-03-08 0:19 ` Jeremy Fitzhardinge
2007-03-08 0:19 ` Jeremy Fitzhardinge
2007-03-08 0:35 ` Thomas Gleixner
2007-03-08 0:38 ` Jeremy Fitzhardinge
2007-03-08 0:38 ` Jeremy Fitzhardinge
2007-03-07 20:40 ` Thomas Gleixner
2007-03-07 21:07 ` Jeremy Fitzhardinge
2007-03-07 21:07 ` Jeremy Fitzhardinge
2007-03-07 21:40 ` Thomas Gleixner
2007-03-07 21:40 ` Thomas Gleixner
2007-03-07 21:34 ` Dan Hecht
2007-03-07 22:14 ` Thomas Gleixner
2007-03-07 22:17 ` Zachary Amsden
2007-03-07 22:17 ` Zachary Amsden
2007-03-07 22:31 ` Thomas Gleixner
2007-03-07 22:31 ` Thomas Gleixner
2007-03-07 22:28 ` Dan Hecht
2007-03-07 22:28 ` Dan Hecht
2007-03-08 8:01 ` Ingo Molnar
2007-03-08 8:01 ` Ingo Molnar
2007-03-08 8:15 ` Keir Fraser
2007-03-08 8:15 ` Keir Fraser
2007-03-08 8:41 ` Jeremy Fitzhardinge
2007-03-08 10:26 ` Rusty Russell
2007-03-07 21:42 ` Dan Hecht
2007-03-07 21:42 ` Dan Hecht
2007-03-07 22:07 ` Thomas Gleixner
2007-03-07 22:07 ` Thomas Gleixner
2007-03-07 5:10 ` Jeremy Fitzhardinge
2007-03-07 0:40 ` Thomas Gleixner
2007-03-07 0:42 ` Dan Hecht
2007-03-07 1:22 ` Thomas Gleixner
2007-03-07 1:22 ` Thomas Gleixner
2007-03-07 1:44 ` Dan Hecht
2007-03-07 1:44 ` Dan Hecht
2007-03-07 7:48 ` Thomas Gleixner
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=45EF2FB5.1080604@vmware.com \
--to=dhecht@vmware.com \
--cc=akpm@linux-foundation.org \
--cc=jeremy@goop.org \
--cc=jmorris@namei.org \
--cc=johnstul@us.ibm.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@elte.hu \
--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.