KVM: x86: use smp_send_reschedule in kvm_vcpu_kick
diff mbox

Message ID 1236596946.8389.340.camel@laptop
State Not Applicable
Headers show

Commit Message

Peter Zijlstra March 9, 2009, 11:09 a.m. UTC
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(-)



--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Patch
diff mbox

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)