From patchwork Thu Mar 26 15:27: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: 11460529 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 3571E92A for ; Thu, 26 Mar 2020 15:28:47 +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 1263F2073E for ; Thu, 26 Mar 2020 15:28:47 +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="OFqE2/9d" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 1263F2073E Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=citrix.com Authentication-Results: mail.kernel.org; spf=pass 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 1jHUQ6-0006xv-SG; Thu, 26 Mar 2020 15:27:46 +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 1jHUQ6-0006xi-2G for xen-devel@lists.xenproject.org; Thu, 26 Mar 2020 15:27:46 +0000 X-Inumbo-ID: 55fb24b8-6f76-11ea-880d-12813bfff9fa Received: from esa2.hc3370-68.iphmx.com (unknown [216.71.145.153]) by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS id 55fb24b8-6f76-11ea-880d-12813bfff9fa; Thu, 26 Mar 2020 15:27:43 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=citrix.com; s=securemail; t=1585236463; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=6fjiTrIRuEMMbz6K31zXO+vBOLjObAGvvwGKsTQeTO4=; b=OFqE2/9dkOenYoffFJAITfoOlqBRIUoerjSKkK5vQv/5dnoaEA0vh9Bk 0vd/IPiH4nv7SABlEnm7vPDZqVwf0FPHdmfn2WdFyJWWzl8VRCg3knRb4 nYxTXXCEv4PlP6DZsWEjYgyZezy8x3Z54mIDtS4u4Q6o4vbDFIEfRupqm Q=; Authentication-Results: esa2.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 (esa2.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=esa2.hc3370-68.iphmx.com; envelope-from="roger.pau@citrix.com"; x-sender="roger.pau@citrix.com"; x-conformance=sidf_compatible Received-SPF: Pass (esa2.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=esa2.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 (esa2.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=esa2.hc3370-68.iphmx.com; envelope-from="roger.pau@citrix.com"; x-sender="postmaster@mail.citrix.com"; x-conformance=sidf_compatible IronPort-SDR: UuvNZFzF9fMuF6eELqNAgiBpizqVKXaADCrnLlUegwHi0tpC4VqnJ3DvxHC1v0d9rgxAVcvStG IyRejFQ48XBRCZTOp5xo0EYKO1P3T/HCZFGNYFyn2bCGGDWspJRwWuaNukd90m1vdlc/q3K/M2 IwUpdTa3CBlO2ivCy32SenC675Wj3i/3wfs4/N5ZvsnDMQmse+ZR1jXvJRJVNiNsw2EOEZ6xES mEA4f9OBDxXAfoLeCiPPSNseP+KJLgjDl6sJ6eiWSb5cHeBW5eGyw/pkFuFplEhycmYw+Y/taj pMk= X-SBRS: 2.7 X-MesageID: 14702088 X-Ironport-Server: esa2.hc3370-68.iphmx.com X-Remote-IP: 162.221.158.21 X-Policy: $RELAYED X-IronPort-AV: E=Sophos;i="5.72,308,1580792400"; d="scan'208";a="14702088" From: Roger Pau Monne To: Date: Thu, 26 Mar 2020 16:27:17 +0100 Message-ID: <20200326152720.36970-2-roger.pau@citrix.com> X-Mailer: git-send-email 2.26.0 In-Reply-To: <20200326152720.36970-1-roger.pau@citrix.com> References: <20200326152720.36970-1-roger.pau@citrix.com> MIME-Version: 1.0 Subject: [Xen-devel] [PATCH v3 1/4] Revert "x86/vvmx: fix virtual interrupt injection when Ack on exit control is used" 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 , Jan Beulich , Roger Pau Monne Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" This reverts commit f96e1469ad06b61796c60193daaeb9f8a96d7458. The commit is wrong, as the whole point of nvmx_update_apicv is to update the guest interrupt status field when the Ack on exit VMEXIT control feature is enabled. Signed-off-by: Roger Pau Monné Reviewed-by: Kevin Tian --- xen/arch/x86/hvm/vmx/vvmx.c | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/xen/arch/x86/hvm/vmx/vvmx.c b/xen/arch/x86/hvm/vmx/vvmx.c index f049920196..1b8461ba30 100644 --- a/xen/arch/x86/hvm/vmx/vvmx.c +++ b/xen/arch/x86/hvm/vmx/vvmx.c @@ -1456,12 +1456,7 @@ static void virtual_vmexit(struct cpu_user_regs *regs) /* updating host cr0 to sync TS bit */ __vmwrite(HOST_CR0, v->arch.hvm.vmx.host_cr0); - if ( cpu_has_vmx_virtual_intr_delivery && - /* - * Only inject the vector if the Ack on exit bit is not set, else the - * interrupt will be signaled in the vmcs VM_EXIT_INTR_INFO field. - */ - !(get_vvmcs(v, VM_EXIT_CONTROLS) & VM_EXIT_ACK_INTR_ON_EXIT) ) + if ( cpu_has_vmx_virtual_intr_delivery ) nvmx_update_apicv(v); nvcpu->nv_vmswitch_in_progress = 0; From patchwork Thu Mar 26 15:27:18 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: 11460525 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 21ED992A for ; Thu, 26 Mar 2020 15:28:44 +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 F23052073E for ; Thu, 26 Mar 2020 15:28:43 +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="NO1D8L3K" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org F23052073E Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=citrix.com Authentication-Results: mail.kernel.org; spf=pass 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 1jHUQC-0006zy-Gb; Thu, 26 Mar 2020 15:27:52 +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 1jHUQB-0006zc-2c for xen-devel@lists.xenproject.org; Thu, 26 Mar 2020 15:27:51 +0000 X-Inumbo-ID: 575add26-6f76-11ea-880d-12813bfff9fa Received: from esa5.hc3370-68.iphmx.com (unknown [216.71.155.168]) by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS id 575add26-6f76-11ea-880d-12813bfff9fa; Thu, 26 Mar 2020 15:27:45 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=citrix.com; s=securemail; t=1585236465; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=NIPREif/onHf9hsOVxJhtJ9WqGIOV8KAuJcMQCcRLFA=; b=NO1D8L3KbbdfMmzKiP9Q0w3b/4nSeXF1ymfoVaxzyv4I3ZaXb27DoIVv 8FO78H/IbsNs8B/+GJfinEzhUY/TO+Zx2C6DVkTDlczCwm1xsC7w+80QT Dhm8ixXblpm90bMzZClK+9yF1KQg1ykaDZLF8HuyEvYlyayzTEdjdCjlr A=; Authentication-Results: esa5.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 (esa5.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=esa5.hc3370-68.iphmx.com; envelope-from="roger.pau@citrix.com"; x-sender="roger.pau@citrix.com"; x-conformance=sidf_compatible Received-SPF: Pass (esa5.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=esa5.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 (esa5.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=esa5.hc3370-68.iphmx.com; envelope-from="roger.pau@citrix.com"; x-sender="postmaster@mail.citrix.com"; x-conformance=sidf_compatible IronPort-SDR: pXYi/w6ziR3WGRK2NmaMAnPmJPzFPmYnpeLBzsoRdnEiHJ7lr4MYgpJmuMi0yPUoJuHElT2SeB h2HBYi8yJaSMsl7N0hHRDlc4i3ct8OTAZMGsTz5Gsco46DH2/Wc0tHPn8WYQCY1Zc/J9cmMXHh p2sPaSNflGnEnNMtrFBRJcDJBD2aKC4JSUIC6a8nGRs6DjHiIiDa7qMj70joBj0vxMLxLfx7sz w4L/8wDRpOKiQZVmAWNLyfmil3+5pGlZW1nYMJBroFUS5lola12aR/JYZ+K4TUVNElKZ6FoFRJ Ckg= X-SBRS: 2.7 X-MesageID: 15024600 X-Ironport-Server: esa5.hc3370-68.iphmx.com X-Remote-IP: 162.221.158.21 X-Policy: $RELAYED X-IronPort-AV: E=Sophos;i="5.72,308,1580792400"; d="scan'208";a="15024600" From: Roger Pau Monne To: Date: Thu, 26 Mar 2020 16:27:18 +0100 Message-ID: <20200326152720.36970-3-roger.pau@citrix.com> X-Mailer: git-send-email 2.26.0 In-Reply-To: <20200326152720.36970-1-roger.pau@citrix.com> References: <20200326152720.36970-1-roger.pau@citrix.com> MIME-Version: 1.0 Subject: [Xen-devel] [PATCH v3 2/4] x86/nvmx: only update SVI when using Ack on exit 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 , Jan Beulich , Roger Pau Monne Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" Check whether there's a valid interrupt in VM_EXIT_INTR_INFO in order to decide whether to update SVI in nvmx_update_apicv. If Ack on exit is not being used VM_EXIT_INTR_INFO won't have a valid interrupt and hence SVI shouldn't be updated to signal the interrupt is currently in service because it won't be Acked. Signed-off-by: Roger Pau Monné Reviewed-by: Kevin Tian --- xen/arch/x86/hvm/vmx/vvmx.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xen/arch/x86/hvm/vmx/vvmx.c b/xen/arch/x86/hvm/vmx/vvmx.c index 1b8461ba30..1753005c91 100644 --- a/xen/arch/x86/hvm/vmx/vvmx.c +++ b/xen/arch/x86/hvm/vmx/vvmx.c @@ -1383,7 +1383,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 = nvmx->intr.intr_info; + unsigned long intr_info = get_vvmcs(v, VM_EXIT_INTR_INFO); if ( reason == EXIT_REASON_EXTERNAL_INTERRUPT && nvmx->intr.source == hvm_intsrc_lapic && From patchwork Thu Mar 26 15:27:19 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: 11460527 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 6564792A for ; Thu, 26 Mar 2020 15:28:45 +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 4240A2073E for ; Thu, 26 Mar 2020 15:28:45 +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="FY32rahq" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 4240A2073E Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=citrix.com Authentication-Results: mail.kernel.org; spf=pass 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 1jHUQA-0006z2-5S; Thu, 26 Mar 2020 15:27:50 +0000 Received: from us1-rack-iad1.inumbo.com ([172.99.69.81]) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1jHUQ9-0006yn-HJ for xen-devel@lists.xenproject.org; Thu, 26 Mar 2020 15:27:49 +0000 X-Inumbo-ID: 594b16dc-6f76-11ea-bec1-bc764e2007e4 Received: from esa3.hc3370-68.iphmx.com (unknown [216.71.145.155]) by us1-rack-iad1.inumbo.com (Halon) with ESMTPS id 594b16dc-6f76-11ea-bec1-bc764e2007e4; Thu, 26 Mar 2020 15:27:48 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=citrix.com; s=securemail; t=1585236469; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=E0RqJOy+iqFqrACfiFIQ7AC4O2Lse7qalLgxHINLqlw=; b=FY32rahqd6EVtOqVySAGxRNJNmq3izv7NgX7vSm9Ry5Cbst0i31DwkjW NAs/7H1VlX1xJ08UPu3+DztyjzJAftclrCF3Ipte7qz8wcwnsrsEYLxwj qfak8ohR9mXkLtZr0SQ7VODRY0Ko6EmrWSI9vj6ICWJ53Cq8we+hvCYF7 w=; Authentication-Results: esa3.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 (esa3.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=esa3.hc3370-68.iphmx.com; envelope-from="roger.pau@citrix.com"; x-sender="roger.pau@citrix.com"; x-conformance=sidf_compatible Received-SPF: Pass (esa3.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=esa3.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 (esa3.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=esa3.hc3370-68.iphmx.com; envelope-from="roger.pau@citrix.com"; x-sender="postmaster@mail.citrix.com"; x-conformance=sidf_compatible IronPort-SDR: l9hcf7M/Cq3JOnWpM026DH8B7pD/dLAb2utL2Vu/yY3b+JDxAQNNr7//THZ+UYThXQ19Q9sKio W4Z7qcprxaXYXP1bwkEuw9uZhU/zxcXVJnxhlaeLNKpFGAEZLSHcSn8kJBPqOkmZ/kWX3j02aw layhBhTU/+GlhE3ajDPcSAduS5JFt7r/QLQO5Zj40jzhnKaJF0eG4ooTaJdpcfTdSgD1Jk13KH RrN5SyTrSejBCHHxaMp5HZ1vXpb8mIxWG90gx1HgommLxqVGE9XpSmsMxJONUsAKFvfxvcftVs HLM= X-SBRS: 2.7 X-MesageID: 14677251 X-Ironport-Server: esa3.hc3370-68.iphmx.com X-Remote-IP: 162.221.158.21 X-Policy: $RELAYED X-IronPort-AV: E=Sophos;i="5.72,308,1580792400"; d="scan'208";a="14677251" From: Roger Pau Monne To: Date: Thu, 26 Mar 2020 16:27:19 +0100 Message-ID: <20200326152720.36970-4-roger.pau@citrix.com> X-Mailer: git-send-email 2.26.0 In-Reply-To: <20200326152720.36970-1-roger.pau@citrix.com> References: <20200326152720.36970-1-roger.pau@citrix.com> MIME-Version: 1.0 Subject: [Xen-devel] [PATCH v3 3/4] x86/nvmx: split updating RVI from SVI in nvmx_update_apicv 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 , Jan Beulich , Roger Pau Monne Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" Updating SVI is required when an interrupt has been injected using the Ack on exit VMEXIT feature, so that the in service interrupt in the GUEST_INTR_STATUS matches the vector that is signaled in VM_EXIT_INTR_INFO. Updating RVI however is not tied to the Ack on exit feature, as it signals the next vector to be injected, and hence should always be updated to the next pending vector, regardless of whether Ack on exit is enabled. When not using the Ack on exit feature preserve the previous vector in SVI, so that it's not lost when RVI is updated to contain the pending vector to inject. Signed-off-by: Roger Pau Monné Reviewed-by: Kevin Tian , with one small comment: --- Changes since v2: - Return early if the exit reason != EXTERNAL_INTERRUPT. - Reduce the number of vmwrites by accumulating the changes to a local variable which is flushed at the end of the function. - Attempt to preserve the exiting SVI if Ack on exit is not enabled. --- xen/arch/x86/hvm/vmx/vvmx.c | 33 ++++++++++++++++++++++++--------- 1 file changed, 24 insertions(+), 9 deletions(-) diff --git a/xen/arch/x86/hvm/vmx/vvmx.c b/xen/arch/x86/hvm/vmx/vvmx.c index 1753005c91..39fb553590 100644 --- a/xen/arch/x86/hvm/vmx/vvmx.c +++ b/xen/arch/x86/hvm/vmx/vvmx.c @@ -1384,28 +1384,43 @@ static void nvmx_update_apicv(struct vcpu *v) struct nestedvmx *nvmx = &vcpu_2_nvmx(v); unsigned long reason = get_vvmcs(v, VM_EXIT_REASON); unsigned long intr_info = get_vvmcs(v, VM_EXIT_INTR_INFO); + unsigned long status; + int rvi; - if ( reason == EXIT_REASON_EXTERNAL_INTERRUPT && - nvmx->intr.source == hvm_intsrc_lapic && + if ( reason != EXIT_REASON_EXTERNAL_INTERRUPT ) + return; + + if ( nvmx->intr.source == hvm_intsrc_lapic && (intr_info & INTR_INFO_VALID_MASK) ) { - uint16_t status; - uint32_t rvi, ppr; - uint32_t vector = intr_info & 0xff; + uint32_t ppr; + unsigned int vector = intr_info & INTR_INFO_VECTOR_MASK; struct vlapic *vlapic = vcpu_vlapic(v); + /* + * Update SVI to record the current in service interrupt that's + * signaled in EXIT_INTR_INFO. + */ vlapic_ack_pending_irq(v, vector, 1); ppr = vlapic_set_ppr(vlapic); WARN_ON((ppr & 0xf0) != (vector & 0xf0)); status = vector << VMX_GUEST_INTR_STATUS_SVI_OFFSET; - rvi = vlapic_has_pending_irq(v); - if ( rvi != -1 ) - status |= rvi & VMX_GUEST_INTR_STATUS_SUBFIELD_BITMASK; + } + else + /* Keep previous SVI if there's any. */ + __vmread(GUEST_INTR_STATUS, &status); - __vmwrite(GUEST_INTR_STATUS, status); + rvi = vlapic_has_pending_irq(v); + if ( rvi != -1 ) + { + status &= ~VMX_GUEST_INTR_STATUS_SUBFIELD_BITMASK + status |= rvi & VMX_GUEST_INTR_STATUS_SUBFIELD_BITMASK; } + + if ( status ) + __vmwrite(GUEST_INTR_STATUS, status); } static void virtual_vmexit(struct cpu_user_regs *regs) From patchwork Thu Mar 26 15:27:20 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: 11460537 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 2A95992A for ; Thu, 26 Mar 2020 15:29:07 +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 06F2E2073E for ; Thu, 26 Mar 2020 15:29:06 +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="CpPgoWe2" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 06F2E2073E Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=citrix.com Authentication-Results: mail.kernel.org; spf=pass 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 1jHUQH-00072K-Qa; Thu, 26 Mar 2020 15:27:57 +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 1jHUQG-00071g-2y for xen-devel@lists.xenproject.org; Thu, 26 Mar 2020 15:27:56 +0000 X-Inumbo-ID: 5ad9e474-6f76-11ea-880d-12813bfff9fa Received: from esa1.hc3370-68.iphmx.com (unknown [216.71.145.142]) by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS id 5ad9e474-6f76-11ea-880d-12813bfff9fa; Thu, 26 Mar 2020 15:27:51 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=citrix.com; s=securemail; t=1585236472; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=Rm8lgcax/eattNk9bgOcTmt4k1EmHPT3s2dN93p3US0=; b=CpPgoWe294irTwPW5cDWtq8tOIVBfvnLypqFdacnktUvNjufjjU5k+7l MHtXsJAE6FXrzhLRMc/ChBM5oc9FHzbKPvlXdedd7YUYoHFz3yyeQQcpO vyb5wk8eONgP5pPOoZ4fbQGBGFQK0QCgTVH8an8wQ6vWTY/dtKie0DMH9 c=; Authentication-Results: esa1.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 (esa1.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=esa1.hc3370-68.iphmx.com; envelope-from="roger.pau@citrix.com"; x-sender="roger.pau@citrix.com"; x-conformance=sidf_compatible Received-SPF: Pass (esa1.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=esa1.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 (esa1.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=esa1.hc3370-68.iphmx.com; envelope-from="roger.pau@citrix.com"; x-sender="postmaster@mail.citrix.com"; x-conformance=sidf_compatible IronPort-SDR: hV5D2PVyXfBe5zxvCAm/qY9JurGPzC5CoY8ZbDLsg1JhFuyTQN0F/QO18dH4Wx5aMGMcSPMYUB nuJrvhO8OZmfTnAwBcIbiVPXsNAdGbyRIczL5VRzYLWJgrAGDh/OVk777kq6JxKn9MGjjc+Uh0 9Mf6PVk+zKxVJpG/vY1vieoK2UMv8NGGRS9h0Y/IoySI3SiejOSmQBPQbe+2txA12H3g9+dM2Z 0SV0+KK0dc4tFOcIY+pmZwcWzq9/BEMWtuyKwYjgtCi+jnMMfOETxCFxjyei9MpupFoZtktpps WLY= X-SBRS: 2.7 X-MesageID: 14905384 X-Ironport-Server: esa1.hc3370-68.iphmx.com X-Remote-IP: 162.221.158.21 X-Policy: $RELAYED X-IronPort-AV: E=Sophos;i="5.72,308,1580792400"; d="scan'208";a="14905384" From: Roger Pau Monne To: Date: Thu, 26 Mar 2020 16:27:20 +0100 Message-ID: <20200326152720.36970-5-roger.pau@citrix.com> X-Mailer: git-send-email 2.26.0 In-Reply-To: <20200326152720.36970-1-roger.pau@citrix.com> References: <20200326152720.36970-1-roger.pau@citrix.com> MIME-Version: 1.0 Subject: [Xen-devel] [PATCH v3 4/4] x86/nvmx: update exit bitmap when using virtual interrupt delivery 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 , Jan Beulich , Roger Pau Monne Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" Force an update of the EOI exit bitmap in nvmx_update_apicv, because the one performed in vmx_intr_assist might not be reached if the interrupt is intercepted by nvmx_intr_intercept returning true. Extract the code to update the exit bitmap from vmx_intr_assist into a helper and use it in nvmx_update_apicv. Signed-off-by: Roger Pau Monné Reviewed-by: Kevin Tian --- Changes since v2: - Only update the EOI exit bitmap if GUEST_INTR_STATUS is changed. Changes since v1: - Reword commit message. --- xen/arch/x86/hvm/vmx/intr.c | 21 +++++++++++++-------- xen/arch/x86/hvm/vmx/vvmx.c | 3 +++ xen/include/asm-x86/hvm/vmx/vmx.h | 2 ++ 3 files changed, 18 insertions(+), 8 deletions(-) diff --git a/xen/arch/x86/hvm/vmx/intr.c b/xen/arch/x86/hvm/vmx/intr.c index 49a1295f09..000e14af49 100644 --- a/xen/arch/x86/hvm/vmx/intr.c +++ b/xen/arch/x86/hvm/vmx/intr.c @@ -224,6 +224,18 @@ static int nvmx_intr_intercept(struct vcpu *v, struct hvm_intack intack) return 0; } +void vmx_sync_exit_bitmap(struct vcpu *v) +{ + const unsigned int n = ARRAY_SIZE(v->arch.hvm.vmx.eoi_exit_bitmap); + unsigned int i; + + while ( (i = find_first_bit(&v->arch.hvm.vmx.eoi_exitmap_changed, n)) < n ) + { + clear_bit(i, &v->arch.hvm.vmx.eoi_exitmap_changed); + __vmwrite(EOI_EXIT_BITMAP(i), v->arch.hvm.vmx.eoi_exit_bitmap[i]); + } +} + void vmx_intr_assist(void) { struct hvm_intack intack; @@ -318,7 +330,6 @@ void vmx_intr_assist(void) intack.source != hvm_intsrc_vector ) { unsigned long status; - unsigned int i, n; /* * intack.vector is the highest priority vector. So we set eoi_exit_bitmap @@ -379,13 +390,7 @@ void vmx_intr_assist(void) intack.vector; __vmwrite(GUEST_INTR_STATUS, status); - n = ARRAY_SIZE(v->arch.hvm.vmx.eoi_exit_bitmap); - while ( (i = find_first_bit(&v->arch.hvm.vmx.eoi_exitmap_changed, - n)) < n ) - { - clear_bit(i, &v->arch.hvm.vmx.eoi_exitmap_changed); - __vmwrite(EOI_EXIT_BITMAP(i), v->arch.hvm.vmx.eoi_exit_bitmap[i]); - } + vmx_sync_exit_bitmap(v); pt_intr_post(v, intack); } diff --git a/xen/arch/x86/hvm/vmx/vvmx.c b/xen/arch/x86/hvm/vmx/vvmx.c index 39fb553590..452f69e2f7 100644 --- a/xen/arch/x86/hvm/vmx/vvmx.c +++ b/xen/arch/x86/hvm/vmx/vvmx.c @@ -1420,7 +1420,10 @@ static void nvmx_update_apicv(struct vcpu *v) } if ( status ) + { __vmwrite(GUEST_INTR_STATUS, status); + vmx_sync_exit_bitmap(v); + } } static void virtual_vmexit(struct cpu_user_regs *regs) diff --git a/xen/include/asm-x86/hvm/vmx/vmx.h b/xen/include/asm-x86/hvm/vmx/vmx.h index b334e1ec94..111ccd7e61 100644 --- a/xen/include/asm-x86/hvm/vmx/vmx.h +++ b/xen/include/asm-x86/hvm/vmx/vmx.h @@ -610,6 +610,8 @@ void update_guest_eip(void); void vmx_pi_per_cpu_init(unsigned int cpu); void vmx_pi_desc_fixup(unsigned int cpu); +void vmx_sync_exit_bitmap(struct vcpu *v); + #ifdef CONFIG_HVM void vmx_pi_hooks_assign(struct domain *d); void vmx_pi_hooks_deassign(struct domain *d);