From nobody Tue May 7 06:43:45 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=fail(p=none dis=none) header.from=citrix.com ARC-Seal: i=1; a=rsa-sha256; t=1585313226; cv=none; d=zohomail.com; s=zohoarc; b=KRBkPczxa3lDRvl0EK5wbgjmzQkoEILp0iGnaNmGxlJ0tZ1h8QNuOQLOPb6oysQr4Y/iMDoKTtGotaHopBJbEnDu6/YvBnSYfMkU4U64kLnCJdT0Jg21RpJTU77x3U8T+O1m/q/+7K3OCYx1slLe4wQHZbKdddKf733UvyeXZno= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1585313226; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=mgP7d/+BlpbmwzXDyjMTsrGbNbzYgJWbqNa7D/daS7M=; b=d0/tKTVHhivG/lp/Zi4zpaEmEbk+82e4P1vAWzsMQ63QakS0bS8a2D7D5QOonMGo1NwVEbrQYWsZVL1dBNm01WqvbEpPB6wMlaTBkZ+RXjIoiNtUZEUeWeEj5XtSWS+69Kd0u9pWvKYn6H8i/iq+x6XyE/bykVJqqh0/ZvSOLno= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1585313226608533.282333455476; Fri, 27 Mar 2020 05:47:06 -0700 (PDT) Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1jHoNf-0000Ll-Gq; Fri, 27 Mar 2020 12:46: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 1jHoNe-0000LR-7a for xen-devel@lists.xenproject.org; Fri, 27 Mar 2020 12:46:34 +0000 Received: from esa3.hc3370-68.iphmx.com (unknown [216.71.145.155]) by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS id fb10c7b7-7028-11ea-896b-12813bfff9fa; Fri, 27 Mar 2020 12:46:32 +0000 (UTC) X-Inumbo-ID: fb10c7b7-7028-11ea-896b-12813bfff9fa DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=citrix.com; s=securemail; t=1585313192; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=vuDzwVgr+LNfFk7axJFUEKJ0LDJ3Cp8KwBVbH5vk5Uw=; b=Irm3RGygx4SKITCAL5e8Yii29dbYaMsBF3RB1ghBz+FR3eOaU6XJA/Ol binxNdkgh3nAFJUSZLBOclGqwGxuwEdiuXLL0Dt1JOfFZDCsFaSoy5IKk lKrQ8q2tboxBz0n8BcbiLj9iQy1A+BjUj+Xt1ikPhrlmBSByznFzx4zfx 4=; 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: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; 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: O3r9oWbHWIiwQf5r5G6WWHi1vzAuFG8LeT33UtF6wB+yuHy2yGY5cOBf17nVEXLK6mv5bNQaib I3gEj6iB1HzdMa8q3j+BMiPhOAHYK977eXt7FXSPoWFuiuMWmXWro6k8+mRfMJCHUeaDbGmaR6 QFEnIB60/0vcXM7ejTTPYUrObLu5jH0PnIlMQ/wq7AkmCDhPFatD9iA52/Vyx4VKaPiH9ovZIX lj5LFagSyauUKBjR2Eh4RCtlsGXSH88hnTyvLyeobR4uE9BAvEw4U3RYTia78aAw8f/fpj438U rPw= X-SBRS: 2.7 X-MesageID: 14736035 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,312,1580792400"; d="scan'208";a="14736035" From: Roger Pau Monne To: Date: Fri, 27 Mar 2020 13:45:58 +0100 Message-ID: <20200327124559.47992-2-roger.pau@citrix.com> X-Mailer: git-send-email 2.26.0 In-Reply-To: <20200327124559.47992-1-roger.pau@citrix.com> References: <20200327124559.47992-1-roger.pau@citrix.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Subject: [Xen-devel] [PATCH v4 1/2] 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" X-ZohoMail-DKIM: fail (Header signature does not verify) 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=C3=A9 Reviewed-by: Kevin Tian --- Changes since v3: - Return early if interrupt source is not lapic. Changes since v2: - Return early if the exit reason !=3D 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 | 35 +++++++++++++++++++++++++---------- 1 file changed, 25 insertions(+), 10 deletions(-) diff --git a/xen/arch/x86/hvm/vmx/vvmx.c b/xen/arch/x86/hvm/vmx/vvmx.c index 1753005c91..d63f417f9c 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 =3D &vcpu_2_nvmx(v); unsigned long reason =3D get_vvmcs(v, VM_EXIT_REASON); unsigned long intr_info =3D get_vvmcs(v, VM_EXIT_INTR_INFO); + unsigned long status; + int rvi; =20 - if ( reason =3D=3D EXIT_REASON_EXTERNAL_INTERRUPT && - nvmx->intr.source =3D=3D hvm_intsrc_lapic && - (intr_info & INTR_INFO_VALID_MASK) ) + if ( reason !=3D EXIT_REASON_EXTERNAL_INTERRUPT || + nvmx->intr.source !=3D hvm_intsrc_lapic ) + return; + + if ( intr_info & INTR_INFO_VALID_MASK ) { - uint16_t status; - uint32_t rvi, ppr; - uint32_t vector =3D intr_info & 0xff; + uint32_t ppr; + unsigned int vector =3D intr_info & INTR_INFO_VECTOR_MASK; struct vlapic *vlapic =3D vcpu_vlapic(v); =20 + /* + * Update SVI to record the current in service interrupt that's + * signaled in EXIT_INTR_INFO. + */ vlapic_ack_pending_irq(v, vector, 1); =20 ppr =3D vlapic_set_ppr(vlapic); WARN_ON((ppr & 0xf0) !=3D (vector & 0xf0)); =20 status =3D vector << VMX_GUEST_INTR_STATUS_SVI_OFFSET; - rvi =3D vlapic_has_pending_irq(v); - if ( rvi !=3D -1 ) - status |=3D rvi & VMX_GUEST_INTR_STATUS_SUBFIELD_BITMASK; + } + else + /* Keep previous SVI if there's any. */ + __vmread(GUEST_INTR_STATUS, &status); =20 - __vmwrite(GUEST_INTR_STATUS, status); + rvi =3D vlapic_has_pending_irq(v); + if ( rvi !=3D -1 ) + { + status &=3D ~VMX_GUEST_INTR_STATUS_SUBFIELD_BITMASK; + status |=3D rvi & VMX_GUEST_INTR_STATUS_SUBFIELD_BITMASK; } + + if ( status ) + __vmwrite(GUEST_INTR_STATUS, status); } =20 static void virtual_vmexit(struct cpu_user_regs *regs) --=20 2.26.0 From nobody Tue May 7 06:43:45 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=fail(p=none dis=none) header.from=citrix.com ARC-Seal: i=1; a=rsa-sha256; t=1585313226; cv=none; d=zohomail.com; s=zohoarc; b=Vehfx6W5mgC5CuXGpDKrHw6I3wc/fJETuu8oOOKA5jlTZ22UY6HCNxXBwsgrZjbiUkQZz5uYM8FDm98Nlm2MFFrOumsTi4yuqNJ9SC++e+b+Hdg421uvnuwgDsgaf8jGqTsGNxVPuTdckatQnlkGOV2LLPTk0Boe6WoeRRhXue8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1585313226; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=BoiG/wApbIIUR158fnrLgGk0qQ9iFBdoUkSnUM7OF44=; b=ii/Kqp0IBLpHhD9piaNia/EORnyzjDkO3tW7Ia5ImS6R5sTzkYDkLl3/LIW05vFjiEr+h/Q7o2N9A0CG3aQMZY1uFtnhobN1j7J2lgfZWs7IEJRroIfy3WFNk2KugvN7V3xoDxL5cJpLmqp9LxBfdFjrGigdJrCdAuwLun81SNA= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1585313226116783.2086800280617; Fri, 27 Mar 2020 05:47:06 -0700 (PDT) Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1jHoNh-0000Mt-RF; Fri, 27 Mar 2020 12:46:37 +0000 Received: from us1-rack-iad1.inumbo.com ([172.99.69.81]) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1jHoNg-0000MV-LF for xen-devel@lists.xenproject.org; Fri, 27 Mar 2020 12:46:36 +0000 Received: from esa1.hc3370-68.iphmx.com (unknown [216.71.145.142]) by us1-rack-iad1.inumbo.com (Halon) with ESMTPS id fe39f8d6-7028-11ea-b34e-bc764e2007e4; Fri, 27 Mar 2020 12:46:36 +0000 (UTC) X-Inumbo-ID: fe39f8d6-7028-11ea-b34e-bc764e2007e4 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=citrix.com; s=securemail; t=1585313197; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=PWdgpf2VNFim4DASMFtIg4/oBbPoSZCn7kKHoBitgBU=; b=E8lq3qrMvvFN4Dk8XitPdn8FePiJq/6qPD+rgkEIpu0amvmNNK9PhGll kYxJ/+9PpNZm8TLKr8XWQALk0Nj0YEI3H6+a65T/Wif+59owr68jDLAo0 IsFGSQUuUk/dfbwzTZKZYGHA2ksm6QMIf5pPNR2Dnnf1wqoGJ6gs1gskK M=; 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: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; 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: JPDzjwieW00I2bvR5PisSMv0oiskvvsco3cMoo4t8fC9YSGw4VfD9s9KV1yHnf0REjCnN0QMI3 o4XGaMpMbGoudf1fvTUlM4QqnlmLE7jaHEzvxAqZhrUikoqljpLxUAkKt/QbnNIo6g4kZt6dez 3U3oYcrRbNIqvRwFjZVKStdNCSVp5idLO683OV31zP7DNSbCUEwZNSNqxoscdoxxcz/fh9HlOg 8Xqt2WOFlBZPVrRgm+JYzEmgBMTQEXpFGx8EuD4f8Q80YLcUAbC/6qYV/4vozuymHntu+DbGhr kBw= X-SBRS: 2.7 X-MesageID: 14965711 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,312,1580792400"; d="scan'208";a="14965711" From: Roger Pau Monne To: Date: Fri, 27 Mar 2020 13:45:59 +0100 Message-ID: <20200327124559.47992-3-roger.pau@citrix.com> X-Mailer: git-send-email 2.26.0 In-Reply-To: <20200327124559.47992-1-roger.pau@citrix.com> References: <20200327124559.47992-1-roger.pau@citrix.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Subject: [Xen-devel] [PATCH v4 2/2] 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" X-ZohoMail-DKIM: fail (Header signature does not verify) 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=C3=A9 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; } =20 +void vmx_sync_exit_bitmap(struct vcpu *v) +{ + const unsigned int n =3D ARRAY_SIZE(v->arch.hvm.vmx.eoi_exit_bitmap); + unsigned int i; + + while ( (i =3D 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 !=3D hvm_intsrc_vector ) { unsigned long status; - unsigned int i, n; =20 /* * 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); =20 - n =3D ARRAY_SIZE(v->arch.hvm.vmx.eoi_exit_bitmap); - while ( (i =3D 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); =20 pt_intr_post(v, intack); } diff --git a/xen/arch/x86/hvm/vmx/vvmx.c b/xen/arch/x86/hvm/vmx/vvmx.c index d63f417f9c..125cb87493 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) } =20 if ( status ) + { __vmwrite(GUEST_INTR_STATUS, status); + vmx_sync_exit_bitmap(v); + } } =20 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/vm= x/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); =20 +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); --=20 2.26.0