From nobody Sun Feb 8 20:59:17 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=none (zoho.com: 192.237.175.120 is neither permitted nor denied by domain of lists.xenproject.org) 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=1572274990; cv=none; d=zoho.com; s=zohoarc; b=iXe0IiXAualR3G+v+bker6wLBE2lRXdpEhZ2pCi8B1TO+Ar6f2lF5l21sLYDaq1Vg3Qu6m81cDtm0Q9isDrfhxNU54Z3woX+YDQZpi9n+zg3dFs9g5zhuvwRQnRzbaSMBaT2Xg9O5TB9fpw0GgRapUxOY0O32TATlCK1XQqdpC8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1572274990; 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=f02VIbr9w+z/FVXUc2iCs46gdOyolbIbocvmc7HcOX4=; b=UUulRtpDMFgclnQpR4rB6v7x6SA0d8yogYi9cE6Figq214EWjMnlxBIia5QbUkp3ZsyH8j0ICK7zH/PHvAk7iUC2MwMD8XIh8d0JgKwVw0/thbwdisX026JZhy2/8TGz/fln4Tdhg6YXN64AUAoeS02rJQ36UMbdirILvx+8JmE= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail; spf=none (zoho.com: 192.237.175.120 is neither permitted nor denied by domain of lists.xenproject.org) 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 1572274990691424.39038501361574; Mon, 28 Oct 2019 08:03:10 -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 1iP6Wu-0006uq-Da; Mon, 28 Oct 2019 15:02:00 +0000 Received: from us1-rack-iad1.inumbo.com ([172.99.69.81]) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1iP6Wt-0006ul-3m for xen-devel@lists.xenproject.org; Mon, 28 Oct 2019 15:01:59 +0000 Received: from esa1.hc3370-68.iphmx.com (unknown [216.71.145.142]) by us1-rack-iad1.inumbo.com (Halon) with ESMTPS id e303fdfc-f993-11e9-a531-bc764e2007e4; Mon, 28 Oct 2019 15:01:58 +0000 (UTC) X-Inumbo-ID: e303fdfc-f993-11e9-a531-bc764e2007e4 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=citrix.com; s=securemail; t=1572274918; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=ajLMHb3U5IZF63gkKBG5yBSvpZl5Z1pbb8itOEjvBQ4=; b=hi8PD1fYIMoEJxySK7x2i03AtxOk6wT0Hbo/i9bG5ax4iMVVXn2jVJhB sFYZzZwOlh61iXts2G5flTkDS7Pr6DjSmz07AuZg2IKtk9t7UyLA9Prr9 c45HLetT/Y61+8IkKIKsIITaOukXYF+ZvFW7b05lk5Z98sZ6Vnp3lTzp3 c=; Authentication-Results: esa1.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none; spf=None smtp.pra=andrew.cooper3@citrix.com; spf=Pass smtp.mailfrom=Andrew.Cooper3@citrix.com; spf=None smtp.helo=postmaster@mail.citrix.com Received-SPF: none (zoho.com: 192.237.175.120 is neither permitted nor denied by domain of lists.xenproject.org) 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 andrew.cooper3@citrix.com) identity=pra; client-ip=162.221.158.21; receiver=esa1.hc3370-68.iphmx.com; envelope-from="Andrew.Cooper3@citrix.com"; x-sender="andrew.cooper3@citrix.com"; x-conformance=sidf_compatible Received-SPF: Pass (esa1.hc3370-68.iphmx.com: domain of Andrew.Cooper3@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="Andrew.Cooper3@citrix.com"; x-sender="Andrew.Cooper3@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="Andrew.Cooper3@citrix.com"; x-sender="postmaster@mail.citrix.com"; x-conformance=sidf_compatible IronPort-SDR: KVtf7QtyzYyiWs0GAYpC5nrUqnfB4dXBKMCwV3gVdLfq3HTwngGer9fvIsefN38ypIAMzXoz3o 8Z/CCoJjUz0R3+3Hiv6MBzFUDsEdqCuTTxDpMfw3b7WOXqECyL/w/TrW4RpKbYLTq6JXMWFpm7 mGq2oo5SyGELzxWJk53OKLeaBCArOB9R+prPYVtgQQknDfaMg3+yyf/9/BFWKaoqMKW7NNOCnD wwY5SiVOw7xzoSSY32mbc/24R4zb+pZv4B3FL/5YwK0EQcb6ToMdTG683qazTGZjHVG5n7rWQn h1s= X-SBRS: 2.7 X-MesageID: 7606436 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.68,240,1569297600"; d="scan'208";a="7606436" From: Andrew Cooper To: Xen-devel Date: Mon, 28 Oct 2019 15:01:51 +0000 Message-ID: <20191028150152.21179-2-andrew.cooper3@citrix.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20191028150152.21179-1-andrew.cooper3@citrix.com> References: <20191028150152.21179-1-andrew.cooper3@citrix.com> MIME-Version: 1.0 Subject: [Xen-devel] [PATCH 1/2] x86/vtx: Corrections to BFD93 errata workaround 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: Juergen Gross , Kevin Tian , Jan Beulich , Wei Liu , Andrew Cooper , Jun Nakajima , =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) At the time of fixing c/s 20f1976b44, no obvious errata had been published, and BDF14 looked like the most obvious candidate. Subsequently, BDF93 has been published and it is obviously this. The erratum states that LER_TO_LIP is the only affected MSR. The provision= al fix in Xen adjusted LER_FROM_LIP, but this is not correct. The FROM MSRs a= re intended to have TSX metadata, and for steppings with TSX enabled, it will corrupt the value the guest sees, while for parts with TSX disabled, it is redundant with FIXUP_TSX. Drop the LER_FROM_LIP adjustment. Replace BDF14 references with BDF93, drop the redundant 'bdw_erratum_' pref= ix, and use an Intel vendor check, as other vendors implement VT-x. Signed-off-by: Andrew Cooper Reviewed-by: Jan Beulich Reviewed-by: Kevin Tian --- CC: Jan Beulich CC: Wei Liu CC: Roger Pau Monn=C3=A9 CC: Jun Nakajima CC: Kevin Tian CC: Juergen Gross --- xen/arch/x86/hvm/vmx/vmx.c | 45 +++++++++++++++++++++---------------------= --- 1 file changed, 21 insertions(+), 24 deletions(-) diff --git a/xen/arch/x86/hvm/vmx/vmx.c b/xen/arch/x86/hvm/vmx/vmx.c index 535e0384fe..32d289ce06 100644 --- a/xen/arch/x86/hvm/vmx/vmx.c +++ b/xen/arch/x86/hvm/vmx/vmx.c @@ -2369,7 +2369,7 @@ static void pi_notification_interrupt(struct cpu_user= _regs *regs) } =20 static void __init lbr_tsx_fixup_check(void); -static void __init bdw_erratum_bdf14_fixup_check(void); +static void __init bdf93_fixup_check(void); =20 const struct hvm_function_table * __init start_vmx(void) { @@ -2438,7 +2438,7 @@ const struct hvm_function_table * __init start_vmx(vo= id) setup_vmcs_dump(); =20 lbr_tsx_fixup_check(); - bdw_erratum_bdf14_fixup_check(); + bdf93_fixup_check(); =20 return &vmx_function_table; } @@ -2722,11 +2722,11 @@ enum =20 #define LBR_MSRS_INSERTED (1u << 0) #define LBR_FIXUP_TSX (1u << 1) -#define LBR_FIXUP_BDF14 (1u << 2) -#define LBR_FIXUP_MASK (LBR_FIXUP_TSX | LBR_FIXUP_BDF14) +#define LBR_FIXUP_BDF93 (1u << 2) +#define LBR_FIXUP_MASK (LBR_FIXUP_TSX | LBR_FIXUP_BDF93) =20 static bool __read_mostly lbr_tsx_fixup_needed; -static bool __read_mostly bdw_erratum_bdf14_fixup_needed; +static bool __read_mostly bdf93_fixup_needed; static uint32_t __read_mostly lbr_from_start; static uint32_t __read_mostly lbr_from_end; static uint32_t __read_mostly lbr_lastint_from; @@ -2763,11 +2763,18 @@ static void __init lbr_tsx_fixup_check(void) } } =20 -static void __init bdw_erratum_bdf14_fixup_check(void) +static void __init bdf93_fixup_check(void) { - /* Broadwell E5-2600 v4 processors need to work around erratum BDF14. = */ - if ( boot_cpu_data.x86 =3D=3D 6 && boot_cpu_data.x86_model =3D=3D 79 ) - bdw_erratum_bdf14_fixup_needed =3D true; + /* + * Broadwell erratum BDF93: + * + * Reads from MSR_LER_TO_LIP (MSR 1DEH) may return values for bits[63:= 61] + * that are not equal to bit[47]. Attempting to context switch this v= alue + * may cause a #GP. Software should sign extend the MSR. + */ + if ( boot_cpu_data.x86_vendor =3D=3D X86_VENDOR_INTEL && + boot_cpu_data.x86 =3D=3D 6 && boot_cpu_data.x86_model =3D=3D 0x4f= ) + bdf93_fixup_needed =3D true; } =20 static int is_last_branch_msr(u32 ecx) @@ -3128,8 +3135,8 @@ static int vmx_msr_write_intercept(unsigned int msr, = uint64_t msr_content) v->arch.hvm.vmx.lbr_flags |=3D LBR_MSRS_INSERTED; if ( lbr_tsx_fixup_needed ) v->arch.hvm.vmx.lbr_flags |=3D LBR_FIXUP_TSX; - if ( bdw_erratum_bdf14_fixup_needed ) - v->arch.hvm.vmx.lbr_flags |=3D LBR_FIXUP_BDF14; + if ( bdf93_fixup_needed ) + v->arch.hvm.vmx.lbr_flags |=3D LBR_FIXUP_BDF93; } =20 __vmwrite(GUEST_IA32_DEBUGCTL, msr_content); @@ -4148,20 +4155,10 @@ static void sign_extend_msr(struct vcpu *v, u32 msr= , int type) entry->data =3D canonicalise_addr(entry->data); } =20 -static void bdw_erratum_bdf14_fixup(void) +static void bdf93_fixup(void) { struct vcpu *curr =3D current; =20 - /* - * Occasionally, on certain Broadwell CPUs MSR_IA32_LASTINTTOIP has - * been observed to have the top three bits corrupted as though the - * MSR is using the LBR_FORMAT_EIP_FLAGS_TSX format. This is - * incorrect and causes a vmentry failure -- the MSR should contain - * an offset into the current code segment. This is assumed to be - * erratum BDF14. Fix up MSR_IA32_LASTINT{FROM,TO}IP by - * sign-extending into bits 48:63. - */ - sign_extend_msr(curr, MSR_IA32_LASTINTFROMIP, VMX_MSR_GUEST); sign_extend_msr(curr, MSR_IA32_LASTINTTOIP, VMX_MSR_GUEST); } =20 @@ -4171,8 +4168,8 @@ static void lbr_fixup(void) =20 if ( curr->arch.hvm.vmx.lbr_flags & LBR_FIXUP_TSX ) lbr_tsx_fixup(); - if ( curr->arch.hvm.vmx.lbr_flags & LBR_FIXUP_BDF14 ) - bdw_erratum_bdf14_fixup(); + if ( curr->arch.hvm.vmx.lbr_flags & LBR_FIXUP_BDF93 ) + bdf93_fixup(); } =20 /* Returns false if the vmentry has to be restarted */ --=20 2.11.0 _______________________________________________ Xen-devel mailing list Xen-devel@lists.xenproject.org https://lists.xenproject.org/mailman/listinfo/xen-devel