On 16.05.2010, at 11:47, Avi Kivity wrote:
> 1: vcpu_run
> 2: KVM_INTERRUPT
> 2k: sets flag, if msr.ee IPIs 1 or wakes up 1 if halted
Doesn't that break when we have a while(1) loop in the guest with msr.ee=0
while no timer is scheduled on the host? But then again with msr.ee=0 we don't
get interrupts in the guest and to set msr.ee=1 we trap. Yeah, that would work.
> 1k: notices flag, if msr.ee injects interrupt
> ...
> 1g: acks
The ack is done in userspace by the mpic, so we can just complete the interrupt
there.
> 1k: forwards ack to userspace
> 1: completes interrupt
So if I just have a field kvm_run->external_active I could set that to =1 on
KVM_INTERRUPT including the above logic. To acknowledge it userspace would then
do something like this in kvm_arch_pre_run:
if (kvm_run->external_active &&
!((env->interrupt_request & CPU_INTERRUPT_HARD) &&
(env->irq_input_state & (1<<PPC_INPUT_INT))))
{
kvm_run->external_active = 0;
}
The big question is how to make such a change backwards compatible. But I guess
I could just reuse the feature enabling framework. Well, sounds like we're
getting closer.
Alex
--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html