From patchwork Mon Feb 3 12:19:16 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Roger Pau Monne X-Patchwork-Id: 11362567 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 A73CA138D for ; Mon, 3 Feb 2020 12:20:24 +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 833F32082E for ; Mon, 3 Feb 2020 12:20:24 +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="cgB13nzC" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 833F32082E 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 1iyahU-0007v7-QK; Mon, 03 Feb 2020 12:19:36 +0000 Received: from us1-rack-iad1.inumbo.com ([172.99.69.81]) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1iyahT-0007uM-CP for xen-devel@lists.xenproject.org; Mon, 03 Feb 2020 12:19:35 +0000 X-Inumbo-ID: 6e27ee38-467f-11ea-ad98-bc764e2007e4 Received: from esa5.hc3370-68.iphmx.com (unknown [216.71.155.168]) by us1-rack-iad1.inumbo.com (Halon) with ESMTPS id 6e27ee38-467f-11ea-ad98-bc764e2007e4; Mon, 03 Feb 2020 12:19:31 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=citrix.com; s=securemail; t=1580732371; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=dvQW9MIsyWDQY5I+Bv2ITSBB5rrdAmVHJebyr3CDIl0=; b=cgB13nzCFCPl+TBdc0J27BafLTBaRtorHA7a3Zz7jDz7OQeMI6s7rbiO jWYd6mVI/t5POop4NlpjxaAEdOeeuX6uXhhiukV/L025vsHN3l/pC1+yw glhWQkv7YD4bjqytX4tmHlMiUpPPOMWAQqHo3vqwgawwDzd2PfYzh4HFM s=; 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: IGDWJU1o3O1XBPrhCZmkcJgvxkrr0tEI73RZ/BvEVXzKykK+NYk16u4Nmz+ewbEpj4HWvQDKNS 1HjhEtX37ukihXlgSK/7dFgk9liRLHDRbN3GCQ4ADhLZs+7CP1mZatWf/LyGWEXZ4jS/OwdYBJ rnZMauMa7Nt6ifhRpH6FRfyKBO8+EKuGnnIThnqWJEnoT6vI4kSZEUddsHu55F/kUyEnXYMn7v 6pw9saCXUBuSZBkmVsApI6tUzqjiP5Ln+mTevmbxBMQQ4qYYQUR3sDXmNIrwGYQemeduNII+up nvY= X-SBRS: 2.7 X-MesageID: 12208584 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.70,397,1574139600"; d="scan'208";a="12208584" From: Roger Pau Monne To: Date: Mon, 3 Feb 2020 13:19:16 +0100 Message-ID: <20200203121919.15748-2-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 1/4] 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 , Roger Pau Monne Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" When doing a virtual vmexit (ie: a vmexit handled by the L1 VMM) interrupts shouldn't be injected using the virtual interrupt delivery mechanism unless the Ack on exit vmexit control bit isn't set in the nested vmcs. Gate the call to nvmx_update_apicv helper on whether the nested vmcs has the Ack on exit bit set in the vmexit control field. Note that this fixes the usage of x2APIC by the L1 VMM, at least when the L1 VMM is Xen. Signed-off-by: Roger Pau Monné Reviewed-by: Kevin Tian , with a small comment: --- Changes since v1: - Call nvmx_update_apicv if the "Ack on exit" vmexit control bit isn't set. --- xen/arch/x86/hvm/vmx/vvmx.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/xen/arch/x86/hvm/vmx/vvmx.c b/xen/arch/x86/hvm/vmx/vvmx.c index d8ab167d62..3d97a293b2 100644 --- a/xen/arch/x86/hvm/vmx/vvmx.c +++ b/xen/arch/x86/hvm/vmx/vvmx.c @@ -1393,7 +1393,12 @@ 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 ) + 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) ) nvmx_update_apicv(v); nvcpu->nv_vmswitch_in_progress = 0;