Andrea Arcangeli wrote:
> On Wed, Aug 13, 2008 at 10:05:06AM +0200, Jan Kiszka wrote:
>> Should this issue have been fixed meanwhile? I just gave latest git a
>> try and - as far as I recall my tests before holiday correctly - things
>> look the same. At least some Linux 2.6.23 kernel still hangs here during
>> early boot with -no-kvm-irqchip.
> 
> The trouble was that clearing the idt_vectoring_info before handling
> the exit_reason would lead to the handle_exception to fail setting the
> irq_pending bit because is_external_interrupt was run on zero instead
> of the vmcs IDT_VECTORING_INFO_FIELD, so it didn't notice it was an
> external interrupt generating the exit.
> 
> This makes the userland irqchip code work again for me, there seem to
> be no good reason to clear this value before returning in guest mode
> and only setting it to zero didn't look an effective debugging aid, so
> it's a microoptimization for the kernel irqchip too.
> 
> Signed-off-by: Andrea Arcangeli <[EMAIL PROTECTED]>

Solves the issue here as well. Thanks.

Tested-by: Jan Kiszka <[EMAIL PROTECTED]>

> 
> diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c
> index 337670b..3c82593 100644
> --- a/arch/x86/kvm/vmx.c
> +++ b/arch/x86/kvm/vmx.c
> @@ -2890,13 +2890,10 @@ static void vmx_complete_interrupts(struct vcpu_vmx 
> *vmx)
>                       kvm_queue_exception_e(&vmx->vcpu, vector, error);
>               } else
>                       kvm_queue_exception(&vmx->vcpu, vector);
> -             vmx->idt_vectoring_info = 0;
>       }
>       kvm_clear_interrupt_queue(&vmx->vcpu);
> -     if (idtv_info_valid && type == INTR_TYPE_EXT_INTR) {
> +     if (idtv_info_valid && type == INTR_TYPE_EXT_INTR)
>               kvm_queue_interrupt(&vmx->vcpu, vector);
> -             vmx->idt_vectoring_info = 0;
> -     }
>  }
>  
>  static void vmx_intr_assist(struct kvm_vcpu *vcpu)
> 


Attachment: signature.asc
Description: OpenPGP digital signature

Reply via email to