From patchwork Mon Feb 3 12:19:17 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Roger_Pau_Monn=C3=A9?= X-Patchwork-Id: 11362569 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 32CAD1395 for ; Mon, 3 Feb 2020 12:20:27 +0000 (UTC) Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 0E2952082E for ; Mon, 3 Feb 2020 12:20:26 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=citrix.com header.i=@citrix.com header.b="Mnqdcq0z" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 0E2952082E Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=citrix.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=xen-devel-bounces@lists.xenproject.org Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1iyahT-0007uT-Gr; Mon, 03 Feb 2020 12:19:35 +0000 Received: from all-amaz-eas1.inumbo.com ([34.197.232.57] helo=us1-amaz-eas2.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1iyahS-0007u9-Ed for xen-devel@lists.xenproject.org; Mon, 03 Feb 2020 12:19:34 +0000 X-Inumbo-ID: 6f5af14c-467f-11ea-8e54-12813bfff9fa Received: from esa4.hc3370-68.iphmx.com (unknown [216.71.155.144]) by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS id 6f5af14c-467f-11ea-8e54-12813bfff9fa; Mon, 03 Feb 2020 12:19:33 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=citrix.com; s=securemail; t=1580732373; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=+WP06psAabSWNj9MQ8yGgg2MdVrxR0ib/BtWDA94YBw=; b=Mnqdcq0zOtoyhgNAJA/0kNPzz48R0o49mXwOVqRksTGSYmuCryzIt9QH tNBO/3P1Bjkj9Z2e3nR53vkaaUc8HfkYS5U86yh7LCAFkIFrk1KC0Yv1E H5M5zb9M4OPozr8RNPfUTLqGEYpaM3lCbEJSS5cNa19cPD1nyPdqs7pxr I=; Authentication-Results: esa4.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none; spf=None smtp.pra=roger.pau@citrix.com; spf=Pass smtp.mailfrom=roger.pau@citrix.com; spf=None smtp.helo=postmaster@mail.citrix.com Received-SPF: None (esa4.hc3370-68.iphmx.com: no sender authenticity information available from domain of roger.pau@citrix.com) identity=pra; client-ip=162.221.158.21; receiver=esa4.hc3370-68.iphmx.com; envelope-from="roger.pau@citrix.com"; x-sender="roger.pau@citrix.com"; x-conformance=sidf_compatible Received-SPF: Pass (esa4.hc3370-68.iphmx.com: domain of roger.pau@citrix.com designates 162.221.158.21 as permitted sender) identity=mailfrom; client-ip=162.221.158.21; receiver=esa4.hc3370-68.iphmx.com; envelope-from="roger.pau@citrix.com"; x-sender="roger.pau@citrix.com"; x-conformance=sidf_compatible; x-record-type="v=spf1"; x-record-text="v=spf1 ip4:209.167.231.154 ip4:178.63.86.133 ip4:195.66.111.40/30 ip4:85.115.9.32/28 ip4:199.102.83.4 ip4:192.28.146.160 ip4:192.28.146.107 ip4:216.52.6.88 ip4:216.52.6.188 ip4:162.221.158.21 ip4:162.221.156.83 ip4:168.245.78.127 ~all" Received-SPF: None (esa4.hc3370-68.iphmx.com: no sender authenticity information available from domain of postmaster@mail.citrix.com) identity=helo; client-ip=162.221.158.21; receiver=esa4.hc3370-68.iphmx.com; envelope-from="roger.pau@citrix.com"; x-sender="postmaster@mail.citrix.com"; x-conformance=sidf_compatible IronPort-SDR: BhbgsFz+l1CJ5jkN0fCJpPABZ5tgsBOnzFPY+Wvg7HLwD5B2tMK2b7MW/AEju+kugj4EJlN6Bm oPYzw/udmDKibeT5zBy0jVxTA+N5RpelRCiRsbDazPyMv5ZjukkK2LfT2oDf9XCqGyq5qYq7vv WWGRGaAhUryY1llvidZJn1j3O7udsT/ZOubOAwX+nVstMa4LFlZbBfhAMCgo5YwyrBOMfkxoY6 lQeVMlDf8D8dmBoryd4L0+amEJr5s/Ik9E7fghAOyV0nOTfoXO7usgZ+gxk1C44o+h4SqoGT+y Jqk= X-SBRS: 2.7 X-MesageID: 12457218 X-Ironport-Server: esa4.hc3370-68.iphmx.com X-Remote-IP: 162.221.158.21 X-Policy: $RELAYED X-IronPort-AV: E=Sophos;i="5.70,397,1574139600"; d="scan'208";a="12457218" From: Roger Pau Monne To: Date: Mon, 3 Feb 2020 13:19:17 +0100 Message-ID: <20200203121919.15748-3-roger.pau@citrix.com> X-Mailer: git-send-email 2.25.0 In-Reply-To: <20200203121919.15748-1-roger.pau@citrix.com> References: <20200203121919.15748-1-roger.pau@citrix.com> MIME-Version: 1.0 Subject: [Xen-devel] [PATCH v2 2/4] x86/vvmx: fix VM_EXIT_ACK_INTR_ON_EXIT handling X-BeenThere: xen-devel@lists.xenproject.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Cc: Kevin Tian , Jun Nakajima , Wei Liu , Andrew Cooper , Roger Pau Monne Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" When VM_EXIT_ACK_INTR_ON_EXIT is set in the vmexit control vmcs register the bit 31 of VM_EXIT_INTR_INFO must be 0, in order to denote that the field doesn't contain any interrupt information. This is not currently acknowledged as the field always get filled with valid interrupt information, regardless of whether VM_EXIT_ACK_INTR_ON_EXIT is set. Fix this and only fill VM_EXIT_INTR_INFO when VM_EXIT_ACK_INTR_ON_EXIT is not set. Note that this requires one minor change in nvmx_update_apicv in order to obtain the interrupt information from the internal state rather than the nested vmcs register. Signed-off-by: Roger Pau Monné Reviewed-by: Kevin Tian --- Changes since v1: - New in this version. --- xen/arch/x86/hvm/vmx/vvmx.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/xen/arch/x86/hvm/vmx/vvmx.c b/xen/arch/x86/hvm/vmx/vvmx.c index 3d97a293b2..47eee1e5b9 100644 --- a/xen/arch/x86/hvm/vmx/vvmx.c +++ b/xen/arch/x86/hvm/vmx/vvmx.c @@ -1283,6 +1283,7 @@ static void load_vvmcs_host_state(struct vcpu *v) static void sync_exception_state(struct vcpu *v) { struct nestedvmx *nvmx = &vcpu_2_nvmx(v); + uint32_t exit_ctrl = get_vvmcs(v, VM_EXIT_CONTROLS); if ( !(nvmx->intr.intr_info & INTR_INFO_VALID_MASK) ) return; @@ -1294,7 +1295,8 @@ static void sync_exception_state(struct vcpu *v) set_vvmcs(v, VM_EXIT_REASON, EXIT_REASON_EXTERNAL_INTERRUPT); set_vvmcs(v, EXIT_QUALIFICATION, 0); set_vvmcs(v, VM_EXIT_INTR_INFO, - nvmx->intr.intr_info); + (exit_ctrl & VM_EXIT_ACK_INTR_ON_EXIT) ? nvmx->intr.intr_info + : 0); break; case X86_EVENTTYPE_HW_EXCEPTION: @@ -1320,7 +1322,7 @@ static void nvmx_update_apicv(struct vcpu *v) { struct nestedvmx *nvmx = &vcpu_2_nvmx(v); unsigned long reason = get_vvmcs(v, VM_EXIT_REASON); - uint32_t intr_info = get_vvmcs(v, VM_EXIT_INTR_INFO); + uint32_t intr_info = nvmx->intr.intr_info; if ( reason == EXIT_REASON_EXTERNAL_INTERRUPT && nvmx->intr.source == hvm_intsrc_lapic &&