From patchwork Tue Aug 1 02:25:27 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Wanpeng Li X-Patchwork-Id: 9873585 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id D54F360365 for ; Tue, 1 Aug 2017 02:26:41 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id C1EBD28630 for ; Tue, 1 Aug 2017 02:26:41 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id B660F2863E; Tue, 1 Aug 2017 02:26:41 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, FREEMAIL_FROM, RCVD_IN_DNSWL_HI autolearn=unavailable version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id AC74428630 for ; Tue, 1 Aug 2017 02:26:40 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751759AbdHACZe (ORCPT ); Mon, 31 Jul 2017 22:25:34 -0400 Received: from mail-pg0-f67.google.com ([74.125.83.67]:33353 "EHLO mail-pg0-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751634AbdHACZd (ORCPT ); Mon, 31 Jul 2017 22:25:33 -0400 Received: by mail-pg0-f67.google.com with SMTP id u185so484684pgb.0; Mon, 31 Jul 2017 19:25:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=ywbc+SECkpw9GJNgLywlM74mZlztVQuh01f9ahhSwYY=; b=R2Ggp5IyXNTzSUWD4ruA0kayqp+sx9/Sjvi4l/R6NgzMW2ZtsTIYZ304bgZYCg7euf jCXTe1/zDfzVJuuJYOs8L4VakEBbbktNHq4zNhAo7O6a4+q4u1m5uE3gZRMK4EUd8ZOX CtKnoNhm9Pysad3/6oZ5RXmZcE/ss+wPzrwN0A7K2rHGPchy8PigF+RSNBoI5Gu/QJ3L IfeNZ2HLNIPyxfrCtOlN27xw/tDCrWaBPBglZjtrUuiA2jm+sNEqY11BO0fdG2jIYUuU m8TDZrODgTfP8ptAP00+fJKJTGELbNDKk/8v1c2AbwEBD1FburOX4r7HpUsHH4YROD17 qljg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=ywbc+SECkpw9GJNgLywlM74mZlztVQuh01f9ahhSwYY=; b=F0kl3aPTyYnW0DSVLmShyIXa0jlXBP6345eqNCLMpzOZZRFuplx4VxRIRDJ0S6SQxC C4VzkJvcH2CzOnTkn0YYswB690CsA4Oj/U/1OP3ss6Fji5qOmsXYGx/Jhs5ncDjclZfS Y4lpzml0/Y+9x2qOZ7ZMVLEx8+MilsrA78jHMCmRnYtYNQQWbv9mvhapJJ564ZG+3L2R XynRivIAFPQrXCOJINnKjtWufiNUYn64Jm2SVYlF8aSsreAD8KF5AzptiuvuRm7qVgKh il7Ngc+oWEbmlkVICxSQ8tlcmNIdHOGsSeFnCL1HbuzzOkKcJBjO2kebAd1JJoPnq6mx GnkA== X-Gm-Message-State: AIVw111ZKeMH8Nm2UlD8eTi2d/dIfLL3C60WEP52DhjrIEQnlhX+vl+4 Tu0Dk59t7M4nefKU X-Received: by 10.98.75.218 with SMTP id d87mr13527557pfj.135.1501554332413; Mon, 31 Jul 2017 19:25:32 -0700 (PDT) Received: from localhost ([203.205.141.123]) by smtp.gmail.com with ESMTPSA id e10sm28610042pgu.16.2017.07.31.19.25.31 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 31 Jul 2017 19:25:31 -0700 (PDT) From: Wanpeng Li X-Google-Original-From: Wanpeng Li To: linux-kernel@vger.kernel.org, kvm@vger.kernel.org Cc: Paolo Bonzini , =?UTF-8?q?Radim=20Kr=C4=8Dm=C3=A1=C5=99?= , Wanpeng Li Subject: [PATCH v2] KVM: nVMX: Fix attempting to emulate "Acknowledge interrupt on exit" when there is no interrupt which L1 requires to inject to L2 Date: Mon, 31 Jul 2017 19:25:27 -0700 Message-Id: <1501554327-3608-1-git-send-email-wanpeng.li@hotmail.com> X-Mailer: git-send-email 2.7.4 MIME-Version: 1.0 Sender: kvm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Wanpeng Li ------------[ cut here ]------------ WARNING: CPU: 5 PID: 2288 at arch/x86/kvm/vmx.c:11124 nested_vmx_vmexit+0xd64/0xd70 [kvm_intel] CPU: 5 PID: 2288 Comm: qemu-system-x86 Not tainted 4.13.0-rc2+ #7 RIP: 0010:nested_vmx_vmexit+0xd64/0xd70 [kvm_intel] Call Trace: vmx_check_nested_events+0x131/0x1f0 [kvm_intel] ? vmx_check_nested_events+0x131/0x1f0 [kvm_intel] kvm_arch_vcpu_ioctl_run+0x5dd/0x1be0 [kvm] ? vmx_vcpu_load+0x1be/0x220 [kvm_intel] ? kvm_arch_vcpu_load+0x62/0x230 [kvm] kvm_vcpu_ioctl+0x340/0x700 [kvm] ? kvm_vcpu_ioctl+0x340/0x700 [kvm] ? __fget+0xfc/0x210 do_vfs_ioctl+0xa4/0x6a0 ? __fget+0x11d/0x210 SyS_ioctl+0x79/0x90 do_syscall_64+0x8f/0x750 ? trace_hardirqs_on_thunk+0x1a/0x1c entry_SYSCALL64_slow_path+0x25/0x25 This can be reproduced by booting L1 guest w/ 'noapic' grub parameter, which means that tells the kernel to not make use of any IOAPICs that may be present in the system. Actually external_intr variable in nested_vmx_vmexit() is the req_int_win variable passed from vcpu_enter_guest() which means that the L0's userspace requests an irq window. I observed the scenario (!kvm_cpu_has_interrupt(vcpu) && L0's userspace reqeusts an irq window) is true, so there is no interrupt which L1 requires to inject to L2, we should not attempt to emualte "Acknowledge interrupt on exit" for the irq window requirement in this scenario. This patch fixes it by not attempt to emulate "Acknowledge interrupt on exit" if there is no L1 requirement to inject an interrupt to L2. Cc: Paolo Bonzini Cc: Radim Krčmář Signed-off-by: Wanpeng Li --- v1 -> v2: * update patch description * check nested_exit_intr_ack_set() first arch/x86/kvm/vmx.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c index 2737343..c5a0ab5 100644 --- a/arch/x86/kvm/vmx.c +++ b/arch/x86/kvm/vmx.c @@ -11118,8 +11118,9 @@ static void nested_vmx_vmexit(struct kvm_vcpu *vcpu, u32 exit_reason, vmx_switch_vmcs(vcpu, &vmx->vmcs01); - if ((exit_reason == EXIT_REASON_EXTERNAL_INTERRUPT) - && nested_exit_intr_ack_set(vcpu)) { + if (nested_exit_intr_ack_set(vcpu) && + exit_reason == EXIT_REASON_EXTERNAL_INTERRUPT && + kvm_cpu_has_interrupt(vcpu)) { int irq = kvm_cpu_get_interrupt(vcpu); WARN_ON(irq < 0); vmcs12->vm_exit_intr_info = irq |