Re: KVM: x86: use smp_send_reschedule in kvm_vcpu_kick

Peter Zijlstra
2009-03-09T11:09:14Z

On Mon, 2009-03-09 at 11:58 +0100, Ingo Molnar wrote:
> * Avi Kivity <avi@redhat.com> wrote:
>
> > Marcelo Tosatti wrote:
> >> KVM uses a function call IPI to cause the exit of a guest running on a
> >> physical cpu. For virtual interrupt notification there is no need to
> >> wait on IPI receival, or to execute any function.
> >>
> >> This is exactly what the reschedule IPI does, without the overhead
> >> of function IPI. So use it instead of smp_call_function_single in
> >> kvm_vcpu_kick.
> >>
> >> Also change the "guest_mode" variable to a bit in vcpu->requests, and
> >> use that to collapse multiple IPI's that would be issued between the
> >> first one and zeroing of guest mode.
> >>
> >> This allows kvm_vcpu_kick to called from interrupt context.
> >>
> >
> > Looks good. The only worry I have is that we depend on
> > smp_reschedule_interrupt() being a no-op. I guess that's a
> > reasonable assumption though.
>
> It's a reasonable current assumption - but it might change in
> the future - so please also put it into the changelog that KVM
> will revert it or fix it differently if the scheduler grows some
> functionality there.

Alternatively, do something like the below, then anybody poking at that
code will know to prod the KVM folks when they change anything.

[ I suspect other kvm arches will need to a similar comment ]

---
arch/x86/kernel/smp.c | 3 +++
1 files changed, 3 insertions(+), 0 deletions(-)

diff --git a/arch/x86/kernel/smp.c b/arch/x86/kernel/smp.c
index 13f33ea..3b2e55e 100644
--- a/arch/x86/kernel/smp.c
+++ b/arch/x86/kernel/smp.c
@@ -172,6 +172,9 @@ void smp_reschedule_interrupt(struct pt_regs *regs)
{
ack_APIC_irq();
inc_irq_stat(irq_resched_count);
+ /*
+ * KVM uses this interrupt to force a cpu out of guest mode
+ */
}

void smp_call_function_interrupt(struct pt_regs *regs)