From nobody Mon Sep 28 04:08:39 2026 Received: from mail-pg1-f200.google.com (mail-pg1-f200.google.com [209.85.215.200]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 60BFA3B8111 for ; Wed, 26 Aug 2026 23:39:22 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.200 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787787563; cv=none; b=BGvL633XZ1Q2c2r7B6WktSv2eB28qglz0FxXIFn3kazSuYHRbIK+QrEUx3/mOlzHfS+0ZQjRLDpFUtbee3YaKOBlxkBLYzZpZY+hSLwoA5PepR1jgduR3zc3b2oQj7DCFybtnZZSHqhilBraMadBduc8KwpwTX5p1M4ekn0Ik5A= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787787563; c=relaxed/simple; bh=8Kw3Nj7xOGrbmUBSV/kVU/ochnXj0oWLrOcYJzQlq9k=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=ZQ1+vboTu3zBo4xwKD3uFnrykgJgqJROI9zi4yRerIuZqRrqmbRSHGN4RpmQxjuaJa1t4l1SRHGjsFMBsUKEeQ85+N3c4qSry/zQW3DnKn/NMPV571UaEMFG84fZGcuiscjZo7F5vYJwAQyWnZ75saO8ZE7fEERzuNEf+qwyWeM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--seanjc.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=GGbRjvei; arc=none smtp.client-ip=209.85.215.200 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--seanjc.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="GGbRjvei" Received: by mail-pg1-f200.google.com with SMTP id 41be03b00d2f7-cbb20f82a0eso91586a12.0 for ; Wed, 26 Aug 2026 16:39:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1787787562; x=1788392362; darn=vger.kernel.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:reply-to:from:to:cc:subject:date:message-id :reply-to:content-type; bh=6KDDUNP2gAbt/e9olovJkhStLhLbdjWDJkc7h/s+5jY=; b=GGbRjveikoNGetF7QrLF+NAAKA3sL6KQFZCt7BQs5Kp61lUGryzyV9iOcfrwBDkFB1 RUOoT0Vz6a0ayrzVbqjkzoHQUaOWHhuZJqBM4jtOpUP4fLdvkTafictHuxZTplsG8PHw la4utzs0JucFNq4THvGkXzRDta7alFqF6Dk5sN8eb/NbZdurNvZdGhZRKaEH+BHUlEjs OWbn3E4WRvPt5R1qL3pmrMemu0EXUp6TmC6UF1O9qQc+vIIeEs/H7tRSM8YtcPGqRXB1 zV12F4AMqSOkfpCsAlDf904l9xoTItWZXAesYtPLaxeAJyWflDYSQlzudvqUOv4r9Dk3 s9yg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787787562; x=1788392362; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:reply-to:x-gm-message-state:from:to:cc:subject :date:message-id:reply-to:content-type; bh=6KDDUNP2gAbt/e9olovJkhStLhLbdjWDJkc7h/s+5jY=; b=cHxAPVvjHo9hvXJ5VE5FpISDHuOdLIZhAcvMd5sQNbp1yA4O94z+ynEtNPsvQf48Hn 3/EEBgh46GSHzZi33Qy9Es+/GRd86hOw4b367g4pYK29Tn2H79E1rbqV18fquogqa0it CWpLoMySJOCLADqUgwu9TBZ5T/QnY/DSW5gyNiLHVtvcet/YGfABTiEM2oVAhWRRchMO mJ7mZuSqRAMy8DpS0ah2a10kAQUqyUunsVTBfUI8p2ya8UTo5wBBgPAuapVWV3xOC6/H se7IYd9++bR1e2tlczlU1tGMTooS6ShLNV3LO9hv1VyHs21b8nCSRnW+PBAuHL4Rl9p4 +Mfw== X-Forwarded-Encrypted: i=1; AHgh+RrAthq+zxK3maREUetBRjYkHwOEEjzSuf1goUv0jyiadtDV09MAe77WKA0wTCTO/7xxEGVxqUTyUAglflI=@vger.kernel.org X-Gm-Message-State: AFuF++mr9Jxsr23KSCysDLCs+Cgxo9+hWY60YRtFkbtI5LH/YpI+Ovye s+tOeTL3J9m00UrayZ7lrCXBjKveXMTX+cM8ANtVO8+PyW9kkK5oezFYOEy5pXfkfDh/N6KsKxk S8kRBGQ== X-Received: from pga9.prod.google.com ([2002:a05:6a02:4f89:b0:cc1:be9e:35ed]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a21:8986:b0:3d0:868d:8ccb with SMTP id adf61e73a8af0-3d0868d974amr10614945637.13.1787787561472; Wed, 26 Aug 2026 16:39:21 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 26 Aug 2026 16:39:07 -0700 In-Reply-To: <20260826233919.998904-1-seanjc@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260826233919.998904-1-seanjc@google.com> X-Mailer: git-send-email 2.55.0.887.g758fc8c411-goog Message-ID: <20260826233919.998904-2-seanjc@google.com> Subject: [PATCH v3 01/13] KVM: nVMX: Make VMPTRLD result in #UD when eVMCS is used From: Sean Christopherson To: Sean Christopherson , Paolo Bonzini Cc: kvm@vger.kernel.org, linux-kernel@vger.kernel.org, f734222792@gmail.com, Vitaly Kuznetsov , Sashiko Bot , Yosry Ahmed Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Vitaly Kuznetsov VMPTRLD with active eVMCS is already forbidden, however, returning 1 without skipping the instruction or queuing an exception will likely result in L1 getting stuck. Genuine Hyper-V seems to inject #UD under similar circumstances, mimic the behavior in KVM. Reported-by: f734222792@gmail.com Link: https://bugzilla.kernel.org/show_bug.cgi?id=3D221841 Suggested-by: Sean Christopherson Signed-off-by: Vitaly Kuznetsov Signed-off-by: Sean Christopherson --- arch/x86/kvm/vmx/nested.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/arch/x86/kvm/vmx/nested.c b/arch/x86/kvm/vmx/nested.c index 151873407abd..ad3726fd4fda 100644 --- a/arch/x86/kvm/vmx/nested.c +++ b/arch/x86/kvm/vmx/nested.c @@ -5897,6 +5897,12 @@ static int handle_vmptrld(struct kvm_vcpu *vcpu) if (!nested_vmx_check_permission(vcpu)) return 1; =20 + /* Forbid normal VMPTRLD if Enlightened version was used */ + if (nested_vmx_is_evmptr12_valid(vmx)) { + kvm_queue_exception(vcpu, UD_VECTOR); + return 1; + } + if (nested_vmx_get_vmptr(vcpu, &vmptr, &r)) return r; =20 @@ -5906,10 +5912,6 @@ static int handle_vmptrld(struct kvm_vcpu *vcpu) if (vmptr =3D=3D vmx->nested.vmxon_ptr) return nested_vmx_fail(vcpu, VMXERR_VMPTRLD_VMXON_POINTER); =20 - /* Forbid normal VMPTRLD if Enlightened version was used */ - if (nested_vmx_is_evmptr12_valid(vmx)) - return 1; - if (vmx->nested.current_vmptr !=3D vmptr) { struct gfn_to_hva_cache *ghc =3D &vmx->nested.vmcs12_cache; struct vmcs_hdr hdr; --=20 2.55.0.887.g758fc8c411-goog From nobody Mon Sep 28 04:08:39 2026 Received: from mail-pj1-f72.google.com (mail-pj1-f72.google.com [209.85.216.72]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2D39E3B8D5C for ; Wed, 26 Aug 2026 23:39:23 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.72 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787787570; cv=none; b=p0bP8XuqtpVQVhp4CIHa6RhiCqr0CUS9i1ETdoEwvRZ7mQuFJuGulkcR0GmAw+30RDJMfb///Pkcew7ngGq/q/m/nZyG0vEjEf0pd1rN3JGwQZ+H4j5p7rmgP0r8czcX3PNvpnXBv7bTxReqNSjvi3oTiwpjLXrXgPI+M8khLCA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787787570; c=relaxed/simple; bh=LBn4L8NUDl0yvODO+6G9Egy3RyVXyCAyGY5Rk7DQUAo=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=cXpMjCH+fyZBk5P5iBQO3kAoxmmt5vOwUe9upT7LqIH9U0oxdIyGAf1zIzvOv+reYZuVEZhFe+Go9wpJUzm158DNWEn6ooc45qhC8KLVA38YMNrtxE/Wr/kJpSpz2Anc1LUhB5opBi6eqKzgNXKaTkBf+R4QVxd7isQD0VGHFns= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--seanjc.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=HtJI+7WD; arc=none smtp.client-ip=209.85.216.72 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--seanjc.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="HtJI+7WD" Received: by mail-pj1-f72.google.com with SMTP id 98e67ed59e1d1-38f283baf1fso2319265a91.3 for ; Wed, 26 Aug 2026 16:39:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1787787563; x=1788392363; darn=vger.kernel.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:reply-to:from:to:cc:subject:date:message-id :reply-to:content-type; bh=5AUNZFgs1KdCrvguiFO2LLkObL9OkQrih/oCexn450g=; b=HtJI+7WD3sG/O8u4+8NREzlKU9H2GKGk60/o7LEDw5gYq4MyfhE0Z/wrobAiCcpcEW 3CdUTg++kzZG/wlIC0bhGF0nfibr6fzxHp3MGSaH2jtScdNs4j0Tj/m5gqSq43wpuZ8i UqCxjvfm0HBkKcnoba32oRU8RUxnYg53Vf01YgCXpS4I89Z+YwwOr8IOB14t/zi3Dnkc HvdmYqSrLxxR7ZWyP0w2qDcxlToUAercVGqEdO8OaUR89YL0sLrzXTfo0jh2APo7iCYO arOp9TyFpsjSOe9b2M5KEN+MhCVi60Yj+tynud+m7v9846nL/sAu8yF+nAM0F5Xp1k35 QqqQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787787563; x=1788392363; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:reply-to:x-gm-message-state:from:to:cc:subject :date:message-id:reply-to:content-type; bh=5AUNZFgs1KdCrvguiFO2LLkObL9OkQrih/oCexn450g=; b=keNYbI4XlLnpe6R9caQNzE7LkWXGGUhI6HzKAfIVLAQvSG5DkPZgUWT3uuw1hlyKYi p6OE4b/v3LbSRnYefSw22jlrzySTEHigirvRm/WUgEdtewElOx5gPVoHUCKx9Xxuwme3 SK+X6J1+G5Mov8N6eOkwHG7ZkiBLx/fsUZF1go4aPH6MZwVU2t1J+1tZ7Ld1x2Gn1h/f QHP0zPC5kyl7Zkax2r3M142w3c0GoZC1zH9WZ/csw0EedP9lHPBQl4pYHC3T4oySsx0L uPJpAEeFbzlY12Jqc0kuWJN2lf0AS+DH178T6GE7FGmRgSpZAoUeeaIpj18SzoGRtFYg o7mA== X-Forwarded-Encrypted: i=1; AHgh+RoneAliRLmqQqlvfWvDdxAQwzRsUKyQ4oR0lsoaR/IkUi1byXiAParFh4JGYPlvk9m79P4GZ1wWR/ya3iE=@vger.kernel.org X-Gm-Message-State: AFuF++ndASC17wc69DLyM27AVVVBIWoSQTwGl2Rln6V8rRr6bNGXlgCF M2J92UTTAjejhQk1IufuFkm+Lo288ULtcrVnW74G4d25myk5IDh6eOnDgWAhaS3eqYt4+9zwAM1 4yv+rGQ== X-Received: from pgbcf9.prod.google.com ([2002:a05:6a02:849:b0:cc1:b96e:df3]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a20:e290:b0:3d1:66cb:d49 with SMTP id adf61e73a8af0-3d166cb0e18mr244423637.4.1787787563139; Wed, 26 Aug 2026 16:39:23 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 26 Aug 2026 16:39:08 -0700 In-Reply-To: <20260826233919.998904-1-seanjc@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260826233919.998904-1-seanjc@google.com> X-Mailer: git-send-email 2.55.0.887.g758fc8c411-goog Message-ID: <20260826233919.998904-3-seanjc@google.com> Subject: [PATCH v3 02/13] KVM: nVMX: Make VMPTRST return eVMCS GPA when it is used From: Sean Christopherson To: Sean Christopherson , Paolo Bonzini Cc: kvm@vger.kernel.org, linux-kernel@vger.kernel.org, f734222792@gmail.com, Vitaly Kuznetsov , Sashiko Bot , Yosry Ahmed Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Vitaly Kuznetsov VMPTRST with active eVMCS is currently forbidden, however, returning 1 without skipping the instruction will likely result in L1 getting stuck. While TLFS does not specify the expected behavior, genuine Hyper-V seems to be returning eVMCS GPA. Implement the same behavior in KVM. Reported-by: f734222792@gmail.com Link: https://bugzilla.kernel.org/show_bug.cgi?id=3D221841 Signed-off-by: Vitaly Kuznetsov Signed-off-by: Sean Christopherson --- arch/x86/kvm/vmx/nested.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/arch/x86/kvm/vmx/nested.c b/arch/x86/kvm/vmx/nested.c index ad3726fd4fda..3058efa65c82 100644 --- a/arch/x86/kvm/vmx/nested.c +++ b/arch/x86/kvm/vmx/nested.c @@ -5964,7 +5964,7 @@ static int handle_vmptrst(struct kvm_vcpu *vcpu) { unsigned long exit_qual =3D vmx_get_exit_qual(vcpu); u32 instr_info =3D vmcs_read32(VMX_INSTRUCTION_INFO); - gpa_t current_vmptr =3D to_vmx(vcpu)->nested.current_vmptr; + gpa_t current_vmptr; struct x86_exception e; gva_t gva; int r; @@ -5972,8 +5972,16 @@ static int handle_vmptrst(struct kvm_vcpu *vcpu) if (!nested_vmx_check_permission(vcpu)) return 1; =20 - if (unlikely(nested_vmx_is_evmptr12_valid(to_vmx(vcpu)))) - return 1; + /* + * Hyper-V TLFS does not specify the behavior of VMPTRST when eVMCS is us= ed + * but genuine Hyper-V seems to be returning eVMCS GPA. + */ +#ifdef CONFIG_KVM_HYPERV + if (nested_vmx_is_evmptr12_valid(to_vmx(vcpu))) + current_vmptr =3D to_vmx(vcpu)->nested.hv_evmcs_vmptr; + else +#endif + current_vmptr =3D to_vmx(vcpu)->nested.current_vmptr; =20 if (get_vmx_mem_address(vcpu, exit_qual, instr_info, true, sizeof(gpa_t), &gva)) --=20 2.55.0.887.g758fc8c411-goog From nobody Mon Sep 28 04:08:39 2026 Received: from mail-pf1-f199.google.com (mail-pf1-f199.google.com [209.85.210.199]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4DBAA3C3F55 for ; Wed, 26 Aug 2026 23:39:25 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.199 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787787569; cv=none; b=WnuSxMcLQBk2X/268NWqpOH+Z9X6Mk+pJUZusaW39y7gbYFsM0mLj2aNzptJxDxiltg9Zv7WuKrKEcBtmjjmQB27bRFSNrTzMmePJ6PnvjvJqZilDZ1IotpNBDaFBhpEFDDXEDrpIFV+AkaM+2tKyC7nT5zX4ag94tX9S8lnedA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787787569; c=relaxed/simple; bh=T2cASy/A5gmcwzlkeCr8k/+0qt1+e/cVRhWTFQSgJ94=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=B47FMXFf+4J72Jh6amrsUXWGvMhLsibiy9+8Lff9+9cWdK8xrPbJ6OrLp4q33tNazVmH4YFzJnIvtqjTOMVRAbxLl+0ljBmF/VHOzfzW/I3HfKaA0jv/I3JbdOHyd19DOU5Zrp7v2OLrvMBdly/rJz3+rU+dG+x2GIMjItxw7Og= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--seanjc.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=JsovOSfR; arc=none smtp.client-ip=209.85.210.199 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--seanjc.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="JsovOSfR" Received: by mail-pf1-f199.google.com with SMTP id d2e1a72fcca58-84e048a801dso2205025b3a.3 for ; Wed, 26 Aug 2026 16:39:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1787787565; x=1788392365; darn=vger.kernel.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:reply-to:from:to:cc:subject:date:message-id :reply-to:content-type; bh=AWa0fIdmVto+y2WP+GJGN8aDkmGU1CjNONs+72349AE=; b=JsovOSfRR6SVRX/2WRCMEBCk/mIAPIGH88bjX2Fmpan13tEZGMDAGKCOeCYkTOT6Mz VqBLUxkHDwgD0mjRK2Swwlts+yr8EUqRJVrPrcG9PPyX2ZznrgeyjXEe/5PS83Kmi5yV K5oAILCwxoW+EIG0n4EC7+5q/8OOuptXEjJlhlxpKRAm3rojRfpUP6Yj42PkVenw2fT/ 8e7e4rEfFvGQStrFbWcbkDvqoy3MqkQBZNPALb4bEgaW+uC61BHavO7/V5QtjWCV/51J yI9vnOsyM7e8dI+lhP2ez9qESbZ42U4trfdCa+L6V/F0uyb9LRJY3sKFPIJeFdqfw54b 1yWA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787787565; x=1788392365; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:reply-to:x-gm-message-state:from:to:cc:subject :date:message-id:reply-to:content-type; bh=AWa0fIdmVto+y2WP+GJGN8aDkmGU1CjNONs+72349AE=; b=Qt2xP2hsHWJEE3Ih8jKenagNxlIAiipxedfGuH8y8Dtq4WUYFHfiDhGHAnxDnqLp20 N3hu9n1OCrNufLdvoRACJNDhn5nw7OtEk43VGB11L5tg+WO+eUbBQ4jFSMjq2fLHp9yf jePvYxbl2NyPkFNykGTQf1iBgs7mKeY3QfrzRognEY8cMliitgk9aJ5VPKmsm0dstPhF +eD9tbRnwn+RXDgWNpMYhEv/hy+R4jwJR/6waVE1nFHUbcSjuPVmHrCwijwRE6RvJ07N OO5ZP76qrU5WpcrgdXJRdsxUv8W7LK7GKx5RI2XcbIi/iBSRNvTohAODxDpVMzF0VpA2 w3fQ== X-Forwarded-Encrypted: i=1; AHgh+RpRga1uQtvwaFg616Su62Rim/LjCNWCIr851/iS7JWa60XNxjCJTU8F2WawTEqQeNEau1pRY++nHbCXmmg=@vger.kernel.org X-Gm-Message-State: AFuF++kxImK7MH+RhBUozJQSw/ixeC8XDyMYp1CqSewNCYtTP7ao5Czb diWNeCwRuKM/35qm2xw7PeHUUpEMOtB9mFPqDhz9wQE0GtNpwhjx2kDz+YYeJGWW+K5VajfJXyz vpnICVQ== X-Received: from pgkp18.prod.google.com ([2002:a63:f452:0:b0:c92:11a5:bbce]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a00:2da3:b0:84f:5cd7:e3c6 with SMTP id d2e1a72fcca58-853721a6aecmr16693779b3a.5.1787787564303; Wed, 26 Aug 2026 16:39:24 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 26 Aug 2026 16:39:09 -0700 In-Reply-To: <20260826233919.998904-1-seanjc@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260826233919.998904-1-seanjc@google.com> X-Mailer: git-send-email 2.55.0.887.g758fc8c411-goog Message-ID: <20260826233919.998904-4-seanjc@google.com> Subject: [PATCH v3 03/13] KVM: selftests: Don't clobber RFLAGS in happy path of __KVM_ASM_SAFE() From: Sean Christopherson To: Sean Christopherson , Paolo Bonzini Cc: kvm@vger.kernel.org, linux-kernel@vger.kernel.org, f734222792@gmail.com, Vitaly Kuznetsov , Sashiko Bot , Yosry Ahmed Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Use a straight MOV instead of an XOR to zero R9 in the non-faulting path of __KVM_ASM_SAFE() so as not to clobber RFLAGS. XOR generates smaller code, but optimizing performance by minimizing the code footprint is just about the last thing that KVM selftests care about. The bug is relatively benign in the current code base, e.g. it marginally degrades the coverage in the fastops test, but otherwise does no harm. But the bug will become actively problematic if/when the "safe assembly" macros are used for instructions that communicate results via RFLAGS, e.g. for VMX instructions, which signal failure via RFLAGS.CF and RFLAGS.ZF. Opportunistically use R9D instead of the full R9, as bits 63:32 of GPRs are zeroed on writes to bit 31:0. Reported-by: Sashiko Bot Closes: https://lore.kernel.org/all/20260818165258.2613603-5-vkuznets@redha= t.com Cc: Vitaly Kuznetsov Signed-off-by: Sean Christopherson --- tools/testing/selftests/kvm/include/x86/processor.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/testing/selftests/kvm/include/x86/processor.h b/tools/te= sting/selftests/kvm/include/x86/processor.h index 6e6f70035508..282b8aaff799 100644 --- a/tools/testing/selftests/kvm/include/x86/processor.h +++ b/tools/testing/selftests/kvm/include/x86/processor.h @@ -1318,7 +1318,7 @@ gva_t vm_alloc_stack(struct kvm_vm *vm, int nr_pages); "lea 1f(%%rip), %%r10\n\t" \ "lea 2f(%%rip), %%r11\n\t" \ fep "1: " insn "\n\t" \ - "xor %%r9, %%r9\n\t" \ + "mov $0, %%r9d\n\t" \ "2:\n\t" \ "mov %%r9b, %[vector]\n\t" \ "mov %%r10, %[error_code]\n\t" --=20 2.55.0.887.g758fc8c411-goog From nobody Mon Sep 28 04:08:39 2026 Received: from mail-pl1-f199.google.com (mail-pl1-f199.google.com [209.85.214.199]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 469E437B022 for ; Wed, 26 Aug 2026 23:39:28 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.199 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787787569; cv=none; b=DBTs7ubzV/MRsq4BFg/0g0wTS0dZzLcLvucQG1YLAMrlmRJElCWXtP6CsVQ8KUEHNxiAsBeynWQ/G9IRszu4ppjypf2QYSA2tHyt+aNrxBGiKf6tc31R+KnMMMmmxCSNSRvoENU9Cbb5SwAB7q0rbecFMh3RIJ6Wn28VykeZhJQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787787569; c=relaxed/simple; bh=CkRIS9u8AusztvWTvPzOWFGQYsyZZzKW1ZZus+mQkq4=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=OzXbJxQZXOzjiiahYftQx/OpJ3+nizYZfYfIaZI/CUN2lpNFyk9DC+l8iVA7FRKXS6ZWA4ToBQA5cd3l027Xan4k0EgLikuEsv8VUYz65icFNge+lbrV8865mQJKGJ7vp49tUXoEg+lcKkBlraS33mGt/bMLD+XJJXcGtlzeC7U= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--seanjc.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=TahZQetJ; arc=none smtp.client-ip=209.85.214.199 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--seanjc.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="TahZQetJ" Received: by mail-pl1-f199.google.com with SMTP id d9443c01a7336-2d7151120d6so2063315ad.3 for ; Wed, 26 Aug 2026 16:39:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1787787566; x=1788392366; darn=vger.kernel.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:reply-to:from:to:cc:subject:date:message-id :reply-to:content-type; bh=FfB1TPfB01BkpCh74isHXlJBf/gfFyIKtvCvmm75NxA=; b=TahZQetJz5ZuCHjt3IPtvow3OAVijwGfi3Wse56JqfR2nG13Pi7OV2SIEzsRuUaFeQ oA0YaoVlabsCqpyz7Rc84gDvR6KtNM1eYUJiFgRllEdmvwqnto6dPAxQTbY1bSE7MIhu rgkRN1APdOYoIaL4kymMwZDiLoHLvS5yp9Fzoflt0bJo5cAY96TTo+1yfDFqTK7QCgck kxxRJJcdwo8xg/xdeLck/4QJDKy+fAguhwSipU0tmMO9PO0Pk+kmAwoFo7O7DfWhQKMq Z+fXvysodB4wl5hpPX8Q+bugOTLJnbtPvcx+0chpQ+iD1mb37TCZHsinMz2xtDEeWul0 xMPg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787787566; x=1788392366; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:reply-to:x-gm-message-state:from:to:cc:subject :date:message-id:reply-to:content-type; bh=FfB1TPfB01BkpCh74isHXlJBf/gfFyIKtvCvmm75NxA=; b=hURtj0HzzITZlf+t/WzvnSD+vwriIsoN+IPR9Di0aXLalvDoqZ2/2XGrVbKG6NiN6d yI/GqZVKBrW/797C9ieYsdHtvnn7XtbaW1EhCa76SikVkBDDQ2ojiw41yflcMQm8BG7m m5bwg0x2ir6b6WOWhxJ5A7Embidzrd5jH8mvueEBG2qZVdIp9NLNnpaKVDCG8gX34iNt GAZnYJ+qZXjEfXmC5a7UhDJHO39nidMQgv6dTvsO1t2lc1fPIIaz+8oGABpHBkM9GRnH wUGi9Mbqja0QoWNXkJZ+8Es+3g/VGocn2K8cLrBJRvNN3mmcq0SuMgT/aYi3e8f6WYpX msyw== X-Forwarded-Encrypted: i=1; AHgh+Ro6xv4EkM4Xzdfq9S2iEJBd0/DGl0wRAKz9ht0iAz8DxLFY70oKn7HHGfvIgMkhzVs+PNOErUTPQoWoeik=@vger.kernel.org X-Gm-Message-State: AFuF++lTAcRJF2QKkms3N7+g9sc1EV98oe9X5pu1jJbhZU/NSg4RVImD znYPFSB1JBOTbq5L8YOz1/swIuSj/eWzLFoyySPQESlUU/Yscyv5uOUgbvKI48WVrq8VPcIcSIh +g8TObg== X-Received: from plbkn16.prod.google.com ([2002:a17:903:790:b0:2d6:e484:2160]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a17:903:324f:b0:2cc:f5b8:4c2e with SMTP id d9443c01a7336-2d707b45a87mr197320385ad.9.1787787565494; Wed, 26 Aug 2026 16:39:25 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 26 Aug 2026 16:39:10 -0700 In-Reply-To: <20260826233919.998904-1-seanjc@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260826233919.998904-1-seanjc@google.com> X-Mailer: git-send-email 2.55.0.887.g758fc8c411-goog Message-ID: <20260826233919.998904-5-seanjc@google.com> Subject: [PATCH v3 04/13] KVM: selftests: Adapt to the updated VMPTRST behavior when eVMCS is used From: Sean Christopherson To: Sean Christopherson , Paolo Bonzini Cc: kvm@vger.kernel.org, linux-kernel@vger.kernel.org, f734222792@gmail.com, Vitaly Kuznetsov , Sashiko Bot , Yosry Ahmed Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Vitaly Kuznetsov Previously, VMPTRST was forbidden with eVMCS and selftests were mocking the correct behavior in vmptrst() by returning enlightened vmptr directly. Since KVM's behavior has changed to match genuine Hyper-V, adjust evmcs test accordingly. Signed-off-by: Vitaly Kuznetsov Signed-off-by: Sean Christopherson --- tools/testing/selftests/kvm/include/x86/evmcs.h | 8 -------- tools/testing/selftests/kvm/include/x86/vmx.h | 3 --- tools/testing/selftests/kvm/x86/hyperv_evmcs.c | 5 ++--- 3 files changed, 2 insertions(+), 14 deletions(-) diff --git a/tools/testing/selftests/kvm/include/x86/evmcs.h b/tools/testin= g/selftests/kvm/include/x86/evmcs.h index 82a8ea6b661f..c5b9d26f6cdb 100644 --- a/tools/testing/selftests/kvm/include/x86/evmcs.h +++ b/tools/testing/selftests/kvm/include/x86/evmcs.h @@ -265,14 +265,6 @@ static inline bool load_evmcs(struct hyperv_test_pages= *hv) return true; } =20 -static inline int evmcs_vmptrst(u64 *value) -{ - *value =3D current_vp_assist->current_nested_vmcs & - ~HV_X64_MSR_VP_ASSIST_PAGE_ENABLE; - - return 0; -} - static inline int evmcs_vmread(u64 encoding, u64 *value) { switch (encoding) { diff --git a/tools/testing/selftests/kvm/include/x86/vmx.h b/tools/testing/= selftests/kvm/include/x86/vmx.h index 04f5e34dea3a..ac7d48d1387e 100644 --- a/tools/testing/selftests/kvm/include/x86/vmx.h +++ b/tools/testing/selftests/kvm/include/x86/vmx.h @@ -358,9 +358,6 @@ static inline int vmptrst(u64 *value) u64 tmp; u8 ret; =20 - if (enable_evmcs) - return evmcs_vmptrst(value); - __asm__ __volatile__("vmptrst %[value]; setna %[ret]" : [value]"=3Dm"(tmp), [ret]"=3Drm"(ret) : : "cc", "memory"); diff --git a/tools/testing/selftests/kvm/x86/hyperv_evmcs.c b/tools/testing= /selftests/kvm/x86/hyperv_evmcs.c index 63ea1533e4ea..6224d859d7bb 100644 --- a/tools/testing/selftests/kvm/x86/hyperv_evmcs.c +++ b/tools/testing/selftests/kvm/x86/hyperv_evmcs.c @@ -92,15 +92,14 @@ void guest_code(struct vmx_pages *vmx_pages, struct hyp= erv_test_pages *hv_pages, GUEST_ASSERT(prepare_for_vmx_operation(vmx_pages)); GUEST_SYNC(3); GUEST_ASSERT(load_evmcs(hv_pages)); - GUEST_ASSERT(vmptrstz() =3D=3D hv_pages->enlightened_vmcs_gpa); + /* VMPTRST returns -1 until VMLAUNCH with eVMCS ptr set */ + GUEST_ASSERT(vmptrstz() =3D=3D -1); =20 GUEST_SYNC(4); - GUEST_ASSERT(vmptrstz() =3D=3D hv_pages->enlightened_vmcs_gpa); =20 prepare_vmcs(vmx_pages, l2_guest_code); =20 GUEST_SYNC(5); - GUEST_ASSERT(vmptrstz() =3D=3D hv_pages->enlightened_vmcs_gpa); current_evmcs->revision_id =3D -1u; GUEST_ASSERT(vmlaunch()); current_evmcs->revision_id =3D EVMCS_VERSION; --=20 2.55.0.887.g758fc8c411-goog From nobody Mon Sep 28 04:08:39 2026 Received: from mail-pf1-f198.google.com (mail-pf1-f198.google.com [209.85.210.198]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E5FE33C09F9 for ; Wed, 26 Aug 2026 23:39:29 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.198 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787787571; cv=none; b=GpRpZsroJ91SPb7dV0Yyrh4yDXIonkxhaKprtWvzyWI/OR47+Jc51dMZBBwKSx8mPnKIqzm8BjSc0grmiTLwKlv8RWM6xV3nl0YHCkUen4BzNTeqWtwZ2WvV+6tlocfL9X9OAMEAKA6AzDZX2Wk/sMzPYFOmnVmclyLTrDBQVFQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787787571; c=relaxed/simple; bh=PaH7v/6ZshYM/7JV06k//ebWoKkZhJSEyltBWJM+apc=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=UMgiHUPqc8B3IDB44Mr+ZGO5zg7r0SBOP7beHcsrNKjXNrJmXznkPr0gecK73ts/QQaFijNMTaBblBUcv632m3e30gqE3z8tlL7LBlpD3BkpQHkRMjf8IwMVdgFH5w8EAxUvA2EvekTERB9ODGl0MHlG/tga163Rm8n/HMr69ko= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--seanjc.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=Fv7b2hj3; arc=none smtp.client-ip=209.85.210.198 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--seanjc.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="Fv7b2hj3" Received: by mail-pf1-f198.google.com with SMTP id d2e1a72fcca58-854f274dd69so268094b3a.1 for ; Wed, 26 Aug 2026 16:39:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1787787567; x=1788392367; darn=vger.kernel.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:reply-to:from:to:cc:subject:date:message-id :reply-to:content-type; bh=rnnRN8hJfQwgolvTmyTrKWAk5xBd0sRsJp37TMVzJVc=; b=Fv7b2hj3WeDf/KiMfk4K8EIXktD2XA6j/UXo4nzaT0R6kbX7ybwdDL/s4v5g+vrJVw WO+noAJuO7Zk2pubqQKIyhAVPUiQGA7ih0I88kylAL8REQJAc//Uo6zLqL9vrAA1n098 RfjDKmlYyb36bc+7ddVu2V1wGBDZLGRxxPfxnLWXB5HvBFYOfAUovHP/qn1SwoB5M6ek m9RCb/6j6yLQvETBvJPi0lyjWzdegVDNfJrnMZ/kAvft5jAIo7XyMJmLWEh6g98kbvsH b7pKGfB4n/1ysjWc07U90q7srEzdHmHxMGNILUq9e1LOhelGqzx5aycK0PjjJFeCKdCh 60sg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787787567; x=1788392367; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:reply-to:x-gm-message-state:from:to:cc:subject :date:message-id:reply-to:content-type; bh=rnnRN8hJfQwgolvTmyTrKWAk5xBd0sRsJp37TMVzJVc=; b=PJd7h69QUN7LFWmZm2Wz1rG6Hd6g3ICsiYtEam16xL2dt31oqgQvNgX8Jv1/MgiVnH xKi2OcrU8TtjM46YEkPUOQ+pKhPIniJ9z2EvSvzpz0KM99BrKo/KVps6A0tAoFe/pKLE 6P8DWozomParjLJJ8jn5Q7jo6LshJrc+CvmZy402BRtPHneUK4UEe/cX15Lz9SQ8DLUo 59p+JLF3CqFLwh5809xGkwD8Z8FfNbhqOjthgJsaXCvaOM9HEOcgM5WljeDcEjikEfqQ y5MAbjQrg3pEJ4cYnVq7QU+HLJ2CARVemXW3fJ1IZ6+zictgUyZRWhk9P3yMx0K75Fio 02QA== X-Forwarded-Encrypted: i=1; AHgh+RpkTgEzJPflsJFeyUgQBDdxfedU4oSqwzNXv2xsEZtvkh0OIjsNBaF79uuDQMzvlos367o7DERslsuTufA=@vger.kernel.org X-Gm-Message-State: AFuF++nr5HyqvrdqidHGDKTHhTCx5+P4ghFnVK3trQJ1WqCVHFY/pejl y/tvMGcRKSngp4oBwY0pUO4YyvKB6BGVPjIFNMg3u0qDN0RafzHSkSxqGkyW7YGH68ivhzuOKzh 3j6vIfw== X-Received: from pgco21.prod.google.com ([2002:a63:7315:0:b0:cc1:bf49:dfd2]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a00:1a12:b0:854:9b2a:f898 with SMTP id d2e1a72fcca58-8549b2af9f9mr7835471b3a.8.1787787567089; Wed, 26 Aug 2026 16:39:27 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 26 Aug 2026 16:39:11 -0700 In-Reply-To: <20260826233919.998904-1-seanjc@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260826233919.998904-1-seanjc@google.com> X-Mailer: git-send-email 2.55.0.887.g758fc8c411-goog Message-ID: <20260826233919.998904-6-seanjc@google.com> Subject: [PATCH v3 05/13] KVM: selftests: Check VMPTRLD with active eVMCS From: Sean Christopherson To: Sean Christopherson , Paolo Bonzini Cc: kvm@vger.kernel.org, linux-kernel@vger.kernel.org, f734222792@gmail.com, Vitaly Kuznetsov , Sashiko Bot , Yosry Ahmed Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Vitaly Kuznetsov Check that VMPTRLD when eVMCS is active results in #UD. This matches genuine Hyper-V's behavior. Use KVM_ASM_SAFE framework to handle #UD from VMPTRLD. Unfortunately, the same trick cannot be applied to the existing #UD check on VMLAUNCH as VMLAUNCH clobbers all registers which KVM_ASM_SAFE depends on. Keep VMLAUNCH handling separately. Deliberately use a double-underscores prefix instead of a "safe" postfix for the helper, to communicate that the inner/outer helpers handle more than just exceptions, they also handle VM-Fail conditions. Assisted-by: Claude:claude-sonnet-4-6 Signed-off-by: Vitaly Kuznetsov [sean: use __ instead of _safe] Signed-off-by: Sean Christopherson --- tools/testing/selftests/kvm/include/x86/vmx.h | 19 +++++++++++--- .../testing/selftests/kvm/x86/hyperv_evmcs.c | 26 +++++++++++++++---- 2 files changed, 37 insertions(+), 8 deletions(-) diff --git a/tools/testing/selftests/kvm/include/x86/vmx.h b/tools/testing/= selftests/kvm/include/x86/vmx.h index ac7d48d1387e..a161dbee7e04 100644 --- a/tools/testing/selftests/kvm/include/x86/vmx.h +++ b/tools/testing/selftests/kvm/include/x86/vmx.h @@ -342,9 +342,6 @@ static inline int vmptrld(u64 vmcs_pa) { u8 ret; =20 - if (enable_evmcs) - return -1; - __asm__ __volatile__ ("vmptrld %[pa]; setna %[ret]" : [ret]"=3Drm"(ret) : [pa]"m"(vmcs_pa) @@ -353,6 +350,22 @@ static inline int vmptrld(u64 vmcs_pa) return ret; } =20 +static inline int __vmptrld(u64 vmcs_pa) +{ + u64 error_code; + u8 vector; + u8 failed; + + asm volatile(KVM_ASM_SAFE("vmptrld %[pa]") + "\n\tsetna %[failed]" + : KVM_ASM_SAFE_OUTPUTS(vector, error_code), + [failed]"=3Dqm"(failed) + : [pa]"m"(vmcs_pa) + : "cc", "memory", KVM_ASM_SAFE_CLOBBERS); + + return vector ? vector : failed ? -EINVAL : 0; +} + static inline int vmptrst(u64 *value) { u64 tmp; diff --git a/tools/testing/selftests/kvm/x86/hyperv_evmcs.c b/tools/testing= /selftests/kvm/x86/hyperv_evmcs.c index 6224d859d7bb..f953a9755a76 100644 --- a/tools/testing/selftests/kvm/x86/hyperv_evmcs.c +++ b/tools/testing/selftests/kvm/x86/hyperv_evmcs.c @@ -23,7 +23,11 @@ static int ud_count; static void guest_ud_handler(struct ex_regs *regs) { ud_count++; - regs->rip +=3D 3; /* VMLAUNCH */ + /* + * VMLAUNCH insn can't be easily covered by KVM_ASM_SAFE framework but + * luckily the instruction is always three bytes. + */ + regs->rip +=3D 3; } =20 static void guest_nmi_handler(struct ex_regs *regs) @@ -178,7 +182,15 @@ void guest_code(struct vmx_pages *vmx_pages, struct hy= perv_test_pages *hv_pages, GUEST_ASSERT(vmreadz(VM_EXIT_REASON) =3D=3D EXIT_REASON_VMCALL); GUEST_SYNC(11); =20 - /* Try enlightened vmptrld with an incorrect GPA */ + /* VMPTRLD instruction causes #UD after enlightened VMLAUNCH */ + GUEST_ASSERT(__vmptrld(hv_pages->enlightened_vmcs_gpa) =3D=3D UD_VECTOR); + + /* + * Try enlightened vmptrld with an incorrect GPA. GUEST_SYNC(12) signals + * the host to enable guest_ud_handler() which cannot be enabled beforeha= nd + * to not override the default fixup handler from KVM_ASM_SAFE(). + */ + GUEST_SYNC(12); evmcs_vmptrld(0xdeadbeef, hv_pages->enlightened_vmcs); GUEST_ASSERT(vmlaunch()); GUEST_ASSERT(ud_count =3D=3D 1); @@ -252,7 +264,6 @@ int main(int argc, char *argv[]) vcpu_args_set(vcpu, 3, vmx_pages_gva, hv_pages_gva, addr_gva2gpa(vm, hcal= l_page)); vcpu_set_msr(vcpu, HV_X64_MSR_VP_INDEX, vcpu->id); =20 - vm_install_exception_handler(vm, UD_VECTOR, guest_ud_handler); vm_install_exception_handler(vm, NMI_VECTOR, guest_nmi_handler); =20 pr_info("Running L1 which uses EVMCS to run L2\n"); @@ -282,7 +293,7 @@ int main(int argc, char *argv[]) =20 /* Force immediate L2->L1 exit before resuming */ if (stage =3D=3D 8) { - pr_info("Injecting NMI into L1 before L2 had a chance to run after rest= ore\n"); + pr_debug("Injecting NMI into L1 before L2 had a chance to run after res= tore\n"); inject_nmi(vcpu); } =20 @@ -292,9 +303,14 @@ int main(int argc, char *argv[]) * KVM_STATE_NESTED_EVMCS is not lost. */ if (stage =3D=3D 9) { - pr_info("Trying extra KVM_GET_NESTED_STATE/KVM_SET_NESTED_STATE cycle\n= "); + pr_debug("Trying extra KVM_GET_NESTED_STATE/KVM_SET_NESTED_STATE cycle\= n"); vcpu =3D save_restore_vm(vm, vcpu); } + + if (stage =3D=3D 12) { + pr_debug("Trying enlightened VMLAUNCH with an invalid PTR\n"); + vm_install_exception_handler(vm, UD_VECTOR, guest_ud_handler); + } } =20 done: --=20 2.55.0.887.g758fc8c411-goog From nobody Mon Sep 28 04:08:39 2026 Received: from mail-pg1-f199.google.com (mail-pg1-f199.google.com [209.85.215.199]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0CFC83B1EC0 for ; Wed, 26 Aug 2026 23:39:28 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.199 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787787570; cv=none; b=Qoz1ZCKwkOY5ZjA3mFIVUc8494QPMiMVxrNgnoeQ4090Yb/1KcLlULjoFn7/MXA7ZXE/xEe0B1jdxXE14uCB9XttjAsBXqc9yQBgW9o9nr/G51rwOome/4uOJsRYMd3CI9rshCb85srYgwvLMFvsBdOrEgsnoQbgh2muTKxLBZk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787787570; c=relaxed/simple; bh=HVRt4L6InN7M6G41qKMEsuKYCAqAetC2DaO3Q/0Mgmg=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=Pzjcm+DrxUyLx8D78AYe+gOpTJfIqbhRaufyXD3hiv8ASq00mhNalOe3+f2WI7vm3FGwSfco70H55o9Hz8GYQa9bJuCPKjx81CYztkiNgmDUYVM+IGOkiSGHBTGywnDiABT7f21BFB0T9sp8Dr9cPsLtYvnS428hTah3W4IULxU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--seanjc.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=cLXaTjcf; arc=none smtp.client-ip=209.85.215.199 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--seanjc.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="cLXaTjcf" Received: by mail-pg1-f199.google.com with SMTP id 41be03b00d2f7-cc1bbd7d6e6so1730101a12.3 for ; Wed, 26 Aug 2026 16:39:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1787787568; x=1788392368; darn=vger.kernel.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:reply-to:from:to:cc:subject:date:message-id :reply-to:content-type; bh=noIWe1uiKOM5ci2qf7N1VbgwtzcnjgofaQ/OsIxf3uk=; b=cLXaTjcfgPDKIQZrJk43w8NAsuT8IWkwUGEg7eoxQKyLp0u04WBAjRoX3nOKxbFSL/ mepXPtdrI/Dg10+APkrB/BepHlmo91Sy315pKk+6xPScnKW/MEIRzsh07g7UCauq/CMY pv3SlqIc/pa8IngLZ6gz3CBX8muPx61UcWX9pcIPPiwVNQ4OXfHt1RZpj5CDfBxsX/H2 9PkOQnYDGf7fJ4uawF2K/jAE2Mo1nnXBskz3c8Z8seszfDXBii+CnU1iKu2f6MRJnRz+ Vr9naoLVMa/nQaKfBCrQTzAvnDHXgTLAKON77ERBbOmTcH8QIGvpZlnAZayxESVnZtYP 6QKw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787787568; x=1788392368; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:reply-to:x-gm-message-state:from:to:cc:subject :date:message-id:reply-to:content-type; bh=noIWe1uiKOM5ci2qf7N1VbgwtzcnjgofaQ/OsIxf3uk=; b=iK/PZzjkGVT988IOgOJi8wbBHzAJYuOTYJM97CkxmltSSJYzKE4Dch2w6dx4uYgH+g b8juqnSxR9duM8eypKJmOviphEzyBy5bBOeGkZ9L64K4pc7P7B0a5IEMCpIokxOxaACy TLzLpRV1u5IJgyoT6qpaOfffRxyL9nIFCpbwRZszkbJWXMpW/uHgR4+LweM9iWiJFvkf o5rqVTdpHnz6jYJXxRp5Vm2x5254eUllqaawlkhbP4a4KJBV934xUq9FT0i7tsWe9z6Q JW8B+0gdQCv2LMtn+47htpkzKKB07Srjp5cMGmSvVxrBpdoei2+yqiBGu7szdQjLLduU +8Qg== X-Forwarded-Encrypted: i=1; AHgh+RowxYAVaIwOu5xrQnXP4iRZDeFRhqBPT07K5AtSEKpQuh3DlnsCIOFOmOEmBHNgZD8XPeDI6IY4oTjbY1I=@vger.kernel.org X-Gm-Message-State: AFuF++nV/MBigTAGJJECTaUcwJCdIbFRrFwKuSfCQlZ/YekdBqG7vdxH 6oZ2ZwQ5/8boPEvWuCClWnjvao/okUmjEp5x3Ed6HLxUh4DaHMhaPD9AlYkao8BvyBJcA6IKZjs p5nPwiw== X-Received: from pfvx23.prod.google.com ([2002:a05:6a00:2717:b0:84c:282c:5608]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a00:438c:b0:851:c1d2:c48d with SMTP id d2e1a72fcca58-85372fa9890mr21458366b3a.8.1787787568162; Wed, 26 Aug 2026 16:39:28 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 26 Aug 2026 16:39:12 -0700 In-Reply-To: <20260826233919.998904-1-seanjc@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260826233919.998904-1-seanjc@google.com> X-Mailer: git-send-email 2.55.0.887.g758fc8c411-goog Message-ID: <20260826233919.998904-7-seanjc@google.com> Subject: [PATCH v3 06/13] KVM: selftests: Assert success in vmptrst(), kill off vmptrstz() From: Sean Christopherson To: Sean Christopherson , Paolo Bonzini Cc: kvm@vger.kernel.org, linux-kernel@vger.kernel.org, f734222792@gmail.com, Vitaly Kuznetsov , Sashiko Bot , Yosry Ahmed Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Assert success in vmptrst() instead of punting to the caller, as literally every user expects VMPTRST to succeed (and because '0' is a valid physical address). Signed-off-by: Sean Christopherson --- tools/testing/selftests/kvm/include/x86/vmx.h | 19 ++++--------------- .../testing/selftests/kvm/x86/hyperv_evmcs.c | 4 ++-- tools/testing/selftests/kvm/x86/state_test.c | 8 ++++---- .../kvm/x86/vmx_preemption_timer_test.c | 2 +- 4 files changed, 11 insertions(+), 22 deletions(-) diff --git a/tools/testing/selftests/kvm/include/x86/vmx.h b/tools/testing/= selftests/kvm/include/x86/vmx.h index a161dbee7e04..04f638fcd3ba 100644 --- a/tools/testing/selftests/kvm/include/x86/vmx.h +++ b/tools/testing/selftests/kvm/include/x86/vmx.h @@ -366,27 +366,16 @@ static inline int __vmptrld(u64 vmcs_pa) return vector ? vector : failed ? -EINVAL : 0; } =20 -static inline int vmptrst(u64 *value) +static inline u64 vmptrst(void) { - u64 tmp; + u64 value =3D 0; u8 ret; =20 __asm__ __volatile__("vmptrst %[value]; setna %[ret]" - : [value]"=3Dm"(tmp), [ret]"=3Drm"(ret) + : [value]"=3Dm"(value), [ret]"=3Drm"(ret) : : "cc", "memory"); =20 - *value =3D tmp; - return ret; -} - -/* - * A wrapper around vmptrst that ignores errors and returns zero if the - * vmptrst instruction fails. - */ -static inline u64 vmptrstz(void) -{ - u64 value =3D 0; - vmptrst(&value); + __GUEST_ASSERT(!ret, "vmptrst failed"); return value; } =20 diff --git a/tools/testing/selftests/kvm/x86/hyperv_evmcs.c b/tools/testing= /selftests/kvm/x86/hyperv_evmcs.c index f953a9755a76..0c9cf620c87d 100644 --- a/tools/testing/selftests/kvm/x86/hyperv_evmcs.c +++ b/tools/testing/selftests/kvm/x86/hyperv_evmcs.c @@ -97,7 +97,7 @@ void guest_code(struct vmx_pages *vmx_pages, struct hyper= v_test_pages *hv_pages, GUEST_SYNC(3); GUEST_ASSERT(load_evmcs(hv_pages)); /* VMPTRST returns -1 until VMLAUNCH with eVMCS ptr set */ - GUEST_ASSERT(vmptrstz() =3D=3D -1); + GUEST_ASSERT(vmptrst() =3D=3D -1); =20 GUEST_SYNC(4); =20 @@ -123,7 +123,7 @@ void guest_code(struct vmx_pages *vmx_pages, struct hyp= erv_test_pages *hv_pages, GUEST_ASSERT(!vmlaunch()); GUEST_ASSERT_EQ(vmreadz(VM_EXIT_REASON), EXIT_REASON_EXCEPTION_NMI); GUEST_ASSERT_EQ((vmreadz(VM_EXIT_INTR_INFO) & 0xff), NMI_VECTOR); - GUEST_ASSERT(vmptrstz() =3D=3D hv_pages->enlightened_vmcs_gpa); + GUEST_ASSERT(vmptrst() =3D=3D hv_pages->enlightened_vmcs_gpa); =20 /* * NMI forces L2->L1 exit, resuming L2 and hope that EVMCS is diff --git a/tools/testing/selftests/kvm/x86/state_test.c b/tools/testing/s= elftests/kvm/x86/state_test.c index 4a1056a6cb8d..9d4e0c1f7c18 100644 --- a/tools/testing/selftests/kvm/x86/state_test.c +++ b/tools/testing/selftests/kvm/x86/state_test.c @@ -78,17 +78,17 @@ static void vmx_l1_guest_code(struct vmx_pages *vmx_pag= es) GUEST_ASSERT(prepare_for_vmx_operation(vmx_pages)); GUEST_SYNC(3); GUEST_ASSERT(load_vmcs(vmx_pages)); - GUEST_ASSERT(vmptrstz() =3D=3D vmx_pages->vmcs_gpa); + GUEST_ASSERT(vmptrst() =3D=3D vmx_pages->vmcs_gpa); =20 GUEST_SYNC(4); - GUEST_ASSERT(vmptrstz() =3D=3D vmx_pages->vmcs_gpa); + GUEST_ASSERT(vmptrst() =3D=3D vmx_pages->vmcs_gpa); =20 prepare_vmcs(vmx_pages, vmx_l2_guest_code); =20 GUEST_SYNC(5); - GUEST_ASSERT(vmptrstz() =3D=3D vmx_pages->vmcs_gpa); + GUEST_ASSERT(vmptrst() =3D=3D vmx_pages->vmcs_gpa); GUEST_ASSERT(!vmlaunch()); - GUEST_ASSERT(vmptrstz() =3D=3D vmx_pages->vmcs_gpa); + GUEST_ASSERT(vmptrst() =3D=3D vmx_pages->vmcs_gpa); GUEST_ASSERT(vmreadz(VM_EXIT_REASON) =3D=3D EXIT_REASON_VMCALL); =20 /* Check that the launched state is preserved. */ diff --git a/tools/testing/selftests/kvm/x86/vmx_preemption_timer_test.c b/= tools/testing/selftests/kvm/x86/vmx_preemption_timer_test.c index eb8021c33cd4..523aab667d85 100644 --- a/tools/testing/selftests/kvm/x86/vmx_preemption_timer_test.c +++ b/tools/testing/selftests/kvm/x86/vmx_preemption_timer_test.c @@ -73,7 +73,7 @@ void l1_guest_code(struct vmx_pages *vmx_pages) GUEST_ASSERT(vmx_pages->vmcs_gpa); GUEST_ASSERT(prepare_for_vmx_operation(vmx_pages)); GUEST_ASSERT(load_vmcs(vmx_pages)); - GUEST_ASSERT(vmptrstz() =3D=3D vmx_pages->vmcs_gpa); + GUEST_ASSERT(vmptrst() =3D=3D vmx_pages->vmcs_gpa); =20 prepare_vmcs(vmx_pages, l2_guest_code); =20 --=20 2.55.0.887.g758fc8c411-goog From nobody Mon Sep 28 04:08:39 2026 Received: from mail-pf1-f197.google.com (mail-pf1-f197.google.com [209.85.210.197]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 560B33C1D66 for ; Wed, 26 Aug 2026 23:39:30 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.197 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787787572; cv=none; b=POHlioqBrOx6HlOIsxIkEOL2Vj9ctboE5D405rn9YVse1tl/YO9SOPPDHTbQJlxM/u+wzONpFz4MlPtYqzFQZc7LtKEiMYK1Ncb2FLJOAQsv/2QfL72O0l4c3uYvFb0yXDJe68V/aJlEaY7NSTI/lTjUFki6nT2PnTbzCS642MI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787787572; c=relaxed/simple; bh=HHafzVLCH2PTgrLksWP07SsTXKFTWxZ2iZiaHWGFb+s=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=JresAVwCt8C+tXx3CNdk2IzZfOeS7StcdA79uc6SwmDm9PE8969EFPDwo8jz7tRVpAervE7s1+FBE3ZR1kYT6xxe/Oa9FKf820gpA4Yv/oUpl9zHWWvG5Df2h/GrXmsvbCNvTjvqbTHCEy+LtuTbjgE0nu55OPH4b+ivIN6TIUI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--seanjc.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=BdvN/0Iy; arc=none smtp.client-ip=209.85.210.197 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--seanjc.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="BdvN/0Iy" Received: by mail-pf1-f197.google.com with SMTP id d2e1a72fcca58-8484b9fb055so3171182b3a.0 for ; Wed, 26 Aug 2026 16:39:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1787787569; x=1788392369; darn=vger.kernel.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:reply-to:from:to:cc:subject:date:message-id :reply-to:content-type; bh=aRQjic2dNMH7b+Vqh/uNHpgjs8Txud0dWkBENHqrVeM=; b=BdvN/0IyDV+JnO32/ZEuVjx+sp2Hu1SJgnG9Q1WLw6Z9I+w/LgAz+YL44kzVkrUyWc 9e4Az97AGAy3nYrAjbb3rtEogXOdJuEzSbel/lOUlwmMJOhKl9FUe1jVy0TVF1tyaEHy X+GPrDtUKQnLQqAuO2MPhTLxLokx+xva8UPDAnJcg8pDFEbbwi76OjK3S0Zg5QqdQlkU JWeYv2HrNKtwzSktCb67iiqrVQAx+mKHu94gxzi/uaoVMEV9+m6UzBuL3Z0wCuVfJO2a uamKwoGfEMygWunFrf2Zlt7Cq4+OtvoAgzKbWiz0jF+Chpy4ijaA8cysGXKRiEmeKE+m 4z1g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787787569; x=1788392369; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:reply-to:x-gm-message-state:from:to:cc:subject :date:message-id:reply-to:content-type; bh=aRQjic2dNMH7b+Vqh/uNHpgjs8Txud0dWkBENHqrVeM=; b=MFXAZoUQOMowlHGf4jwCqhDQdeR5G6ZTBQv1UPKxUeRCBMgMsFET2/Zt4GjdQD0RUD riks9pdASHEjw62v+mwgKuG7T9NEdxd3gDtWJNscTpAwn5VVh83qMbWegicXB9uA6d/a h3lRV3LVYYq5hI1YqkgXfMtuJPZ8E8SjVEglRJKPUTGUWodXivHc+coon8VQRnUrbyms LZta3eKFkItoTM8Sj8mTGeIc+3lcH8Ef1YjekQmaGudLVOwLRutS1H/p4fwsjVQJYNLd n0cdaysoQ9fDa5EubaiMqRaySmjo0QLulVyEnipSLfmvrIPrUfyh/QV6deUcHpVZnSDc 5krw== X-Forwarded-Encrypted: i=1; AHgh+RrMYVwuoEvYTgWA6gLkoMQ8oY+a2WxOOFjk5bxOU6JheEx03CKQQulJI0MHG7LRtdkNWDGjmgt4eU0er2E=@vger.kernel.org X-Gm-Message-State: AFuF++mtXUPupEK5x7U7u15fT6L5w3nGUrkdjyncWBkdhy9R1yZ8Uof9 ZBYoHKPTQVf2+bjIhZtoLQlWXTAmC3hW9Wf0MlXCG/EsP3Pw41bqSJVZNCli+7f3S4Lh7jcXTiG pW8bSvg== X-Received: from pfx40.prod.google.com ([2002:a05:6a00:a468:b0:847:95a8:728e]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a00:1f17:b0:848:2c2e:c7a3 with SMTP id d2e1a72fcca58-8537648a353mr20879010b3a.16.1787787569257; Wed, 26 Aug 2026 16:39:29 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 26 Aug 2026 16:39:13 -0700 In-Reply-To: <20260826233919.998904-1-seanjc@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260826233919.998904-1-seanjc@google.com> X-Mailer: git-send-email 2.55.0.887.g758fc8c411-goog Message-ID: <20260826233919.998904-8-seanjc@google.com> Subject: [PATCH v3 07/13] KVM: selftests: Always assert that vmxon() and prepare_for_vmx_operation() succeed From: Sean Christopherson To: Sean Christopherson , Paolo Bonzini Cc: kvm@vger.kernel.org, linux-kernel@vger.kernel.org, f734222792@gmail.com, Vitaly Kuznetsov , Sashiko Bot , Yosry Ahmed Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Assert that vmxon() succeeds, and by extension prepare_for_vmx_operation(). Forcing every caller to assert that a core preparation helper succeeds is absurd and generates hard-to-read code. For all intents and purposes, no functional change intended. Signed-off-by: Sean Christopherson --- tools/testing/selftests/kvm/include/x86/vmx.h | 6 +++--- tools/testing/selftests/kvm/lib/x86/memstress.c | 2 +- tools/testing/selftests/kvm/lib/x86/vmx.c | 7 ++----- tools/testing/selftests/kvm/x86/aperfmperf_test.c | 2 +- tools/testing/selftests/kvm/x86/evmcs_smm_controls_test.c | 2 +- tools/testing/selftests/kvm/x86/hyperv_evmcs.c | 2 +- tools/testing/selftests/kvm/x86/kvm_buslock_test.c | 2 +- tools/testing/selftests/kvm/x86/nested_close_kvm_test.c | 2 +- tools/testing/selftests/kvm/x86/nested_dirty_log_test.c | 2 +- tools/testing/selftests/kvm/x86/nested_emulation_test.c | 2 +- tools/testing/selftests/kvm/x86/nested_exceptions_test.c | 2 +- tools/testing/selftests/kvm/x86/nested_invalid_cr3_test.c | 2 +- tools/testing/selftests/kvm/x86/nested_tdp_fault_test.c | 2 +- tools/testing/selftests/kvm/x86/nested_tsc_adjust_test.c | 2 +- tools/testing/selftests/kvm/x86/nested_tsc_scaling_test.c | 2 +- .../selftests/kvm/x86/save_restore_pf_stress_test.c | 2 +- tools/testing/selftests/kvm/x86/smm_test.c | 2 +- tools/testing/selftests/kvm/x86/state_test.c | 2 +- tools/testing/selftests/kvm/x86/triple_fault_event_test.c | 2 +- tools/testing/selftests/kvm/x86/vmx_apic_access_test.c | 2 +- tools/testing/selftests/kvm/x86/vmx_apicv_updates_test.c | 2 +- .../selftests/kvm/x86/vmx_invalid_nested_guest_state.c | 2 +- .../testing/selftests/kvm/x86/vmx_nested_la57_state_test.c | 2 +- .../testing/selftests/kvm/x86/vmx_preemption_timer_test.c | 2 +- 24 files changed, 27 insertions(+), 30 deletions(-) diff --git a/tools/testing/selftests/kvm/include/x86/vmx.h b/tools/testing/= selftests/kvm/include/x86/vmx.h index 04f638fcd3ba..f7ca6646dfbe 100644 --- a/tools/testing/selftests/kvm/include/x86/vmx.h +++ b/tools/testing/selftests/kvm/include/x86/vmx.h @@ -309,7 +309,7 @@ struct vmx_msr_entry { =20 #include "evmcs.h" =20 -static inline int vmxon(u64 phys) +static inline void vmxon(u64 phys) { u8 ret; =20 @@ -318,7 +318,7 @@ static inline int vmxon(u64 phys) : [pa]"m"(phys) : "cc", "memory"); =20 - return ret; + __GUEST_ASSERT(!ret, "vmxon [0x%lx] failed", phys); } =20 static inline void vmxoff(void) @@ -549,7 +549,7 @@ union vmx_ctrl_msr { }; =20 struct vmx_pages *vcpu_alloc_vmx(struct kvm_vm *vm, gva_t *p_vmx_gva); -bool prepare_for_vmx_operation(struct vmx_pages *vmx); +void prepare_for_vmx_operation(struct vmx_pages *vmx); void prepare_vmcs(struct vmx_pages *vmx, void *guest_rip); bool load_vmcs(struct vmx_pages *vmx); =20 diff --git a/tools/testing/selftests/kvm/lib/x86/memstress.c b/tools/testin= g/selftests/kvm/lib/x86/memstress.c index e19e8b5a09c5..2fa39470c1b3 100644 --- a/tools/testing/selftests/kvm/lib/x86/memstress.c +++ b/tools/testing/selftests/kvm/lib/x86/memstress.c @@ -33,7 +33,7 @@ __asm__( static void l1_vmx_code(struct vmx_pages *vmx, u64 vcpu_id) { GUEST_ASSERT(vmx->vmcs_gpa); - GUEST_ASSERT(prepare_for_vmx_operation(vmx)); + prepare_for_vmx_operation(vmx); GUEST_ASSERT(load_vmcs(vmx)); GUEST_ASSERT(ept_1g_pages_supported()); =20 diff --git a/tools/testing/selftests/kvm/lib/x86/vmx.c b/tools/testing/self= tests/kvm/lib/x86/vmx.c index 089e1a8af53f..03d61b1159f8 100644 --- a/tools/testing/selftests/kvm/lib/x86/vmx.c +++ b/tools/testing/selftests/kvm/lib/x86/vmx.c @@ -125,7 +125,7 @@ vcpu_alloc_vmx(struct kvm_vm *vm, gva_t *p_vmx_gva) return vmx; } =20 -bool prepare_for_vmx_operation(struct vmx_pages *vmx) +void prepare_for_vmx_operation(struct vmx_pages *vmx) { u64 feature_control; u64 required; @@ -163,10 +163,7 @@ bool prepare_for_vmx_operation(struct vmx_pages *vmx) =20 /* Enter VMX root operation. */ *(u32 *)(vmx->vmxon) =3D vmcs_revision(); - if (vmxon(vmx->vmxon_gpa)) - return false; - - return true; + vmxon(vmx->vmxon_gpa); } =20 bool load_vmcs(struct vmx_pages *vmx) diff --git a/tools/testing/selftests/kvm/x86/aperfmperf_test.c b/tools/test= ing/selftests/kvm/x86/aperfmperf_test.c index 845cb685f174..e32131cd6ed1 100644 --- a/tools/testing/selftests/kvm/x86/aperfmperf_test.c +++ b/tools/testing/selftests/kvm/x86/aperfmperf_test.c @@ -70,7 +70,7 @@ static void l1_svm_code(struct svm_test_data *svm) =20 static void l1_vmx_code(struct vmx_pages *vmx) { - GUEST_ASSERT_EQ(prepare_for_vmx_operation(vmx), true); + prepare_for_vmx_operation(vmx); GUEST_ASSERT_EQ(load_vmcs(vmx), true); =20 prepare_vmcs(vmx, NULL); diff --git a/tools/testing/selftests/kvm/x86/evmcs_smm_controls_test.c b/to= ols/testing/selftests/kvm/x86/evmcs_smm_controls_test.c index aa7f3b405fd3..cafb58a37023 100644 --- a/tools/testing/selftests/kvm/x86/evmcs_smm_controls_test.c +++ b/tools/testing/selftests/kvm/x86/evmcs_smm_controls_test.c @@ -55,7 +55,7 @@ static void guest_code(struct vmx_pages *vmx_pages, enable_vp_assist(hv_pages->vp_assist_gpa, hv_pages->vp_assist); evmcs_enable(); =20 - GUEST_ASSERT(prepare_for_vmx_operation(vmx_pages)); + prepare_for_vmx_operation(vmx_pages); GUEST_ASSERT(load_evmcs(hv_pages)); prepare_vmcs(vmx_pages, l2_guest_code); =20 diff --git a/tools/testing/selftests/kvm/x86/hyperv_evmcs.c b/tools/testing= /selftests/kvm/x86/hyperv_evmcs.c index 0c9cf620c87d..d0e857b75a47 100644 --- a/tools/testing/selftests/kvm/x86/hyperv_evmcs.c +++ b/tools/testing/selftests/kvm/x86/hyperv_evmcs.c @@ -93,7 +93,7 @@ void guest_code(struct vmx_pages *vmx_pages, struct hyper= v_test_pages *hv_pages, enable_vp_assist(hv_pages->vp_assist_gpa, hv_pages->vp_assist); evmcs_enable(); =20 - GUEST_ASSERT(prepare_for_vmx_operation(vmx_pages)); + prepare_for_vmx_operation(vmx_pages); GUEST_SYNC(3); GUEST_ASSERT(load_evmcs(hv_pages)); /* VMPTRST returns -1 until VMLAUNCH with eVMCS ptr set */ diff --git a/tools/testing/selftests/kvm/x86/kvm_buslock_test.c b/tools/tes= ting/selftests/kvm/x86/kvm_buslock_test.c index 25a182be00a9..2e006ce95896 100644 --- a/tools/testing/selftests/kvm/x86/kvm_buslock_test.c +++ b/tools/testing/selftests/kvm/x86/kvm_buslock_test.c @@ -42,7 +42,7 @@ static void l1_svm_code(struct svm_test_data *svm) =20 static void l1_vmx_code(struct vmx_pages *vmx) { - GUEST_ASSERT_EQ(prepare_for_vmx_operation(vmx), true); + prepare_for_vmx_operation(vmx); GUEST_ASSERT_EQ(load_vmcs(vmx), true); =20 prepare_vmcs(vmx, NULL); diff --git a/tools/testing/selftests/kvm/x86/nested_close_kvm_test.c b/tool= s/testing/selftests/kvm/x86/nested_close_kvm_test.c index b974cfb347d6..479e9adcc20b 100644 --- a/tools/testing/selftests/kvm/x86/nested_close_kvm_test.c +++ b/tools/testing/selftests/kvm/x86/nested_close_kvm_test.c @@ -30,7 +30,7 @@ static void l2_guest_code(void) =20 static void l1_vmx_code(struct vmx_pages *vmx_pages) { - GUEST_ASSERT(prepare_for_vmx_operation(vmx_pages)); + prepare_for_vmx_operation(vmx_pages); GUEST_ASSERT(load_vmcs(vmx_pages)); =20 /* Prepare the VMCS for L2 execution. */ diff --git a/tools/testing/selftests/kvm/x86/nested_dirty_log_test.c b/tool= s/testing/selftests/kvm/x86/nested_dirty_log_test.c index 26b474bf1353..57f49471f4aa 100644 --- a/tools/testing/selftests/kvm/x86/nested_dirty_log_test.c +++ b/tools/testing/selftests/kvm/x86/nested_dirty_log_test.c @@ -93,7 +93,7 @@ void l1_vmx_code(struct vmx_pages *vmx) void *l2_rip; =20 GUEST_ASSERT(vmx->vmcs_gpa); - GUEST_ASSERT(prepare_for_vmx_operation(vmx)); + prepare_for_vmx_operation(vmx); GUEST_ASSERT(load_vmcs(vmx)); =20 if (vmx->eptp_gpa) diff --git a/tools/testing/selftests/kvm/x86/nested_emulation_test.c b/tool= s/testing/selftests/kvm/x86/nested_emulation_test.c index e08c6b0697e5..6f27930bb6b5 100644 --- a/tools/testing/selftests/kvm/x86/nested_emulation_test.c +++ b/tools/testing/selftests/kvm/x86/nested_emulation_test.c @@ -66,7 +66,7 @@ static void guest_code(void *test_data) BIT_ULL(INTERCEPT_HLT); vmcb->control.intercept_exceptions =3D 0; } else { - GUEST_ASSERT(prepare_for_vmx_operation(test_data)); + prepare_for_vmx_operation(test_data); GUEST_ASSERT(load_vmcs(test_data)); =20 prepare_vmcs(test_data, NULL); diff --git a/tools/testing/selftests/kvm/x86/nested_exceptions_test.c b/too= ls/testing/selftests/kvm/x86/nested_exceptions_test.c index aeec3121c8e8..6a36cf4d1eab 100644 --- a/tools/testing/selftests/kvm/x86/nested_exceptions_test.c +++ b/tools/testing/selftests/kvm/x86/nested_exceptions_test.c @@ -125,7 +125,7 @@ static void vmx_run_l2(void *l2_code, int vector, u32 e= rror_code) =20 static void l1_vmx_code(struct vmx_pages *vmx) { - GUEST_ASSERT_EQ(prepare_for_vmx_operation(vmx), true); + prepare_for_vmx_operation(vmx); =20 GUEST_ASSERT_EQ(load_vmcs(vmx), true); =20 diff --git a/tools/testing/selftests/kvm/x86/nested_invalid_cr3_test.c b/to= ols/testing/selftests/kvm/x86/nested_invalid_cr3_test.c index 8c2ba9674558..749a93c318fe 100644 --- a/tools/testing/selftests/kvm/x86/nested_invalid_cr3_test.c +++ b/tools/testing/selftests/kvm/x86/nested_invalid_cr3_test.c @@ -40,7 +40,7 @@ static void l1_vmx_code(struct vmx_pages *vmx_pages) { uintptr_t save_cr3; =20 - GUEST_ASSERT(prepare_for_vmx_operation(vmx_pages)); + prepare_for_vmx_operation(vmx_pages); GUEST_ASSERT(load_vmcs(vmx_pages)); =20 prepare_vmcs(vmx_pages, l2_guest_code); diff --git a/tools/testing/selftests/kvm/x86/nested_tdp_fault_test.c b/tool= s/testing/selftests/kvm/x86/nested_tdp_fault_test.c index 2e04563790ff..b143ebe710e7 100644 --- a/tools/testing/selftests/kvm/x86/nested_tdp_fault_test.c +++ b/tools/testing/selftests/kvm/x86/nested_tdp_fault_test.c @@ -55,7 +55,7 @@ static void l1_vmx_code(struct vmx_pages *vmx, u64 expect= ed_fault_gpa, u64 exit_qual; =20 GUEST_ASSERT(vmx->vmcs_gpa); - GUEST_ASSERT(prepare_for_vmx_operation(vmx)); + prepare_for_vmx_operation(vmx); GUEST_ASSERT(load_vmcs(vmx)); =20 prepare_vmcs(vmx, l2_entry); diff --git a/tools/testing/selftests/kvm/x86/nested_tsc_adjust_test.c b/too= ls/testing/selftests/kvm/x86/nested_tsc_adjust_test.c index cb79d7b9619c..3d2eae848ba6 100644 --- a/tools/testing/selftests/kvm/x86/nested_tsc_adjust_test.c +++ b/tools/testing/selftests/kvm/x86/nested_tsc_adjust_test.c @@ -86,7 +86,7 @@ static void l1_guest_code(void *data) struct vmx_pages *vmx_pages =3D data; u32 control; =20 - GUEST_ASSERT(prepare_for_vmx_operation(vmx_pages)); + prepare_for_vmx_operation(vmx_pages); GUEST_ASSERT(load_vmcs(vmx_pages)); =20 prepare_vmcs(vmx_pages, l2_guest_code); diff --git a/tools/testing/selftests/kvm/x86/nested_tsc_scaling_test.c b/to= ols/testing/selftests/kvm/x86/nested_tsc_scaling_test.c index 18f765835bf4..584071146b69 100644 --- a/tools/testing/selftests/kvm/x86/nested_tsc_scaling_test.c +++ b/tools/testing/selftests/kvm/x86/nested_tsc_scaling_test.c @@ -105,7 +105,7 @@ static void l1_vmx_code(struct vmx_pages *vmx_pages) /* check that L1's frequency looks alright before launching L2 */ check_tsc_freq(UCHECK_L1); =20 - GUEST_ASSERT(prepare_for_vmx_operation(vmx_pages)); + prepare_for_vmx_operation(vmx_pages); GUEST_ASSERT(load_vmcs(vmx_pages)); =20 /* prepare the VMCS for L2 execution */ diff --git a/tools/testing/selftests/kvm/x86/save_restore_pf_stress_test.c = b/tools/testing/selftests/kvm/x86/save_restore_pf_stress_test.c index 507391ab2c93..6ab73a0bd34a 100644 --- a/tools/testing/selftests/kvm/x86/save_restore_pf_stress_test.c +++ b/tools/testing/selftests/kvm/x86/save_restore_pf_stress_test.c @@ -98,7 +98,7 @@ static void l1_svm_code(struct svm_test_data *svm) =20 static void l1_vmx_code(struct vmx_pages *vmx) { - GUEST_ASSERT(prepare_for_vmx_operation(vmx)); + prepare_for_vmx_operation(vmx); GUEST_ASSERT(load_vmcs(vmx)); prepare_vmcs(vmx, guest_access_memory); =20 diff --git a/tools/testing/selftests/kvm/x86/smm_test.c b/tools/testing/sel= ftests/kvm/x86/smm_test.c index d1edafd5af75..be5662792ec8 100644 --- a/tools/testing/selftests/kvm/x86/smm_test.c +++ b/tools/testing/selftests/kvm/x86/smm_test.c @@ -78,7 +78,7 @@ static void guest_code(void *arg) if (this_cpu_has(X86_FEATURE_SVM)) { generic_svm_setup(svm, l2_guest_code); } else { - GUEST_ASSERT(prepare_for_vmx_operation(vmx_pages)); + prepare_for_vmx_operation(vmx_pages); GUEST_ASSERT(load_vmcs(vmx_pages)); prepare_vmcs(vmx_pages, l2_guest_code); } diff --git a/tools/testing/selftests/kvm/x86/state_test.c b/tools/testing/s= elftests/kvm/x86/state_test.c index 9d4e0c1f7c18..203584fcaf62 100644 --- a/tools/testing/selftests/kvm/x86/state_test.c +++ b/tools/testing/selftests/kvm/x86/state_test.c @@ -75,7 +75,7 @@ void vmx_l2_guest_code(void) static void vmx_l1_guest_code(struct vmx_pages *vmx_pages) { GUEST_ASSERT(vmx_pages->vmcs_gpa); - GUEST_ASSERT(prepare_for_vmx_operation(vmx_pages)); + prepare_for_vmx_operation(vmx_pages); GUEST_SYNC(3); GUEST_ASSERT(load_vmcs(vmx_pages)); GUEST_ASSERT(vmptrst() =3D=3D vmx_pages->vmcs_gpa); diff --git a/tools/testing/selftests/kvm/x86/triple_fault_event_test.c b/to= ols/testing/selftests/kvm/x86/triple_fault_event_test.c index 0d83516f4bd0..57e79922b16b 100644 --- a/tools/testing/selftests/kvm/x86/triple_fault_event_test.c +++ b/tools/testing/selftests/kvm/x86/triple_fault_event_test.c @@ -25,7 +25,7 @@ void l1_guest_code_vmx(struct vmx_pages *vmx) { =20 GUEST_ASSERT(vmx->vmcs_gpa); - GUEST_ASSERT(prepare_for_vmx_operation(vmx)); + prepare_for_vmx_operation(vmx); GUEST_ASSERT(load_vmcs(vmx)); =20 prepare_vmcs(vmx, l2_guest_code); diff --git a/tools/testing/selftests/kvm/x86/vmx_apic_access_test.c b/tools= /testing/selftests/kvm/x86/vmx_apic_access_test.c index 463f73aa9159..7df9ab833cb2 100644 --- a/tools/testing/selftests/kvm/x86/vmx_apic_access_test.c +++ b/tools/testing/selftests/kvm/x86/vmx_apic_access_test.c @@ -38,7 +38,7 @@ static void l1_guest_code(struct vmx_pages *vmx_pages, un= signed long high_gpa) { u32 control; =20 - GUEST_ASSERT(prepare_for_vmx_operation(vmx_pages)); + prepare_for_vmx_operation(vmx_pages); GUEST_ASSERT(load_vmcs(vmx_pages)); =20 /* Prepare the VMCS for L2 execution. */ diff --git a/tools/testing/selftests/kvm/x86/vmx_apicv_updates_test.c b/too= ls/testing/selftests/kvm/x86/vmx_apicv_updates_test.c index f9b88a6f6113..8e4dc304533a 100644 --- a/tools/testing/selftests/kvm/x86/vmx_apicv_updates_test.c +++ b/tools/testing/selftests/kvm/x86/vmx_apicv_updates_test.c @@ -33,7 +33,7 @@ static void l1_guest_code(struct vmx_pages *vmx_pages) { u32 control; =20 - GUEST_ASSERT(prepare_for_vmx_operation(vmx_pages)); + prepare_for_vmx_operation(vmx_pages); GUEST_ASSERT(load_vmcs(vmx_pages)); =20 /* Prepare the VMCS for L2 execution. */ diff --git a/tools/testing/selftests/kvm/x86/vmx_invalid_nested_guest_state= .c b/tools/testing/selftests/kvm/x86/vmx_invalid_nested_guest_state.c index c8379124b317..8999f0458aa1 100644 --- a/tools/testing/selftests/kvm/x86/vmx_invalid_nested_guest_state.c +++ b/tools/testing/selftests/kvm/x86/vmx_invalid_nested_guest_state.c @@ -41,7 +41,7 @@ static void l2_guest_code(void) =20 static void l1_guest_code(struct vmx_pages *vmx_pages) { - GUEST_ASSERT(prepare_for_vmx_operation(vmx_pages)); + prepare_for_vmx_operation(vmx_pages); GUEST_ASSERT(load_vmcs(vmx_pages)); =20 /* Prepare the VMCS for L2 execution. */ diff --git a/tools/testing/selftests/kvm/x86/vmx_nested_la57_state_test.c b= /tools/testing/selftests/kvm/x86/vmx_nested_la57_state_test.c index 75073efa926d..444596ab1592 100644 --- a/tools/testing/selftests/kvm/x86/vmx_nested_la57_state_test.c +++ b/tools/testing/selftests/kvm/x86/vmx_nested_la57_state_test.c @@ -37,7 +37,7 @@ static void l1_guest_code(struct vmx_pages *vmx_pages) GUEST_ASSERT(rdmsr(MSR_GS_BASE) =3D=3D LA57_GS_BASE); =20 GUEST_ASSERT(vmx_pages->vmcs_gpa); - GUEST_ASSERT(prepare_for_vmx_operation(vmx_pages)); + prepare_for_vmx_operation(vmx_pages); GUEST_ASSERT(load_vmcs(vmx_pages)); =20 prepare_vmcs(vmx_pages, l2_guest_code); diff --git a/tools/testing/selftests/kvm/x86/vmx_preemption_timer_test.c b/= tools/testing/selftests/kvm/x86/vmx_preemption_timer_test.c index 523aab667d85..09f9686657ad 100644 --- a/tools/testing/selftests/kvm/x86/vmx_preemption_timer_test.c +++ b/tools/testing/selftests/kvm/x86/vmx_preemption_timer_test.c @@ -71,7 +71,7 @@ void l1_guest_code(struct vmx_pages *vmx_pages) u64 l1_tsc_deadline, l2_tsc_deadline; =20 GUEST_ASSERT(vmx_pages->vmcs_gpa); - GUEST_ASSERT(prepare_for_vmx_operation(vmx_pages)); + prepare_for_vmx_operation(vmx_pages); GUEST_ASSERT(load_vmcs(vmx_pages)); GUEST_ASSERT(vmptrst() =3D=3D vmx_pages->vmcs_gpa); =20 --=20 2.55.0.887.g758fc8c411-goog From nobody Mon Sep 28 04:08:39 2026 Received: from mail-pl1-f199.google.com (mail-pl1-f199.google.com [209.85.214.199]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3C51F3C10B4 for ; Wed, 26 Aug 2026 23:39:30 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.199 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787787573; cv=none; b=fe/UhGmVn5x74ICbhVCnBVgIgGYTMMjNqSoYrYz9aoR2uTLh++7iXxigKXhQ2onMFyYnNKCOhwwBe6zYnyusDNYB14HuN6iTgJPR7IUZtaYndu8AcTJEgFeueu/wanrfnFZPCF1G3CdRRr5HjHLmjv7fQbRUqDZouHj0Rg485OU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787787573; c=relaxed/simple; bh=X1BRoEH9xWUqpdXQA+bNGQ+2MW9ec/x1eBIcfsK56lU=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=TuRWg4lHBbGIx87UiQZDfIRzWusmzxGno6pejpdqOHxHlhAhK5ppYqNkB2+5DfXzNrri/Jl/JHMj2MlTGbi98f8ZClKlFA9SjGYcjJNF+bBW05kW7WK5qyqFXLE4zbuuDj5NNdYXzC/nolY4/6w9eq33/useDGogDAe2ygCgPgk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--seanjc.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=wGL/sobk; arc=none smtp.client-ip=209.85.214.199 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--seanjc.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="wGL/sobk" Received: by mail-pl1-f199.google.com with SMTP id d9443c01a7336-2cfe48ca1efso23523735ad.0 for ; Wed, 26 Aug 2026 16:39:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1787787570; x=1788392370; darn=vger.kernel.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:reply-to:from:to:cc:subject:date:message-id :reply-to:content-type; bh=umk0Ww8KPqFn6CRSo/BfZ8eSGuaGIBiCuDbN+K2wrFs=; b=wGL/sobkIRI9uQGFYcRigZz4zlR2ifGlp78WXwqOkvLWQtsND/Frjr7DfUtielFOIC rWQaD8Cs9UTo9YzeYtL533at1RCrTKDUWK+Z6fEEPmrLTgIFm8EhTj/AlrRnyTZ+XBvp EEewOy/GLUoecWeEWgIc3rSnOsImrLPjSbkWN3x8x7DSFbnngJ+z4HXfaVVlCo3DlKH2 UtUdnzAhyc36xXGFgAweXhmAO8OKY29IN1X2m366NUtxAbGD8UQiFvoW4MyBCllH8qBI clLq/UG2JNL2QN0NdF5CN1uAuOZimQCkbE8srvId7nd4YJfhYCs10lt/24CrBxb30nud Re3Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787787570; x=1788392370; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:reply-to:x-gm-message-state:from:to:cc:subject :date:message-id:reply-to:content-type; bh=umk0Ww8KPqFn6CRSo/BfZ8eSGuaGIBiCuDbN+K2wrFs=; b=MOw4iDMBMnPGCbd/LyDsSzwU42tAWTMSFSpMiyqmqXuIfPm8pmc6wt7kOizeFzaO0b 0lccNkmBszW0DmHFMSC8DK18e/EFqeHWjBYC+LeIDZGzeca6uSKwBSYmdHFMBWsLv8kR Z9vgVVUmWVAjwz4Is1cUiI5jADTx6j8055jDA8mlLDxaPAXhaXlv2Tq/JpC1hwGijrRf SQ6J9FdZj3Z2/PO9e8yNrrmxq5kvO5hONdobsgWHJ0fnzuSjMQn9EvK9F8jHiZAZUMn/ 2w1RUbF2+pYSkWOyidRilisMZGKySph0RAFuqQEEAcLExM4fOr8uYUurAWyrTTo4dWmF H8+Q== X-Forwarded-Encrypted: i=1; AHgh+Rr7KjTzf3hapL9t/wyn9A8L5LrucrJPErzWgXek4wQQXrwIOf6xbgiLvxSsuWWkhump9SSLFmMvPF53HxM=@vger.kernel.org X-Gm-Message-State: AFuF++nNnL42OB1BIsPOq7zJ2VQO2LNqMIQ8AoVyYqW8OGEE64OO8H1a 4zQA+vFPfitulGAzrHTI3S2LRimtrOyZIMmDgWkRaMxfDNq3Wu7i31yAfxhqylhXqG9w/wVoL7I uE79E7Q== X-Received: from plae17.prod.google.com ([2002:a17:902:e0d1:b0:2ca:cba4:f740]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a17:903:2a8e:b0:2cf:82e6:a5 with SMTP id d9443c01a7336-2d707b90f2cmr214231945ad.13.1787787570304; Wed, 26 Aug 2026 16:39:30 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 26 Aug 2026 16:39:14 -0700 In-Reply-To: <20260826233919.998904-1-seanjc@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260826233919.998904-1-seanjc@google.com> X-Mailer: git-send-email 2.55.0.887.g758fc8c411-goog Message-ID: <20260826233919.998904-9-seanjc@google.com> Subject: [PATCH v3 08/13] KVM: selftests: Always assert that vmclear() succeeds From: Sean Christopherson To: Sean Christopherson , Paolo Bonzini Cc: kvm@vger.kernel.org, linux-kernel@vger.kernel.org, f734222792@gmail.com, Vitaly Kuznetsov , Sashiko Bot , Yosry Ahmed Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Continue removing dead error "handling", and assert that VMCLEAR succeeds instead of forcing callers of load_vmcs() to assert success. For all intents and purposes, no functional change intended. Signed-off-by: Sean Christopherson --- tools/testing/selftests/kvm/include/x86/vmx.h | 4 ++-- tools/testing/selftests/kvm/lib/x86/vmx.c | 6 ++---- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/tools/testing/selftests/kvm/include/x86/vmx.h b/tools/testing/= selftests/kvm/include/x86/vmx.h index f7ca6646dfbe..cf37a03a93b9 100644 --- a/tools/testing/selftests/kvm/include/x86/vmx.h +++ b/tools/testing/selftests/kvm/include/x86/vmx.h @@ -326,7 +326,7 @@ static inline void vmxoff(void) __asm__ __volatile__("vmxoff"); } =20 -static inline int vmclear(u64 vmcs_pa) +static inline void vmclear(u64 vmcs_pa) { u8 ret; =20 @@ -335,7 +335,7 @@ static inline int vmclear(u64 vmcs_pa) : [pa]"m"(vmcs_pa) : "cc", "memory"); =20 - return ret; + __GUEST_ASSERT(!ret, "vmclear [0x%lx] failed\n", vmcs_pa); } =20 static inline int vmptrld(u64 vmcs_pa) diff --git a/tools/testing/selftests/kvm/lib/x86/vmx.c b/tools/testing/self= tests/kvm/lib/x86/vmx.c index 03d61b1159f8..57a8287de0d2 100644 --- a/tools/testing/selftests/kvm/lib/x86/vmx.c +++ b/tools/testing/selftests/kvm/lib/x86/vmx.c @@ -170,16 +170,14 @@ bool load_vmcs(struct vmx_pages *vmx) { /* Load a VMCS. */ *(u32 *)(vmx->vmcs) =3D vmcs_revision(); - if (vmclear(vmx->vmcs_gpa)) - return false; + vmclear(vmx->vmcs_gpa); =20 if (vmptrld(vmx->vmcs_gpa)) return false; =20 /* Setup shadow VMCS, do not load it yet. */ *(u32 *)(vmx->shadow_vmcs) =3D vmcs_revision() | 0x80000000ul; - if (vmclear(vmx->shadow_vmcs_gpa)) - return false; + vmclear(vmx->shadow_vmcs_gpa); =20 return true; } --=20 2.55.0.887.g758fc8c411-goog From nobody Mon Sep 28 04:08:39 2026 Received: from mail-pg1-f200.google.com (mail-pg1-f200.google.com [209.85.215.200]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 467A43BB9FD for ; Wed, 26 Aug 2026 23:39:32 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.200 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787787574; cv=none; b=eXRmaGEnqVJgyhRfSnRXU+xJ6AE4ua5Sb2WecJVR8TK67fTvcJT+SqSYqFPoOgK1SD7/RZYEvueE1/sskDfjypn9zhdrTQmoBqIUP8hsELY0U+NZ/us/Ef4wIMMtx0Bqd0ZNaFHd9Gq4/miRczGgDlu7s2iagfq8CIDAAIXqFqI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787787574; c=relaxed/simple; bh=8op8SK69nNJ5+fR1jNHaXw1lEEgW3Gtam9ftxRyX8SI=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=diTVwIo8syVrEMU/GpxvqdhMT1J2Ky9DAJq3Xta1PnkG7fpHQnnmCBUmP6VWcGC2Mt47dSONTzb/Jo0rELQUeyJTG99kls42qD7xUxeg81YWF/QP7KV5R6xGk5NwiWpk0RZAlTL9Vfyq//xBMbTjKKFQs0+1PUfFUd4k07d6sg0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--seanjc.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=pjpJgNdT; arc=none smtp.client-ip=209.85.215.200 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--seanjc.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="pjpJgNdT" Received: by mail-pg1-f200.google.com with SMTP id 41be03b00d2f7-cbbb9c9bfc3so1307353a12.1 for ; Wed, 26 Aug 2026 16:39:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1787787571; x=1788392371; darn=vger.kernel.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:reply-to:from:to:cc:subject:date:message-id :reply-to:content-type; bh=1lA74hrTUIjO6W0d1/xKos4l4p+K5AfqJrIXCLaGcfo=; b=pjpJgNdTHnuu+6L3q/mmjTzy585z5ikezulqFYdV1D3nVkbYUiqzL9S8UOJ2wKKiyL CttGmT3MHtOb/BlCRuugyQ2QWrTkliMrf5mCrL7L+NywjaJdOxr0LNjQ2dcDUiN5/qGt Cvm8jKZA3Wd222XY+r4aI9AqDMVPg3uc/v4b5dXozLDwnwvvPTGhy8e417XijcSo32hp 2tY7fTbiruKuQi2zaSWM2/fLJUiaQPENCyEdKqGzFvQvaDmJZO+nqsa1Cu9w6l4vyrrF fwYXSqBEyj+uTJd4dzSsrSO6KZ8upK5+r6YwJ6n5xOZ9iqYafMhtC85+Mz7jjJ+SQ2GI n0pA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787787571; x=1788392371; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:reply-to:x-gm-message-state:from:to:cc:subject :date:message-id:reply-to:content-type; bh=1lA74hrTUIjO6W0d1/xKos4l4p+K5AfqJrIXCLaGcfo=; b=F8+tp5T5OC47lP80Fig4K9I8uek8PINKzfd6YukxIC/LAsCsBsVXUkNi0hHWZCadGC C6BLQqCvDpgouO+iFQETEwfqUIMeDwkVryJF0+9Dgue9lo5eOp5osk89Ri6rdUYZdWfR kHgD+UQnlxAjSqI/O+Zl/0RP5tYgGmLPcCAoCmTGizy6sIPvnXittpa87V5kanfvkdgB /lNVr1P0cC4ewiItOwzAbcwe9nm1/vVfAbbb1RqRpQvKZMMWvU/BI7OUUMnCWBstfr5C rbwh5mrWCKP+29leT5T92Ln+Ft0Xi6Q8q3s6DP/AEsyN2a0n75F7YRSYxrPWhASbFymh iSQw== X-Forwarded-Encrypted: i=1; AHgh+RqHuq+JaewrxI4XwlpnTk2a+vJGpKz+8n7suazrQToxMhMiZZlBhy9W9hIdhtQuTBmxErOfWbDOqdgiMBg=@vger.kernel.org X-Gm-Message-State: AFuF++lYlq3MztsjFMsmu8Qm88wg0BY5QSv42ECvY7xKQjDxqqbwW1YN 2K27qLhDmxKWO75dBIWeK8qsPVxLnQRbxaLAF8js3iovnMAxDh2X2s60EUkbRqCzgzER/gGUV5w rlV3EDg== X-Received: from plcq19.prod.google.com ([2002:a17:902:e313:b0:2cb:97da:d8ed]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a17:903:1ae5:b0:2d6:f3ce:b51e with SMTP id d9443c01a7336-2d707a354b0mr110982175ad.3.1787787571313; Wed, 26 Aug 2026 16:39:31 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 26 Aug 2026 16:39:15 -0700 In-Reply-To: <20260826233919.998904-1-seanjc@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260826233919.998904-1-seanjc@google.com> X-Mailer: git-send-email 2.55.0.887.g758fc8c411-goog Message-ID: <20260826233919.998904-10-seanjc@google.com> Subject: [PATCH v3 09/13] KVM: selftests: Always assert that vmptrld() succeeds From: Sean Christopherson To: Sean Christopherson , Paolo Bonzini Cc: kvm@vger.kernel.org, linux-kernel@vger.kernel.org, f734222792@gmail.com, Vitaly Kuznetsov , Sashiko Bot , Yosry Ahmed Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Assert that vmptrld() succeeds instead of forcing all callers to do the same, and opportunistically provide a macro to print (hopefully) useful information on VMX instruction failures. Leave load_vmcs() as-is for the moment to minimize the amount of churn since the vmptrld() changes aren't completely trivial. Signed-off-by: Sean Christopherson --- tools/testing/selftests/kvm/include/x86/vmx.h | 23 +++++++++---------- tools/testing/selftests/kvm/lib/x86/vmx.c | 3 +-- tools/testing/selftests/kvm/x86/state_test.c | 6 ++--- 3 files changed, 15 insertions(+), 17 deletions(-) diff --git a/tools/testing/selftests/kvm/include/x86/vmx.h b/tools/testing/= selftests/kvm/include/x86/vmx.h index cf37a03a93b9..8f004b946826 100644 --- a/tools/testing/selftests/kvm/include/x86/vmx.h +++ b/tools/testing/selftests/kvm/include/x86/vmx.h @@ -309,6 +309,10 @@ struct vmx_msr_entry { =20 #include "evmcs.h" =20 +#define GUEST_ASSERT_VMX_INSN_SUCCEEDED(insn, __r, __pa) \ + __GUEST_ASSERT(!__r, __stringify(insn) "[0x%lx] hit %s", \ + __pa, __r < 0 ? "VM-Fail" : ex_str(__r)) + static inline void vmxon(u64 phys) { u8 ret; @@ -338,18 +342,6 @@ static inline void vmclear(u64 vmcs_pa) __GUEST_ASSERT(!ret, "vmclear [0x%lx] failed\n", vmcs_pa); } =20 -static inline int vmptrld(u64 vmcs_pa) -{ - u8 ret; - - __asm__ __volatile__ ("vmptrld %[pa]; setna %[ret]" - : [ret]"=3Drm"(ret) - : [pa]"m"(vmcs_pa) - : "cc", "memory"); - - return ret; -} - static inline int __vmptrld(u64 vmcs_pa) { u64 error_code; @@ -366,6 +358,13 @@ static inline int __vmptrld(u64 vmcs_pa) return vector ? vector : failed ? -EINVAL : 0; } =20 +static inline void vmptrld(u64 vmcs_pa) +{ + int ret =3D __vmptrld(vmcs_pa); + + GUEST_ASSERT_VMX_INSN_SUCCEEDED(vmptrld, ret, vmcs_pa); +} + static inline u64 vmptrst(void) { u64 value =3D 0; diff --git a/tools/testing/selftests/kvm/lib/x86/vmx.c b/tools/testing/self= tests/kvm/lib/x86/vmx.c index 57a8287de0d2..e65024b9ea0d 100644 --- a/tools/testing/selftests/kvm/lib/x86/vmx.c +++ b/tools/testing/selftests/kvm/lib/x86/vmx.c @@ -172,8 +172,7 @@ bool load_vmcs(struct vmx_pages *vmx) *(u32 *)(vmx->vmcs) =3D vmcs_revision(); vmclear(vmx->vmcs_gpa); =20 - if (vmptrld(vmx->vmcs_gpa)) - return false; + vmptrld(vmx->vmcs_gpa); =20 /* Setup shadow VMCS, do not load it yet. */ *(u32 *)(vmx->shadow_vmcs) =3D vmcs_revision() | 0x80000000ul; diff --git a/tools/testing/selftests/kvm/x86/state_test.c b/tools/testing/s= elftests/kvm/x86/state_test.c index 203584fcaf62..a7786f478be0 100644 --- a/tools/testing/selftests/kvm/x86/state_test.c +++ b/tools/testing/selftests/kvm/x86/state_test.c @@ -108,7 +108,7 @@ static void vmx_l1_guest_code(struct vmx_pages *vmx_pag= es) vmwrite(SECONDARY_VM_EXEC_CONTROL, SECONDARY_EXEC_SHADOW_VMCS); vmwrite(VMCS_LINK_POINTER, vmx_pages->shadow_vmcs_gpa); =20 - GUEST_ASSERT(!vmptrld(vmx_pages->shadow_vmcs_gpa)); + vmptrld(vmx_pages->shadow_vmcs_gpa); GUEST_ASSERT(vmlaunch()); GUEST_SYNC(8); GUEST_ASSERT(vmlaunch()); @@ -118,11 +118,11 @@ static void vmx_l1_guest_code(struct vmx_pages *vmx_p= ages) GUEST_SYNC(9); GUEST_ASSERT(vmreadz(GUEST_RIP) =3D=3D 0xc0ffee); =20 - GUEST_ASSERT(!vmptrld(vmx_pages->vmcs_gpa)); + vmptrld(vmx_pages->vmcs_gpa); GUEST_ASSERT(!vmresume()); GUEST_ASSERT(vmreadz(VM_EXIT_REASON) =3D=3D EXIT_REASON_VMCALL); =20 - GUEST_ASSERT(!vmptrld(vmx_pages->shadow_vmcs_gpa)); + vmptrld(vmx_pages->shadow_vmcs_gpa); GUEST_ASSERT(vmreadz(GUEST_RIP) =3D=3D 0xc0ffffee); GUEST_ASSERT(vmlaunch()); GUEST_ASSERT(vmresume()); --=20 2.55.0.887.g758fc8c411-goog From nobody Mon Sep 28 04:08:39 2026 Received: from mail-pl1-f199.google.com (mail-pl1-f199.google.com [209.85.214.199]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 50BF13C4172 for ; Wed, 26 Aug 2026 23:39:33 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.199 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787787575; cv=none; b=UwACZLBmC/6Hucpp4nwRQcc2Tryu70x+71UXc1//WpLb9yRXh/go5tSm7UrxbaZ7wCAynBm1r5tWD3aD/Rr29im+HkideZ268ZVBEyeqWub2az257B1XKUyP2wYs0U9g1DVmn1O969Ubdu3wIBpfokVZqZVtPEALrvGjLsyrE18= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787787575; c=relaxed/simple; bh=zjW6NM1x1xx1hok7gASLPnvaE82n0q0PPZMbkb+kD7o=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=SrJsBfeBoGlnDSHYOGddQvsDGt2Z3fIHxSqNV6nPQFIGEdnkkLkv/dZAmrNrVfj7/IjrVpqaNKoprKQLWtv0bKmV3mu61uIS7tCkvp29VQDuMquYEiHWQa/JSZSFvaKL3Um7ahNmTz1LBXXR3hVShteuo4SRoTZqgi0ldB0weHA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--seanjc.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=vXYvHDrT; arc=none smtp.client-ip=209.85.214.199 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--seanjc.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="vXYvHDrT" Received: by mail-pl1-f199.google.com with SMTP id d9443c01a7336-2cfa4e4684bso33878035ad.2 for ; Wed, 26 Aug 2026 16:39:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1787787573; x=1788392373; darn=vger.kernel.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:reply-to:from:to:cc:subject:date:message-id :reply-to:content-type; bh=Fr6QhIOdssDlLLNG8GW8aL+V7Qrod1A2/fLhWBO4ACg=; b=vXYvHDrTV9PKVzrD/BrG6VjAkrlJYQ9aUghGkVCr5CGz0aqCl5URiOEsfm6E0v7osG /S/5dk/VXPI9lwhRsJJa382MO2R5t687NJUB5ic9tWvSLPgN5kHY9uuE5evWzPu9ShxB ouW2b7DQusAekjNEWE9VakO3/ySeaAFjAPKLePsu1ywQd6NHxZ3YjNEUdWxGS5WWp56k ruD8/j8a27rkj3ToI7nRTPoA9ZT18ysCIKF4E9ChVXpCXmk00q7NoIQd+7fhwW+DqbAP LuU/CsDiSYcZ+wRXZQ8Wn/TTdEgldSluU6b0fMfQGfTOyytu1T8OrGL2YOxZXVrmy0Hg LEIw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787787573; x=1788392373; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:reply-to:x-gm-message-state:from:to:cc:subject :date:message-id:reply-to:content-type; bh=Fr6QhIOdssDlLLNG8GW8aL+V7Qrod1A2/fLhWBO4ACg=; b=rI1fNtGrz0PlvqUsaxXdnwSd/iIcu7HYNNMFIQQGjIzcO7cGtaEZhh93diitYbUb5a 8lIKA8M1gVzacf8A2OzRWKvB472T0VCOrEg2eFINXMQD+V3qVasPE9/gTw8pDa1b/JEw hkomtVkVSFrMsDQBWP+VooqLkoT3Hng2wpfvlb4F6Lj+ZMPQGfDCzEuGXHTpXvDiG83W Liz8P7xJy4oP+Klz5oATUeo47IuOMkd26fkUK2DlK6M6orL45+bqxbK56B2KHLmZUglb Eyg6txURMP4HJQWuUZj0pZCPRAT+qUGRND778i6v8mgTdssN/oY0Zgr8h8ipPQEJLM0i ic4A== X-Forwarded-Encrypted: i=1; AHgh+Ro+vShYjd9AQPx9gDO8I+wGqdCoppE5/E+OifW+i3MoWtmaZJL0I4zSmNjRVKpCBRJ3eUiQ6bQe3+yg9VA=@vger.kernel.org X-Gm-Message-State: AFuF++lOKjOR40Q4F/EgKgO/1AtSHUaUAeLyjAA/EK0M/dgRrUjRuL35 qHAYMcyQuaViD70ZOVcdnq3MDmfkIeGJ6N7HMD+jhHNtSeUPTGLCfnJ7af8UJrE86lnYpQ+42bY ao7p89g== X-Received: from plxl5.prod.google.com ([2002:a17:902:db45:b0:2d6:f794:4e76]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a17:902:da92:b0:2d6:ffa1:429b with SMTP id d9443c01a7336-2d707a31452mr163761705ad.7.1787787572361; Wed, 26 Aug 2026 16:39:32 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 26 Aug 2026 16:39:16 -0700 In-Reply-To: <20260826233919.998904-1-seanjc@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260826233919.998904-1-seanjc@google.com> X-Mailer: git-send-email 2.55.0.887.g758fc8c411-goog Message-ID: <20260826233919.998904-11-seanjc@google.com> Subject: [PATCH v3 10/13] KVM: selftests: Drop useless return code from load_vmcs() From: Sean Christopherson To: Sean Christopherson , Paolo Bonzini Cc: kvm@vger.kernel.org, linux-kernel@vger.kernel.org, f734222792@gmail.com, Vitaly Kuznetsov , Sashiko Bot , Yosry Ahmed Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Now that load_vmcs() either asserts or returns success, drop the return code and the many asserts in its callers. Signed-off-by: Sean Christopherson --- tools/testing/selftests/kvm/include/x86/vmx.h | 2 +- tools/testing/selftests/kvm/lib/x86/memstress.c | 2 +- tools/testing/selftests/kvm/lib/x86/vmx.c | 4 +--- tools/testing/selftests/kvm/x86/aperfmperf_test.c | 2 +- tools/testing/selftests/kvm/x86/kvm_buslock_test.c | 2 +- tools/testing/selftests/kvm/x86/nested_close_kvm_test.c | 2 +- tools/testing/selftests/kvm/x86/nested_dirty_log_test.c | 2 +- tools/testing/selftests/kvm/x86/nested_emulation_test.c | 2 +- tools/testing/selftests/kvm/x86/nested_exceptions_test.c | 2 +- tools/testing/selftests/kvm/x86/nested_invalid_cr3_test.c | 2 +- tools/testing/selftests/kvm/x86/nested_tdp_fault_test.c | 2 +- tools/testing/selftests/kvm/x86/nested_tsc_adjust_test.c | 2 +- tools/testing/selftests/kvm/x86/nested_tsc_scaling_test.c | 2 +- tools/testing/selftests/kvm/x86/save_restore_pf_stress_test.c | 2 +- tools/testing/selftests/kvm/x86/smm_test.c | 2 +- tools/testing/selftests/kvm/x86/state_test.c | 2 +- tools/testing/selftests/kvm/x86/triple_fault_event_test.c | 2 +- tools/testing/selftests/kvm/x86/vmx_apic_access_test.c | 2 +- tools/testing/selftests/kvm/x86/vmx_apicv_updates_test.c | 2 +- .../selftests/kvm/x86/vmx_invalid_nested_guest_state.c | 2 +- tools/testing/selftests/kvm/x86/vmx_nested_la57_state_test.c | 2 +- tools/testing/selftests/kvm/x86/vmx_preemption_timer_test.c | 2 +- 22 files changed, 22 insertions(+), 24 deletions(-) diff --git a/tools/testing/selftests/kvm/include/x86/vmx.h b/tools/testing/= selftests/kvm/include/x86/vmx.h index 8f004b946826..5c46ae95c4c3 100644 --- a/tools/testing/selftests/kvm/include/x86/vmx.h +++ b/tools/testing/selftests/kvm/include/x86/vmx.h @@ -550,7 +550,7 @@ union vmx_ctrl_msr { struct vmx_pages *vcpu_alloc_vmx(struct kvm_vm *vm, gva_t *p_vmx_gva); void prepare_for_vmx_operation(struct vmx_pages *vmx); void prepare_vmcs(struct vmx_pages *vmx, void *guest_rip); -bool load_vmcs(struct vmx_pages *vmx); +void load_vmcs(struct vmx_pages *vmx); =20 bool ept_1g_pages_supported(void); =20 diff --git a/tools/testing/selftests/kvm/lib/x86/memstress.c b/tools/testin= g/selftests/kvm/lib/x86/memstress.c index 2fa39470c1b3..207350ab6114 100644 --- a/tools/testing/selftests/kvm/lib/x86/memstress.c +++ b/tools/testing/selftests/kvm/lib/x86/memstress.c @@ -34,7 +34,7 @@ static void l1_vmx_code(struct vmx_pages *vmx, u64 vcpu_i= d) { GUEST_ASSERT(vmx->vmcs_gpa); prepare_for_vmx_operation(vmx); - GUEST_ASSERT(load_vmcs(vmx)); + load_vmcs(vmx); GUEST_ASSERT(ept_1g_pages_supported()); =20 *(u64 *)vmx->stack =3D vcpu_id; diff --git a/tools/testing/selftests/kvm/lib/x86/vmx.c b/tools/testing/self= tests/kvm/lib/x86/vmx.c index e65024b9ea0d..5c6cadc08405 100644 --- a/tools/testing/selftests/kvm/lib/x86/vmx.c +++ b/tools/testing/selftests/kvm/lib/x86/vmx.c @@ -166,7 +166,7 @@ void prepare_for_vmx_operation(struct vmx_pages *vmx) vmxon(vmx->vmxon_gpa); } =20 -bool load_vmcs(struct vmx_pages *vmx) +void load_vmcs(struct vmx_pages *vmx) { /* Load a VMCS. */ *(u32 *)(vmx->vmcs) =3D vmcs_revision(); @@ -177,8 +177,6 @@ bool load_vmcs(struct vmx_pages *vmx) /* Setup shadow VMCS, do not load it yet. */ *(u32 *)(vmx->shadow_vmcs) =3D vmcs_revision() | 0x80000000ul; vmclear(vmx->shadow_vmcs_gpa); - - return true; } =20 static bool ept_vpid_cap_supported(u64 mask) diff --git a/tools/testing/selftests/kvm/x86/aperfmperf_test.c b/tools/test= ing/selftests/kvm/x86/aperfmperf_test.c index e32131cd6ed1..11f5894d8ac7 100644 --- a/tools/testing/selftests/kvm/x86/aperfmperf_test.c +++ b/tools/testing/selftests/kvm/x86/aperfmperf_test.c @@ -71,7 +71,7 @@ static void l1_svm_code(struct svm_test_data *svm) static void l1_vmx_code(struct vmx_pages *vmx) { prepare_for_vmx_operation(vmx); - GUEST_ASSERT_EQ(load_vmcs(vmx), true); + load_vmcs(vmx); =20 prepare_vmcs(vmx, NULL); =20 diff --git a/tools/testing/selftests/kvm/x86/kvm_buslock_test.c b/tools/tes= ting/selftests/kvm/x86/kvm_buslock_test.c index 2e006ce95896..22993ec697fa 100644 --- a/tools/testing/selftests/kvm/x86/kvm_buslock_test.c +++ b/tools/testing/selftests/kvm/x86/kvm_buslock_test.c @@ -43,7 +43,7 @@ static void l1_svm_code(struct svm_test_data *svm) static void l1_vmx_code(struct vmx_pages *vmx) { prepare_for_vmx_operation(vmx); - GUEST_ASSERT_EQ(load_vmcs(vmx), true); + load_vmcs(vmx); =20 prepare_vmcs(vmx, NULL); =20 diff --git a/tools/testing/selftests/kvm/x86/nested_close_kvm_test.c b/tool= s/testing/selftests/kvm/x86/nested_close_kvm_test.c index 479e9adcc20b..309cab009929 100644 --- a/tools/testing/selftests/kvm/x86/nested_close_kvm_test.c +++ b/tools/testing/selftests/kvm/x86/nested_close_kvm_test.c @@ -31,7 +31,7 @@ static void l2_guest_code(void) static void l1_vmx_code(struct vmx_pages *vmx_pages) { prepare_for_vmx_operation(vmx_pages); - GUEST_ASSERT(load_vmcs(vmx_pages)); + load_vmcs(vmx_pages); =20 /* Prepare the VMCS for L2 execution. */ prepare_vmcs(vmx_pages, l2_guest_code); diff --git a/tools/testing/selftests/kvm/x86/nested_dirty_log_test.c b/tool= s/testing/selftests/kvm/x86/nested_dirty_log_test.c index 57f49471f4aa..dca2bfc8b158 100644 --- a/tools/testing/selftests/kvm/x86/nested_dirty_log_test.c +++ b/tools/testing/selftests/kvm/x86/nested_dirty_log_test.c @@ -94,7 +94,7 @@ void l1_vmx_code(struct vmx_pages *vmx) =20 GUEST_ASSERT(vmx->vmcs_gpa); prepare_for_vmx_operation(vmx); - GUEST_ASSERT(load_vmcs(vmx)); + load_vmcs(vmx); =20 if (vmx->eptp_gpa) l2_rip =3D l2_guest_code_tdp_enabled; diff --git a/tools/testing/selftests/kvm/x86/nested_emulation_test.c b/tool= s/testing/selftests/kvm/x86/nested_emulation_test.c index 6f27930bb6b5..2b38eff4f516 100644 --- a/tools/testing/selftests/kvm/x86/nested_emulation_test.c +++ b/tools/testing/selftests/kvm/x86/nested_emulation_test.c @@ -67,7 +67,7 @@ static void guest_code(void *test_data) vmcb->control.intercept_exceptions =3D 0; } else { prepare_for_vmx_operation(test_data); - GUEST_ASSERT(load_vmcs(test_data)); + load_vmcs(test_data); =20 prepare_vmcs(test_data, NULL); GUEST_ASSERT(!vmwrite(GUEST_IDTR_LIMIT, 0)); diff --git a/tools/testing/selftests/kvm/x86/nested_exceptions_test.c b/too= ls/testing/selftests/kvm/x86/nested_exceptions_test.c index 6a36cf4d1eab..50c271a03692 100644 --- a/tools/testing/selftests/kvm/x86/nested_exceptions_test.c +++ b/tools/testing/selftests/kvm/x86/nested_exceptions_test.c @@ -127,7 +127,7 @@ static void l1_vmx_code(struct vmx_pages *vmx) { prepare_for_vmx_operation(vmx); =20 - GUEST_ASSERT_EQ(load_vmcs(vmx), true); + load_vmcs(vmx); =20 prepare_vmcs(vmx, NULL); GUEST_ASSERT_EQ(vmwrite(GUEST_IDTR_LIMIT, 0), 0); diff --git a/tools/testing/selftests/kvm/x86/nested_invalid_cr3_test.c b/to= ols/testing/selftests/kvm/x86/nested_invalid_cr3_test.c index 749a93c318fe..43deb3b358ea 100644 --- a/tools/testing/selftests/kvm/x86/nested_invalid_cr3_test.c +++ b/tools/testing/selftests/kvm/x86/nested_invalid_cr3_test.c @@ -41,7 +41,7 @@ static void l1_vmx_code(struct vmx_pages *vmx_pages) uintptr_t save_cr3; =20 prepare_for_vmx_operation(vmx_pages); - GUEST_ASSERT(load_vmcs(vmx_pages)); + load_vmcs(vmx_pages); =20 prepare_vmcs(vmx_pages, l2_guest_code); =20 diff --git a/tools/testing/selftests/kvm/x86/nested_tdp_fault_test.c b/tool= s/testing/selftests/kvm/x86/nested_tdp_fault_test.c index b143ebe710e7..52df467e9c44 100644 --- a/tools/testing/selftests/kvm/x86/nested_tdp_fault_test.c +++ b/tools/testing/selftests/kvm/x86/nested_tdp_fault_test.c @@ -56,7 +56,7 @@ static void l1_vmx_code(struct vmx_pages *vmx, u64 expect= ed_fault_gpa, =20 GUEST_ASSERT(vmx->vmcs_gpa); prepare_for_vmx_operation(vmx); - GUEST_ASSERT(load_vmcs(vmx)); + load_vmcs(vmx); =20 prepare_vmcs(vmx, l2_entry); =20 diff --git a/tools/testing/selftests/kvm/x86/nested_tsc_adjust_test.c b/too= ls/testing/selftests/kvm/x86/nested_tsc_adjust_test.c index 3d2eae848ba6..05194762ed33 100644 --- a/tools/testing/selftests/kvm/x86/nested_tsc_adjust_test.c +++ b/tools/testing/selftests/kvm/x86/nested_tsc_adjust_test.c @@ -87,7 +87,7 @@ static void l1_guest_code(void *data) u32 control; =20 prepare_for_vmx_operation(vmx_pages); - GUEST_ASSERT(load_vmcs(vmx_pages)); + load_vmcs(vmx_pages); =20 prepare_vmcs(vmx_pages, l2_guest_code); control =3D vmreadz(CPU_BASED_VM_EXEC_CONTROL); diff --git a/tools/testing/selftests/kvm/x86/nested_tsc_scaling_test.c b/to= ols/testing/selftests/kvm/x86/nested_tsc_scaling_test.c index 584071146b69..b9fae268a9ec 100644 --- a/tools/testing/selftests/kvm/x86/nested_tsc_scaling_test.c +++ b/tools/testing/selftests/kvm/x86/nested_tsc_scaling_test.c @@ -106,7 +106,7 @@ static void l1_vmx_code(struct vmx_pages *vmx_pages) check_tsc_freq(UCHECK_L1); =20 prepare_for_vmx_operation(vmx_pages); - GUEST_ASSERT(load_vmcs(vmx_pages)); + load_vmcs(vmx_pages); =20 /* prepare the VMCS for L2 execution */ prepare_vmcs(vmx_pages, l2_guest_code); diff --git a/tools/testing/selftests/kvm/x86/save_restore_pf_stress_test.c = b/tools/testing/selftests/kvm/x86/save_restore_pf_stress_test.c index 6ab73a0bd34a..c0e4d6e156ad 100644 --- a/tools/testing/selftests/kvm/x86/save_restore_pf_stress_test.c +++ b/tools/testing/selftests/kvm/x86/save_restore_pf_stress_test.c @@ -99,7 +99,7 @@ static void l1_svm_code(struct svm_test_data *svm) static void l1_vmx_code(struct vmx_pages *vmx) { prepare_for_vmx_operation(vmx); - GUEST_ASSERT(load_vmcs(vmx)); + load_vmcs(vmx); prepare_vmcs(vmx, guest_access_memory); =20 GUEST_ASSERT(!vmwrite(EXCEPTION_BITMAP, BIT(UD_VECTOR))); diff --git a/tools/testing/selftests/kvm/x86/smm_test.c b/tools/testing/sel= ftests/kvm/x86/smm_test.c index be5662792ec8..377df09e582a 100644 --- a/tools/testing/selftests/kvm/x86/smm_test.c +++ b/tools/testing/selftests/kvm/x86/smm_test.c @@ -79,7 +79,7 @@ static void guest_code(void *arg) generic_svm_setup(svm, l2_guest_code); } else { prepare_for_vmx_operation(vmx_pages); - GUEST_ASSERT(load_vmcs(vmx_pages)); + load_vmcs(vmx_pages); prepare_vmcs(vmx_pages, l2_guest_code); } =20 diff --git a/tools/testing/selftests/kvm/x86/state_test.c b/tools/testing/s= elftests/kvm/x86/state_test.c index a7786f478be0..bd5e9e36b2c9 100644 --- a/tools/testing/selftests/kvm/x86/state_test.c +++ b/tools/testing/selftests/kvm/x86/state_test.c @@ -77,7 +77,7 @@ static void vmx_l1_guest_code(struct vmx_pages *vmx_pages) GUEST_ASSERT(vmx_pages->vmcs_gpa); prepare_for_vmx_operation(vmx_pages); GUEST_SYNC(3); - GUEST_ASSERT(load_vmcs(vmx_pages)); + load_vmcs(vmx_pages); GUEST_ASSERT(vmptrst() =3D=3D vmx_pages->vmcs_gpa); =20 GUEST_SYNC(4); diff --git a/tools/testing/selftests/kvm/x86/triple_fault_event_test.c b/to= ols/testing/selftests/kvm/x86/triple_fault_event_test.c index 57e79922b16b..a9fb7046ea4f 100644 --- a/tools/testing/selftests/kvm/x86/triple_fault_event_test.c +++ b/tools/testing/selftests/kvm/x86/triple_fault_event_test.c @@ -26,7 +26,7 @@ void l1_guest_code_vmx(struct vmx_pages *vmx) =20 GUEST_ASSERT(vmx->vmcs_gpa); prepare_for_vmx_operation(vmx); - GUEST_ASSERT(load_vmcs(vmx)); + load_vmcs(vmx); =20 prepare_vmcs(vmx, l2_guest_code); =20 diff --git a/tools/testing/selftests/kvm/x86/vmx_apic_access_test.c b/tools= /testing/selftests/kvm/x86/vmx_apic_access_test.c index 7df9ab833cb2..1793f7b02219 100644 --- a/tools/testing/selftests/kvm/x86/vmx_apic_access_test.c +++ b/tools/testing/selftests/kvm/x86/vmx_apic_access_test.c @@ -39,7 +39,7 @@ static void l1_guest_code(struct vmx_pages *vmx_pages, un= signed long high_gpa) u32 control; =20 prepare_for_vmx_operation(vmx_pages); - GUEST_ASSERT(load_vmcs(vmx_pages)); + load_vmcs(vmx_pages); =20 /* Prepare the VMCS for L2 execution. */ prepare_vmcs(vmx_pages, l2_guest_code); diff --git a/tools/testing/selftests/kvm/x86/vmx_apicv_updates_test.c b/too= ls/testing/selftests/kvm/x86/vmx_apicv_updates_test.c index 8e4dc304533a..f7ebc9b15629 100644 --- a/tools/testing/selftests/kvm/x86/vmx_apicv_updates_test.c +++ b/tools/testing/selftests/kvm/x86/vmx_apicv_updates_test.c @@ -34,7 +34,7 @@ static void l1_guest_code(struct vmx_pages *vmx_pages) u32 control; =20 prepare_for_vmx_operation(vmx_pages); - GUEST_ASSERT(load_vmcs(vmx_pages)); + load_vmcs(vmx_pages); =20 /* Prepare the VMCS for L2 execution. */ prepare_vmcs(vmx_pages, l2_guest_code); diff --git a/tools/testing/selftests/kvm/x86/vmx_invalid_nested_guest_state= .c b/tools/testing/selftests/kvm/x86/vmx_invalid_nested_guest_state.c index 8999f0458aa1..4a6445958cf4 100644 --- a/tools/testing/selftests/kvm/x86/vmx_invalid_nested_guest_state.c +++ b/tools/testing/selftests/kvm/x86/vmx_invalid_nested_guest_state.c @@ -42,7 +42,7 @@ static void l2_guest_code(void) static void l1_guest_code(struct vmx_pages *vmx_pages) { prepare_for_vmx_operation(vmx_pages); - GUEST_ASSERT(load_vmcs(vmx_pages)); + load_vmcs(vmx_pages); =20 /* Prepare the VMCS for L2 execution. */ prepare_vmcs(vmx_pages, l2_guest_code); diff --git a/tools/testing/selftests/kvm/x86/vmx_nested_la57_state_test.c b= /tools/testing/selftests/kvm/x86/vmx_nested_la57_state_test.c index 444596ab1592..04c2d5113e84 100644 --- a/tools/testing/selftests/kvm/x86/vmx_nested_la57_state_test.c +++ b/tools/testing/selftests/kvm/x86/vmx_nested_la57_state_test.c @@ -38,7 +38,7 @@ static void l1_guest_code(struct vmx_pages *vmx_pages) =20 GUEST_ASSERT(vmx_pages->vmcs_gpa); prepare_for_vmx_operation(vmx_pages); - GUEST_ASSERT(load_vmcs(vmx_pages)); + load_vmcs(vmx_pages); =20 prepare_vmcs(vmx_pages, l2_guest_code); =20 diff --git a/tools/testing/selftests/kvm/x86/vmx_preemption_timer_test.c b/= tools/testing/selftests/kvm/x86/vmx_preemption_timer_test.c index 09f9686657ad..50fc9309158f 100644 --- a/tools/testing/selftests/kvm/x86/vmx_preemption_timer_test.c +++ b/tools/testing/selftests/kvm/x86/vmx_preemption_timer_test.c @@ -72,7 +72,7 @@ void l1_guest_code(struct vmx_pages *vmx_pages) =20 GUEST_ASSERT(vmx_pages->vmcs_gpa); prepare_for_vmx_operation(vmx_pages); - GUEST_ASSERT(load_vmcs(vmx_pages)); + load_vmcs(vmx_pages); GUEST_ASSERT(vmptrst() =3D=3D vmx_pages->vmcs_gpa); =20 prepare_vmcs(vmx_pages, l2_guest_code); --=20 2.55.0.887.g758fc8c411-goog From nobody Mon Sep 28 04:08:39 2026 Received: from mail-pl1-f198.google.com (mail-pl1-f198.google.com [209.85.214.198]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 79E5A3D5246 for ; Wed, 26 Aug 2026 23:39:34 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.198 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787787576; cv=none; b=RJbtTyKLWqUGnw+rGEl0+rg3wopoGcxpPzxlWezDwJAaq3oQv+4I56f1L+fV6VgCzJ0pEXFKBC8baZ91H2iyh4BWZ8ytgr+7ZCJm6IKrTr9BrAjPCE6wzW99xDkiLW4yy6vyEPciEX4gaZy8wBn9CGR20GbwvT83RS/Wb3zFZts= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787787576; c=relaxed/simple; bh=WR3vfwn/tUBcTJ88hZA6vzRfWzzpkEfUDot7lz2orgo=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=rDAP3gmizru1tCUszp5EcBaXbq30eT06reXFaqNTuxyGADBAlda/d15wj5J6XR/fbs14nyavUdZuiCdZTdkKthtTF6YIQyCMTIDq+XMjOd5GQHQnIGC/xfqjnuH9fJN6bEwUDnbzDRDsCglBUXjT+zN+3grPf/ML9bOi05Mf1xs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--seanjc.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=ruhFSspg; arc=none smtp.client-ip=209.85.214.198 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--seanjc.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="ruhFSspg" Received: by mail-pl1-f198.google.com with SMTP id d9443c01a7336-2ce7dfd33ffso15432595ad.0 for ; Wed, 26 Aug 2026 16:39:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1787787574; x=1788392374; darn=vger.kernel.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:reply-to:from:to:cc:subject:date:message-id :reply-to:content-type; bh=Zj4ROiVmXRICZe7l5AdtnEuLk38uQAGV2MCs3QZelPA=; b=ruhFSspgeEKXucumfwJXpFHkc6Hy+oOWOluJhwmBTPPTC3o9i++ukPZcONBcvrMHZM a9LiBH+GQZbwDXin1S9LGMs1qrsHyGolheGt8NDtXFt0JeKHN2PJm9e3w3Oxt15c6/1p YJiq4tD38ufC36A7lh5BWLujgdo1mMhUdvFxdqjUmLp2WCWEI6aWeXdlg+/Qdb0Pp3L2 NqLu4Z/1xVATV3NJMfD2zysO8qDPAi9fzuWv1uFSKN8k6sBZIDN46Wx90u0za1P1zuRo ozYWWxbza6KVg8qovthmueoFKSAvH1GTzmu5YKm8dFx/kx5KnwIgcBwJvlgu9qyHCcCx 6yjQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787787574; x=1788392374; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:reply-to:x-gm-message-state:from:to:cc:subject :date:message-id:reply-to:content-type; bh=Zj4ROiVmXRICZe7l5AdtnEuLk38uQAGV2MCs3QZelPA=; b=sMCwM7VwrHJ9k5jlAvqQ4hyLAQmLuSgS93iFeNiPfLT4o92ng4O+d+ru1PgtdVv1Pp 1dGQtOMY/HQxG523zr5e59wVTug2oqed9N/eRfPHlvg6aqlNKeqFJqhqMbOw9Yw5wfQ8 xRo9+1OhNlcHRKaFowFJT3vU7yHEvidkzkHCbNF5kKnlpGAy98zwbOLHesYvLysKqC/v 64URL8QZzz55YayHa/2a72ri0P9SwIzI5oslSFKgQ/ra0znAr8IifXANts1XdH0Syd8a H0NNhhj/7uo7MepGQYJFwGZXwAtNDHkIzx+IChACZraZ2Yebtvdj2znzQrtiCghmNDoz ITJA== X-Forwarded-Encrypted: i=1; AHgh+RqS5/UEoVW5O0aUq0WcxGTbymU3rvl9l4htNhXhSPcBAvZ3+mMhdvQDTRLoDXXwaeyYfBxzLjhhQXXoFGs=@vger.kernel.org X-Gm-Message-State: AFuF++mUXc0FZrd3vCiKL0QgXVBvhAsmfzh0q4xbXgOHmGS/iTRDE5qF BHz6hRn9hyahKaNqI/z6yK8opd8Dk84vO1NGS329hsR1p/oWNbNYKzIvXUe+20TRv48Gp68D2j8 Q4L5fNg== X-Received: from pldr12.prod.google.com ([2002:a17:903:410c:b0:2ce:fa2c:7de3]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a17:903:22ca:b0:2d6:fd55:3a9d with SMTP id d9443c01a7336-2d707a55a21mr179370145ad.3.1787787573491; Wed, 26 Aug 2026 16:39:33 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 26 Aug 2026 16:39:17 -0700 In-Reply-To: <20260826233919.998904-1-seanjc@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260826233919.998904-1-seanjc@google.com> X-Mailer: git-send-email 2.55.0.887.g758fc8c411-goog Message-ID: <20260826233919.998904-12-seanjc@google.com> Subject: [PATCH v3 11/13] KVM: selftests: Add macros to handle simple VMX instructions From: Sean Christopherson To: Sean Christopherson , Paolo Bonzini Cc: kvm@vger.kernel.org, linux-kernel@vger.kernel.org, f734222792@gmail.com, Vitaly Kuznetsov , Sashiko Bot , Yosry Ahmed Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add macros to build helpers for VMXON, VMPTRLD, and VMCLEAR, i.e. the VMX instructions that take a VMCS address as input, and don't have outputs. Getting the params right is annoying, especially when using KVM_ASM_SAFE(). As a bonus, this adds non-asserting double-underscores versions of VMXON and VMCLEAR for "free". Signed-off-by: Sean Christopherson --- tools/testing/selftests/kvm/include/x86/vmx.h | 71 +++++++------------ 1 file changed, 26 insertions(+), 45 deletions(-) diff --git a/tools/testing/selftests/kvm/include/x86/vmx.h b/tools/testing/= selftests/kvm/include/x86/vmx.h index 5c46ae95c4c3..3def8df902a2 100644 --- a/tools/testing/selftests/kvm/include/x86/vmx.h +++ b/tools/testing/selftests/kvm/include/x86/vmx.h @@ -313,58 +313,39 @@ struct vmx_msr_entry { __GUEST_ASSERT(!__r, __stringify(insn) "[0x%lx] hit %s", \ __pa, __r < 0 ? "VM-Fail" : ex_str(__r)) =20 -static inline void vmxon(u64 phys) -{ - u8 ret; - - __asm__ __volatile__ ("vmxon %[pa]; setna %[ret]" - : [ret]"=3Drm"(ret) - : [pa]"m"(phys) - : "cc", "memory"); - - __GUEST_ASSERT(!ret, "vmxon [0x%lx] failed", phys); +#define BUILD_VMCS_ASM_HELPERS(insn) \ +static inline int __##insn(u64 vmcs_pa) \ +{ \ + u64 error_code; \ + u8 vector; \ + u8 failed; \ + \ + asm volatile(KVM_ASM_SAFE(__stringify(insn) " %[pa]") \ + "\n\tsetna %[failed]" \ + : KVM_ASM_SAFE_OUTPUTS(vector, error_code), \ + [failed]"=3Dqm"(failed) \ + : [pa]"m"(vmcs_pa) \ + : "cc", "memory", KVM_ASM_SAFE_CLOBBERS); \ + \ + return vector ? vector : failed ? -EINVAL : 0; \ +} \ + \ +static inline void insn(u64 vmcs_pa) \ +{ \ + int ret =3D __##insn(vmcs_pa); \ + \ + GUEST_ASSERT_VMX_INSN_SUCCEEDED(insn, ret, vmcs_pa); \ } =20 +BUILD_VMCS_ASM_HELPERS(vmxon) +BUILD_VMCS_ASM_HELPERS(vmptrld) +BUILD_VMCS_ASM_HELPERS(vmclear) + static inline void vmxoff(void) { __asm__ __volatile__("vmxoff"); } =20 -static inline void vmclear(u64 vmcs_pa) -{ - u8 ret; - - __asm__ __volatile__ ("vmclear %[pa]; setna %[ret]" - : [ret]"=3Drm"(ret) - : [pa]"m"(vmcs_pa) - : "cc", "memory"); - - __GUEST_ASSERT(!ret, "vmclear [0x%lx] failed\n", vmcs_pa); -} - -static inline int __vmptrld(u64 vmcs_pa) -{ - u64 error_code; - u8 vector; - u8 failed; - - asm volatile(KVM_ASM_SAFE("vmptrld %[pa]") - "\n\tsetna %[failed]" - : KVM_ASM_SAFE_OUTPUTS(vector, error_code), - [failed]"=3Dqm"(failed) - : [pa]"m"(vmcs_pa) - : "cc", "memory", KVM_ASM_SAFE_CLOBBERS); - - return vector ? vector : failed ? -EINVAL : 0; -} - -static inline void vmptrld(u64 vmcs_pa) -{ - int ret =3D __vmptrld(vmcs_pa); - - GUEST_ASSERT_VMX_INSN_SUCCEEDED(vmptrld, ret, vmcs_pa); -} - static inline u64 vmptrst(void) { u64 value =3D 0; --=20 2.55.0.887.g758fc8c411-goog From nobody Mon Sep 28 04:08:39 2026 Received: from mail-pl1-f198.google.com (mail-pl1-f198.google.com [209.85.214.198]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 90A393D7D7F for ; Wed, 26 Aug 2026 23:39:35 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.198 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787787577; cv=none; b=YMUEVtACUm0DRVvwZ2kG9nn4Z8rAfRn9sWc81y9wDVyfIx1Fe1h91NhIQZw/JmieFAbouG9lsO+KVK+WS82cEzuHmWXCwC+JGsmBJ57+z5n0+9Ru6+rjBn1L08EVpzasNtqWx+vTWlfh6cMkjLImOWVaKyLKSOl4mo11FfaiSNk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787787577; c=relaxed/simple; bh=mX6wXHMIic+NJOq4AXotoGAmdGRenuNOIkRtcGgvZzk=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=OtwHXc6x7pL7xQ6S+Ldtqi4t/2GSUeT1Co7Is5HELSyuOiUiI9q21vOzy9jrvYLxKyEO+H5/OHBlbWoY1rGPaL1lyOaC+F59U83fGzSlY55zJfSaFOOC4D8Vjo+UWrHr8Gwqr4jlQFIRWnvqxWbsp44WjHm7KKlpRyimIWTwixI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--seanjc.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=eSpKjfTN; arc=none smtp.client-ip=209.85.214.198 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--seanjc.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="eSpKjfTN" Received: by mail-pl1-f198.google.com with SMTP id d9443c01a7336-2d02df2bf09so1194405ad.0 for ; Wed, 26 Aug 2026 16:39:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1787787575; x=1788392375; darn=vger.kernel.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:reply-to:from:to:cc:subject:date:message-id :reply-to:content-type; bh=Eyf8YBnQl608Aj3Mcz2kxDmbrzzhdHd7IDHJSrs5/do=; b=eSpKjfTN8QCMKJ5W3b1qvg3HIzeYgN7INkhJoOvVAwaE7yoWQcmNrPa22ncYbWWeO2 Z/y4Gp28Mkr4pUjmL1OlEWa6XnzGacPY+vTdvvPIKX7Z7N9qTyOPEa9rekaw5Pg4v14x ExD5li9DsfuXz6ydBIqEdQEK3kK1gEX08T5OrmqnEKxDoIgJYPRSJkhpLFf8ksfXRVUo S9gp085iz55SLhLqNyMsuURfvqQDKfcevECbNqkVupD5SwsXoybyhygaLbDHDOka2bLy xhju+QPcqRjHYne6LaNW0RMTyYmS1GVihOCwm14RvINQ4RTCxcgq+X/p0/2+YDWzvvn5 HHiQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787787575; x=1788392375; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:reply-to:x-gm-message-state:from:to:cc:subject :date:message-id:reply-to:content-type; bh=Eyf8YBnQl608Aj3Mcz2kxDmbrzzhdHd7IDHJSrs5/do=; b=bxRGi/3IB/lwM0WS/9bRhmLiViGNn2aKNTKIlx+Hs9vFNLgSUo813I3iOZHde5q3lS DCdcuPsUOXqj6vhDW3L8UVC50mNHE0Uk5fwhD2afiIO1Qcloe+MoiJbg8/Cr2Ntwq9/d j2ktgA5dxxwPjL4UrHMaTWaoz6o9VeQG4AiLNnMndWxprmrn5JiSpzhcZOW4ubHtXIwB bnmn+YBjLtBadoJ7X6Y7DraPL7q/nP8A9rdr0CXstgWn+wFLoukbzcSV0Rc+yDTXl1Ci H3bWRhqBR1g0UBmxICQVbKbz/O4mQ381FmQgL15h3wEx0FjFBnx87fruILsx4p5nN6rM cwFQ== X-Forwarded-Encrypted: i=1; AHgh+RpZsUPe8UOIgfd7W0cA46V5bbWu6cU6kW5Htem0pa4i6wuzqMD75nyqquaLD6A2C7XlRNFwAiAlxmjr9fs=@vger.kernel.org X-Gm-Message-State: AFuF++nXR2TAB7R54YxyZxmNQ0iq7IrebrLja7NHzQ/y+FDSVNN0JsIr sCX7Hz9GvAclB7ycsAw+dI5AH8PxIDplYHsOGo4riXKpogMJQ06V/YSJ6mQJ4aUoOVI7hoE+tGT f6LQDVQ== X-Received: from plbkt4.prod.google.com ([2002:a17:903:884:b0:2d1:1cf0:2039]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a17:903:fad:b0:2d6:df31:5bd0 with SMTP id d9443c01a7336-2d707af0cc5mr206518655ad.10.1787787574681; Wed, 26 Aug 2026 16:39:34 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 26 Aug 2026 16:39:18 -0700 In-Reply-To: <20260826233919.998904-1-seanjc@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260826233919.998904-1-seanjc@google.com> X-Mailer: git-send-email 2.55.0.887.g758fc8c411-goog Message-ID: <20260826233919.998904-13-seanjc@google.com> Subject: [PATCH v3 12/13] KVM: selftests: Dedup assembly code for VMLAUNCH and VMRESUME From: Sean Christopherson To: Sean Christopherson , Paolo Bonzini Cc: kvm@vger.kernel.org, linux-kernel@vger.kernel.org, f734222792@gmail.com, Vitaly Kuznetsov , Sashiko Bot , Yosry Ahmed Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Dedup the assembly code from VMLAUNCH vs. VMRESUME, the difference is literally only the actual VM-Enter instruction. No functional change intended. Cc: Yosry Ahmed Signed-off-by: Sean Christopherson Reviewed-by: Yosry Ahmed --- tools/testing/selftests/kvm/include/x86/vmx.h | 74 +++++++------------ 1 file changed, 26 insertions(+), 48 deletions(-) diff --git a/tools/testing/selftests/kvm/include/x86/vmx.h b/tools/testing/= selftests/kvm/include/x86/vmx.h index 3def8df902a2..fa01341e22bc 100644 --- a/tools/testing/selftests/kvm/include/x86/vmx.h +++ b/tools/testing/selftests/kvm/include/x86/vmx.h @@ -359,55 +359,33 @@ static inline u64 vmptrst(void) return value; } =20 -static inline int vmlaunch(void) -{ - int ret; - - if (enable_evmcs) - return evmcs_vmlaunch(); - - __asm__ __volatile__("push $0;" - "vmwrite %%rsp, %[host_rsp];" - "lea 1f(%%rip), %%rax;" - "vmwrite %%rax, %[host_rip];" - VMX_SWITCH_GPRS_ASM - "vmlaunch;" - "incq (%%rsp);" - "1: ;" - VMX_SWITCH_GPRS_ASM - "pop %%rax;" - : [ret]"=3D&a"(ret) - : [host_rsp]"r"((u64)HOST_RSP), - [host_rip]"r"((u64)HOST_RIP), - GUEST_REGS_OFFSETS - : "memory", "cc"); - return ret; -} - -static inline int vmresume(void) -{ - int ret; - - if (enable_evmcs) - return evmcs_vmresume(); - - __asm__ __volatile__("push $0;" - "vmwrite %%rsp, %[host_rsp];" - "lea 1f(%%rip), %%rax;" - "vmwrite %%rax, %[host_rip];" - VMX_SWITCH_GPRS_ASM - "vmresume;" - "incq (%%rsp);" - "1: ;" - VMX_SWITCH_GPRS_ASM - "pop %%rax;" - : [ret]"=3D&a"(ret) - : [host_rsp]"r"((u64)HOST_RSP), - [host_rip]"r"((u64)HOST_RIP), - GUEST_REGS_OFFSETS - : "memory", "cc"); - return ret; +#define BUILD_VMX_VM_ENTRY_HELPERS(insn) \ +static inline int insn(void) \ +{ \ + int ret; \ + \ + if (enable_evmcs) \ + return evmcs_##insn(); \ + \ + __asm__ __volatile__("push $0;" \ + "vmwrite %%rsp, %[host_rsp];" \ + "lea 1f(%%rip), %%rax;" \ + "vmwrite %%rax, %[host_rip];" \ + VMX_SWITCH_GPRS_ASM \ + __stringify(insn)";" \ + "incq (%%rsp);" \ + "1: ;" \ + VMX_SWITCH_GPRS_ASM \ + "pop %%rax;" \ + : [ret]"=3D&a"(ret) \ + : [host_rsp]"r"((u64)HOST_RSP), \ + [host_rip]"r"((u64)HOST_RIP), \ + GUEST_REGS_OFFSETS \ + : "memory", "cc"); \ + return ret; \ } +BUILD_VMX_VM_ENTRY_HELPERS(vmlaunch) +BUILD_VMX_VM_ENTRY_HELPERS(vmresume) =20 static inline void vmcall(void) { --=20 2.55.0.887.g758fc8c411-goog From nobody Mon Sep 28 04:08:39 2026 Received: from mail-pf1-f197.google.com (mail-pf1-f197.google.com [209.85.210.197]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id EC50B3D9DB9 for ; Wed, 26 Aug 2026 23:39:36 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.197 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787787580; cv=none; b=Nmpbi6SgBS2Z4JALzNboE5aMpeVXyay7r3cLqqYcfUx/GHzi1gbXUNqUBRLWfo5C29PkKn2ULPv1/L+xnXMxNJt7COyqly/yt6yNJlYv6kcy3kyExqyZoPC50Yxcq/nLdE7KtDBRYSsYQsZJqciIRZS6QlY45/LapvaSoMU/wdM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787787580; c=relaxed/simple; bh=56WkcvHYOOLJcqXce/e5oIbukPLgodpobwiqUYJ1/bo=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=szvZU+5d5Sy3X7hWfwODgEDm/Uyg+60zK7JBYEw1A+BhysW1L7d9A7jZzh+0MI61YLS5sZEJbyQxCsWaHupekHEQLcZfbhLkMTqMlvZeFVHhkfKJgE+6Fh+LXWuoRxBRvom5j700kVP5C4+YTTctbwpcXBaJud/zrvlcOzhFN54= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--seanjc.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=VHGRcblT; arc=none smtp.client-ip=209.85.210.197 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--seanjc.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="VHGRcblT" Received: by mail-pf1-f197.google.com with SMTP id d2e1a72fcca58-855315ccb64so47880b3a.3 for ; Wed, 26 Aug 2026 16:39:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1787787576; x=1788392376; darn=vger.kernel.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:reply-to:from:to:cc:subject:date:message-id :reply-to:content-type; bh=WyWAGvv1+NE8ueluBfmJsOga1MZMSNGNRM9XMLE9kLY=; b=VHGRcblTeC1ZC5aG+yo76KkyJGzf6BiKlEE3ZP+Su8Vp2I6UQKE/U1TUbieKTU6b9O LOCpaZThCm5txzFmHD6w6zP0tppfBCcUGwPyac9/M0QcwP9Pwvjk5oWCfIjzkRSj5beM n+GBDobsrwywL/FB249pgyUIpkRFel9INxphG+1XTjghygRP4nprfxqFSL2AgPwaEyk1 j0hc+4ueivi0+/BwqLxuXrpiz271psMzSHk/5kBu95/V/Zh+E8KZsubYs7aY9JHOj3Xp wjbidgmZuZppc5N6e6lLtSNliYF951Bj3YBIoeYB+3iX1/X97NFQdnCulk14vUBGEVWW ud5A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787787576; x=1788392376; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:reply-to:x-gm-message-state:from:to:cc:subject :date:message-id:reply-to:content-type; bh=WyWAGvv1+NE8ueluBfmJsOga1MZMSNGNRM9XMLE9kLY=; b=qj97cGrPmMGsdo6TdWEp8nJEPQf66k1n1Pw1rxXS3qP36JOO4qN5rZX4mwgDtZBGCo QH46SnKBTxhIVLXOLXMKKbbxFk5MwlD0xWbd2F0ncuVjinpun6vQSMbS1FiFSlUKWgBh n/WfCHupWc18p7JyXn7LKK39IBivFyp57mkjj3wCgILilCbUegX/U9zSbXY/5HdvWmLz MaGoXYmzMpXzW/JRsjzWRzknnbOso2HHnGuKypRxlv8pUpOE3Z2j1N4YkFcVnKZCIVi5 pu3wz1qceXrWBmw2BDUuxGO2W/fYkoqOiJ0Rd45WWwvhLqS8CTDjnaxgaTPikEHbBvB0 +dsg== X-Forwarded-Encrypted: i=1; AHgh+RrV2IHFw6Xe5cko3GrOqJC2Pt+zSSkt+FIjha0wk4ta9xO6W15C3ntEfwuiBsRsMs6boXxDULsyTUoKWhU=@vger.kernel.org X-Gm-Message-State: AFuF++mLaTmuIlzZThN/QBYLLD6rbbfZu5ZFZ9TfXild6kFyOKFxmSdf osTdQvwNKRqrkaHEdKS4z9hIkNeNPC9t4Etj1YFHD2xRxrkpHX0rTQRCn6vh8RfVC1cXq0Dm0QW nIHvG/A== X-Received: from pgcu4.prod.google.com ([2002:a63:7904:0:b0:cbe:db49:df90]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a00:94ee:b0:847:9267:2104 with SMTP id d2e1a72fcca58-85373fb939amr18131538b3a.12.1787787575780; Wed, 26 Aug 2026 16:39:35 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 26 Aug 2026 16:39:19 -0700 In-Reply-To: <20260826233919.998904-1-seanjc@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260826233919.998904-1-seanjc@google.com> X-Mailer: git-send-email 2.55.0.887.g758fc8c411-goog Message-ID: <20260826233919.998904-14-seanjc@google.com> Subject: [PATCH v3 13/13] KVM: selftests: Add and use double-underscore versions of vmlaunch() and vmresume() From: Sean Christopherson To: Sean Christopherson , Paolo Bonzini Cc: kvm@vger.kernel.org, linux-kernel@vger.kernel.org, f734222792@gmail.com, Vitaly Kuznetsov , Sashiko Bot , Yosry Ahmed Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add double-underscore helpers for VMLAUNCH and VMRESUME, and have the "outer" APIs assert success, as is common through KVM selftests. In addition to providing more familiar interfaces, this makes it more obvious which paths expect VM-Enter *failure*. Signed-off-by: Sean Christopherson Reviewed-by: Yosry Ahmed --- tools/testing/selftests/kvm/include/x86/vmx.h | 10 +++++++- .../testing/selftests/kvm/lib/x86/memstress.c | 2 +- .../selftests/kvm/x86/aperfmperf_test.c | 2 +- .../kvm/x86/evmcs_smm_controls_test.c | 2 +- .../testing/selftests/kvm/x86/hyperv_evmcs.c | 22 ++++++++--------- .../selftests/kvm/x86/kvm_buslock_test.c | 2 +- .../selftests/kvm/x86/nested_close_kvm_test.c | 2 +- .../selftests/kvm/x86/nested_dirty_log_test.c | 2 +- .../selftests/kvm/x86/nested_emulation_test.c | 2 +- .../kvm/x86/nested_exceptions_test.c | 2 +- .../kvm/x86/nested_invalid_cr3_test.c | 4 ++-- .../selftests/kvm/x86/nested_tdp_fault_test.c | 2 +- .../kvm/x86/nested_tsc_adjust_test.c | 2 +- .../kvm/x86/nested_tsc_scaling_test.c | 2 +- .../kvm/x86/save_restore_pf_stress_test.c | 4 ++-- tools/testing/selftests/kvm/x86/state_test.c | 24 +++++++++---------- .../kvm/x86/triple_fault_event_test.c | 2 +- .../selftests/kvm/x86/vmx_apic_access_test.c | 4 ++-- .../kvm/x86/vmx_apicv_updates_test.c | 4 ++-- .../kvm/x86/vmx_invalid_nested_guest_state.c | 2 +- .../kvm/x86/vmx_nested_la57_state_test.c | 2 +- .../kvm/x86/vmx_preemption_timer_test.c | 4 ++-- 22 files changed, 56 insertions(+), 48 deletions(-) diff --git a/tools/testing/selftests/kvm/include/x86/vmx.h b/tools/testing/= selftests/kvm/include/x86/vmx.h index fa01341e22bc..cd82a6be6963 100644 --- a/tools/testing/selftests/kvm/include/x86/vmx.h +++ b/tools/testing/selftests/kvm/include/x86/vmx.h @@ -360,7 +360,7 @@ static inline u64 vmptrst(void) } =20 #define BUILD_VMX_VM_ENTRY_HELPERS(insn) \ -static inline int insn(void) \ +static inline int __##insn(void) \ { \ int ret; \ \ @@ -383,6 +383,14 @@ static inline int insn(void) \ GUEST_REGS_OFFSETS \ : "memory", "cc"); \ return ret; \ +} \ + \ +static inline void insn(void) \ +{ \ + int ret; \ + \ + ret =3D __##insn(); \ + __GUEST_ASSERT(!ret, __stringify(insn) " hit VM-Fail"); \ } BUILD_VMX_VM_ENTRY_HELPERS(vmlaunch) BUILD_VMX_VM_ENTRY_HELPERS(vmresume) diff --git a/tools/testing/selftests/kvm/lib/x86/memstress.c b/tools/testin= g/selftests/kvm/lib/x86/memstress.c index 207350ab6114..6a1815fb97e9 100644 --- a/tools/testing/selftests/kvm/lib/x86/memstress.c +++ b/tools/testing/selftests/kvm/lib/x86/memstress.c @@ -40,7 +40,7 @@ static void l1_vmx_code(struct vmx_pages *vmx, u64 vcpu_i= d) *(u64 *)vmx->stack =3D vcpu_id; prepare_vmcs(vmx, memstress_l2_guest_entry); =20 - GUEST_ASSERT(!vmlaunch()); + vmlaunch(); GUEST_ASSERT_EQ(vmreadz(VM_EXIT_REASON), EXIT_REASON_VMCALL); GUEST_DONE(); } diff --git a/tools/testing/selftests/kvm/x86/aperfmperf_test.c b/tools/test= ing/selftests/kvm/x86/aperfmperf_test.c index 11f5894d8ac7..a082658c1e48 100644 --- a/tools/testing/selftests/kvm/x86/aperfmperf_test.c +++ b/tools/testing/selftests/kvm/x86/aperfmperf_test.c @@ -83,7 +83,7 @@ static void l1_vmx_code(struct vmx_pages *vmx) vmreadz(CPU_BASED_VM_EXEC_CONTROL) | CPU_BASED_USE_MSR_BITMAPS); =20 GUEST_ASSERT(!vmwrite(GUEST_RIP, (u64)l2_guest_code)); - GUEST_ASSERT(!vmlaunch()); + vmlaunch(); } =20 static void guest_code(void *nested_test_data) diff --git a/tools/testing/selftests/kvm/x86/evmcs_smm_controls_test.c b/to= ols/testing/selftests/kvm/x86/evmcs_smm_controls_test.c index cafb58a37023..a06f37e0bd06 100644 --- a/tools/testing/selftests/kvm/x86/evmcs_smm_controls_test.c +++ b/tools/testing/selftests/kvm/x86/evmcs_smm_controls_test.c @@ -59,7 +59,7 @@ static void guest_code(struct vmx_pages *vmx_pages, GUEST_ASSERT(load_evmcs(hv_pages)); prepare_vmcs(vmx_pages, l2_guest_code); =20 - GUEST_ASSERT(!vmlaunch()); + vmlaunch(); =20 /* L2 exits via vmcall if test fails */ sync_with_host(2); diff --git a/tools/testing/selftests/kvm/x86/hyperv_evmcs.c b/tools/testing= /selftests/kvm/x86/hyperv_evmcs.c index d0e857b75a47..b7c2a254291e 100644 --- a/tools/testing/selftests/kvm/x86/hyperv_evmcs.c +++ b/tools/testing/selftests/kvm/x86/hyperv_evmcs.c @@ -105,7 +105,7 @@ void guest_code(struct vmx_pages *vmx_pages, struct hyp= erv_test_pages *hv_pages, =20 GUEST_SYNC(5); current_evmcs->revision_id =3D -1u; - GUEST_ASSERT(vmlaunch()); + GUEST_ASSERT(__vmlaunch()); current_evmcs->revision_id =3D EVMCS_VERSION; GUEST_SYNC(6); =20 @@ -120,7 +120,7 @@ void guest_code(struct vmx_pages *vmx_pages, struct hyp= erv_test_pages *hv_pages, current_vp_assist->nested_control.features.directhypercall =3D 1; *(u32 *)(hv_pages->partition_assist) =3D 0; =20 - GUEST_ASSERT(!vmlaunch()); + vmlaunch(); GUEST_ASSERT_EQ(vmreadz(VM_EXIT_REASON), EXIT_REASON_EXCEPTION_NMI); GUEST_ASSERT_EQ((vmreadz(VM_EXIT_INTR_INFO) & 0xff), NMI_VECTOR); GUEST_ASSERT(vmptrst() =3D=3D hv_pages->enlightened_vmcs_gpa); @@ -130,7 +130,7 @@ void guest_code(struct vmx_pages *vmx_pages, struct hyp= erv_test_pages *hv_pages, * up-to-date (RIP points where it should and not at the beginning * of l2_guest_code(). GUEST_SYNC(9) checks that. */ - GUEST_ASSERT(!vmresume()); + vmresume(); =20 GUEST_SYNC(10); =20 @@ -141,13 +141,13 @@ void guest_code(struct vmx_pages *vmx_pages, struct h= yperv_test_pages *hv_pages, vmwrite(CPU_BASED_VM_EXEC_CONTROL, vmreadz(CPU_BASED_VM_EXEC_CONTROL) | CPU_BASED_USE_MSR_BITMAPS); __set_bit(MSR_FS_BASE & 0x1fff, vmx_pages->msr + 0x400); - GUEST_ASSERT(!vmresume()); + vmresume(); GUEST_ASSERT(vmreadz(VM_EXIT_REASON) =3D=3D EXIT_REASON_MSR_READ); current_evmcs->guest_rip +=3D 2; /* rdmsr */ =20 /* Enable enlightened MSR bitmap */ current_evmcs->hv_enlightenments_control.msr_bitmap =3D 1; - GUEST_ASSERT(!vmresume()); + vmresume(); GUEST_ASSERT(vmreadz(VM_EXIT_REASON) =3D=3D EXIT_REASON_MSR_READ); current_evmcs->guest_rip +=3D 2; /* rdmsr */ =20 @@ -155,14 +155,14 @@ void guest_code(struct vmx_pages *vmx_pages, struct h= yperv_test_pages *hv_pages, __set_bit(MSR_GS_BASE & 0x1fff, vmx_pages->msr + 0x400); /* Make sure HV_VMX_ENLIGHTENED_CLEAN_FIELD_MSR_BITMAP is set */ current_evmcs->hv_clean_fields |=3D HV_VMX_ENLIGHTENED_CLEAN_FIELD_MSR_BI= TMAP; - GUEST_ASSERT(!vmresume()); + vmresume(); /* Make sure we don't see EXIT_REASON_MSR_READ here so eMSR bitmap works = */ GUEST_ASSERT(vmreadz(VM_EXIT_REASON) =3D=3D EXIT_REASON_VMCALL); current_evmcs->guest_rip +=3D 3; /* vmcall */ =20 /* Now tell KVM we've changed MSR-Bitmap */ current_evmcs->hv_clean_fields &=3D ~HV_VMX_ENLIGHTENED_CLEAN_FIELD_MSR_B= ITMAP; - GUEST_ASSERT(!vmresume()); + vmresume(); GUEST_ASSERT(vmreadz(VM_EXIT_REASON) =3D=3D EXIT_REASON_MSR_READ); current_evmcs->guest_rip +=3D 2; /* rdmsr */ =20 @@ -170,15 +170,15 @@ void guest_code(struct vmx_pages *vmx_pages, struct h= yperv_test_pages *hv_pages, * L2 TLB flush test. First VMCALL should be handled directly by L0, * no VMCALL exit expected. */ - GUEST_ASSERT(!vmresume()); + vmresume(); GUEST_ASSERT(vmreadz(VM_EXIT_REASON) =3D=3D EXIT_REASON_MSR_READ); current_evmcs->guest_rip +=3D 2; /* rdmsr */ /* Enable synthetic vmexit */ *(u32 *)(hv_pages->partition_assist) =3D 1; - GUEST_ASSERT(!vmresume()); + vmresume(); GUEST_ASSERT(vmreadz(VM_EXIT_REASON) =3D=3D HV_VMX_SYNTHETIC_EXIT_REASON_= TRAP_AFTER_FLUSH); =20 - GUEST_ASSERT(!vmresume()); + vmresume(); GUEST_ASSERT(vmreadz(VM_EXIT_REASON) =3D=3D EXIT_REASON_VMCALL); GUEST_SYNC(11); =20 @@ -192,7 +192,7 @@ void guest_code(struct vmx_pages *vmx_pages, struct hyp= erv_test_pages *hv_pages, */ GUEST_SYNC(12); evmcs_vmptrld(0xdeadbeef, hv_pages->enlightened_vmcs); - GUEST_ASSERT(vmlaunch()); + GUEST_ASSERT(__vmlaunch()); GUEST_ASSERT(ud_count =3D=3D 1); GUEST_DONE(); } diff --git a/tools/testing/selftests/kvm/x86/kvm_buslock_test.c b/tools/tes= ting/selftests/kvm/x86/kvm_buslock_test.c index 22993ec697fa..337d3c28bc6d 100644 --- a/tools/testing/selftests/kvm/x86/kvm_buslock_test.c +++ b/tools/testing/selftests/kvm/x86/kvm_buslock_test.c @@ -48,7 +48,7 @@ static void l1_vmx_code(struct vmx_pages *vmx) prepare_vmcs(vmx, NULL); =20 GUEST_ASSERT(!vmwrite(GUEST_RIP, (u64)l2_guest_code)); - GUEST_ASSERT(!vmlaunch()); + vmlaunch(); } =20 static void guest_code(void *test_data) diff --git a/tools/testing/selftests/kvm/x86/nested_close_kvm_test.c b/tool= s/testing/selftests/kvm/x86/nested_close_kvm_test.c index 309cab009929..1f4a5e44a6ef 100644 --- a/tools/testing/selftests/kvm/x86/nested_close_kvm_test.c +++ b/tools/testing/selftests/kvm/x86/nested_close_kvm_test.c @@ -36,7 +36,7 @@ static void l1_vmx_code(struct vmx_pages *vmx_pages) /* Prepare the VMCS for L2 execution. */ prepare_vmcs(vmx_pages, l2_guest_code); =20 - GUEST_ASSERT(!vmlaunch()); + vmlaunch(); GUEST_ASSERT(0); } =20 diff --git a/tools/testing/selftests/kvm/x86/nested_dirty_log_test.c b/tool= s/testing/selftests/kvm/x86/nested_dirty_log_test.c index dca2bfc8b158..7987ce50c382 100644 --- a/tools/testing/selftests/kvm/x86/nested_dirty_log_test.c +++ b/tools/testing/selftests/kvm/x86/nested_dirty_log_test.c @@ -104,7 +104,7 @@ void l1_vmx_code(struct vmx_pages *vmx) prepare_vmcs(vmx, l2_rip); =20 GUEST_SYNC(TEST_SYNC_NO_FAULT); - GUEST_ASSERT(!vmlaunch()); + vmlaunch(); GUEST_SYNC(TEST_SYNC_NO_FAULT); GUEST_ASSERT_EQ(vmreadz(VM_EXIT_REASON), EXIT_REASON_VMCALL); GUEST_DONE(); diff --git a/tools/testing/selftests/kvm/x86/nested_emulation_test.c b/tool= s/testing/selftests/kvm/x86/nested_emulation_test.c index 2b38eff4f516..11fe4a31eda0 100644 --- a/tools/testing/selftests/kvm/x86/nested_emulation_test.c +++ b/tools/testing/selftests/kvm/x86/nested_emulation_test.c @@ -102,7 +102,7 @@ static void guest_code(void *test_data) exit_insn_len =3D vmcb->control.next_rip - vmcb->save.rip; GUEST_ASSERT_EQ(vmcb->save.rip, (u64)l2_instruction); } else { - GUEST_ASSERT_EQ(i ? vmresume() : vmlaunch(), 0); + i ? vmresume() : vmlaunch(); exit_reason =3D vmreadz(VM_EXIT_REASON); exit_insn_len =3D vmreadz(VM_EXIT_INSTRUCTION_LEN); GUEST_ASSERT_EQ(vmreadz(GUEST_RIP), (u64)l2_instruction); diff --git a/tools/testing/selftests/kvm/x86/nested_exceptions_test.c b/too= ls/testing/selftests/kvm/x86/nested_exceptions_test.c index 50c271a03692..c36c11b5f518 100644 --- a/tools/testing/selftests/kvm/x86/nested_exceptions_test.c +++ b/tools/testing/selftests/kvm/x86/nested_exceptions_test.c @@ -112,7 +112,7 @@ static void vmx_run_l2(void *l2_code, int vector, u32 e= rror_code) { GUEST_ASSERT(!vmwrite(GUEST_RIP, (u64)l2_code)); =20 - GUEST_ASSERT_EQ(vector =3D=3D SS_VECTOR ? vmlaunch() : vmresume(), 0); + vector =3D=3D SS_VECTOR ? vmlaunch() : vmresume(); =20 if (vector =3D=3D FAKE_TRIPLE_FAULT_VECTOR) return; diff --git a/tools/testing/selftests/kvm/x86/nested_invalid_cr3_test.c b/to= ols/testing/selftests/kvm/x86/nested_invalid_cr3_test.c index 43deb3b358ea..101c1fe79eeb 100644 --- a/tools/testing/selftests/kvm/x86/nested_invalid_cr3_test.c +++ b/tools/testing/selftests/kvm/x86/nested_invalid_cr3_test.c @@ -48,13 +48,13 @@ static void l1_vmx_code(struct vmx_pages *vmx_pages) /* Try to run L2 with invalid CR3 and make sure it fails */ save_cr3 =3D vmreadz(GUEST_CR3); vmwrite(GUEST_CR3, -1ull); - GUEST_ASSERT(!vmlaunch()); + vmlaunch(); GUEST_ASSERT(vmreadz(VM_EXIT_REASON) =3D=3D (EXIT_REASON_FAILED_VMENTRY | EXIT_REASON_INVALID_STATE)); =20 /* Now restore CR3 and make sure L2 runs successfully */ vmwrite(GUEST_CR3, save_cr3); - GUEST_ASSERT(!vmlaunch()); + vmlaunch(); GUEST_ASSERT(vmreadz(VM_EXIT_REASON) =3D=3D EXIT_REASON_VMCALL); =20 GUEST_DONE(); diff --git a/tools/testing/selftests/kvm/x86/nested_tdp_fault_test.c b/tool= s/testing/selftests/kvm/x86/nested_tdp_fault_test.c index 52df467e9c44..d6c443e3d147 100644 --- a/tools/testing/selftests/kvm/x86/nested_tdp_fault_test.c +++ b/tools/testing/selftests/kvm/x86/nested_tdp_fault_test.c @@ -60,7 +60,7 @@ static void l1_vmx_code(struct vmx_pages *vmx, u64 expect= ed_fault_gpa, =20 prepare_vmcs(vmx, l2_entry); =20 - GUEST_ASSERT(!vmlaunch()); + vmlaunch(); =20 /* Verify we got an EPT violation exit */ __GUEST_ASSERT(vmreadz(VM_EXIT_REASON) =3D=3D EXIT_REASON_EPT_VIOLATION, diff --git a/tools/testing/selftests/kvm/x86/nested_tsc_adjust_test.c b/too= ls/testing/selftests/kvm/x86/nested_tsc_adjust_test.c index 05194762ed33..c60dea899624 100644 --- a/tools/testing/selftests/kvm/x86/nested_tsc_adjust_test.c +++ b/tools/testing/selftests/kvm/x86/nested_tsc_adjust_test.c @@ -95,7 +95,7 @@ static void l1_guest_code(void *data) vmwrite(CPU_BASED_VM_EXEC_CONTROL, control); vmwrite(TSC_OFFSET, TSC_OFFSET_VALUE); =20 - GUEST_ASSERT(!vmlaunch()); + vmlaunch(); GUEST_ASSERT(vmreadz(VM_EXIT_REASON) =3D=3D EXIT_REASON_VMCALL); } else { struct svm_test_data *svm =3D data; diff --git a/tools/testing/selftests/kvm/x86/nested_tsc_scaling_test.c b/to= ols/testing/selftests/kvm/x86/nested_tsc_scaling_test.c index b9fae268a9ec..b2fc7f0b5b3c 100644 --- a/tools/testing/selftests/kvm/x86/nested_tsc_scaling_test.c +++ b/tools/testing/selftests/kvm/x86/nested_tsc_scaling_test.c @@ -125,7 +125,7 @@ static void l1_vmx_code(struct vmx_pages *vmx_pages) vmwrite(TSC_MULTIPLIER_HIGH, TSC_MULTIPLIER_L2 >> 32); =20 /* launch L2 */ - GUEST_ASSERT(!vmlaunch()); + vmlaunch(); GUEST_ASSERT(vmreadz(VM_EXIT_REASON) =3D=3D EXIT_REASON_VMCALL); =20 /* check that L1's frequency still looks good */ diff --git a/tools/testing/selftests/kvm/x86/save_restore_pf_stress_test.c = b/tools/testing/selftests/kvm/x86/save_restore_pf_stress_test.c index c0e4d6e156ad..f88427e925fc 100644 --- a/tools/testing/selftests/kvm/x86/save_restore_pf_stress_test.c +++ b/tools/testing/selftests/kvm/x86/save_restore_pf_stress_test.c @@ -104,11 +104,11 @@ static void l1_vmx_code(struct vmx_pages *vmx) =20 GUEST_ASSERT(!vmwrite(EXCEPTION_BITMAP, BIT(UD_VECTOR))); =20 - GUEST_ASSERT(!vmlaunch()); + vmlaunch(); while (1) { GUEST_ASSERT_EQ(vmreadz(VM_EXIT_REASON), EXIT_REASON_EXCEPTION_NMI); GUEST_ASSERT_EQ(vmreadz(VM_EXIT_INTR_INFO) & 0xff, UD_VECTOR); - GUEST_ASSERT(!vmresume()); + vmresume(); } } =20 diff --git a/tools/testing/selftests/kvm/x86/state_test.c b/tools/testing/s= elftests/kvm/x86/state_test.c index bd5e9e36b2c9..38c9689ac601 100644 --- a/tools/testing/selftests/kvm/x86/state_test.c +++ b/tools/testing/selftests/kvm/x86/state_test.c @@ -87,20 +87,20 @@ static void vmx_l1_guest_code(struct vmx_pages *vmx_pag= es) =20 GUEST_SYNC(5); GUEST_ASSERT(vmptrst() =3D=3D vmx_pages->vmcs_gpa); - GUEST_ASSERT(!vmlaunch()); + vmlaunch(); GUEST_ASSERT(vmptrst() =3D=3D vmx_pages->vmcs_gpa); GUEST_ASSERT(vmreadz(VM_EXIT_REASON) =3D=3D EXIT_REASON_VMCALL); =20 /* Check that the launched state is preserved. */ - GUEST_ASSERT(vmlaunch()); + GUEST_ASSERT(__vmlaunch()); =20 - GUEST_ASSERT(!vmresume()); + vmresume(); GUEST_ASSERT(vmreadz(VM_EXIT_REASON) =3D=3D EXIT_REASON_VMCALL); =20 GUEST_SYNC(7); GUEST_ASSERT(vmreadz(VM_EXIT_REASON) =3D=3D EXIT_REASON_VMCALL); =20 - GUEST_ASSERT(!vmresume()); + vmresume(); GUEST_ASSERT(vmreadz(VM_EXIT_REASON) =3D=3D EXIT_REASON_VMCALL); =20 vmwrite(GUEST_RIP, vmreadz(GUEST_RIP) + 3); @@ -109,27 +109,27 @@ static void vmx_l1_guest_code(struct vmx_pages *vmx_p= ages) vmwrite(VMCS_LINK_POINTER, vmx_pages->shadow_vmcs_gpa); =20 vmptrld(vmx_pages->shadow_vmcs_gpa); - GUEST_ASSERT(vmlaunch()); + GUEST_ASSERT(__vmlaunch()); GUEST_SYNC(8); - GUEST_ASSERT(vmlaunch()); - GUEST_ASSERT(vmresume()); + GUEST_ASSERT(__vmlaunch()); + GUEST_ASSERT(__vmresume()); =20 vmwrite(GUEST_RIP, 0xc0ffee); GUEST_SYNC(9); GUEST_ASSERT(vmreadz(GUEST_RIP) =3D=3D 0xc0ffee); =20 vmptrld(vmx_pages->vmcs_gpa); - GUEST_ASSERT(!vmresume()); + vmresume(); GUEST_ASSERT(vmreadz(VM_EXIT_REASON) =3D=3D EXIT_REASON_VMCALL); =20 vmptrld(vmx_pages->shadow_vmcs_gpa); GUEST_ASSERT(vmreadz(GUEST_RIP) =3D=3D 0xc0ffffee); - GUEST_ASSERT(vmlaunch()); - GUEST_ASSERT(vmresume()); + GUEST_ASSERT(__vmlaunch()); + GUEST_ASSERT(__vmresume()); GUEST_SYNC(13); GUEST_ASSERT(vmreadz(GUEST_RIP) =3D=3D 0xc0ffffee); - GUEST_ASSERT(vmlaunch()); - GUEST_ASSERT(vmresume()); + GUEST_ASSERT(__vmlaunch()); + GUEST_ASSERT(__vmresume()); } =20 static void __attribute__((__flatten__)) guest_code(void *arg) diff --git a/tools/testing/selftests/kvm/x86/triple_fault_event_test.c b/to= ols/testing/selftests/kvm/x86/triple_fault_event_test.c index a9fb7046ea4f..bb31a1ba8932 100644 --- a/tools/testing/selftests/kvm/x86/triple_fault_event_test.c +++ b/tools/testing/selftests/kvm/x86/triple_fault_event_test.c @@ -30,7 +30,7 @@ void l1_guest_code_vmx(struct vmx_pages *vmx) =20 prepare_vmcs(vmx, l2_guest_code); =20 - GUEST_ASSERT(!vmlaunch()); + vmlaunch(); /* L2 should triple fault after a triple fault event injected. */ GUEST_ASSERT(vmreadz(VM_EXIT_REASON) =3D=3D EXIT_REASON_TRIPLE_FAULT); GUEST_DONE(); diff --git a/tools/testing/selftests/kvm/x86/vmx_apic_access_test.c b/tools= /testing/selftests/kvm/x86/vmx_apic_access_test.c index 1793f7b02219..fe29c869a235 100644 --- a/tools/testing/selftests/kvm/x86/vmx_apic_access_test.c +++ b/tools/testing/selftests/kvm/x86/vmx_apic_access_test.c @@ -53,14 +53,14 @@ static void l1_guest_code(struct vmx_pages *vmx_pages, = unsigned long high_gpa) =20 /* Try to launch L2 with the memory-backed APIC-access address. */ GUEST_SYNC(vmreadz(APIC_ACCESS_ADDR)); - GUEST_ASSERT(!vmlaunch()); + vmlaunch(); GUEST_ASSERT(vmreadz(VM_EXIT_REASON) =3D=3D EXIT_REASON_VMCALL); =20 vmwrite(APIC_ACCESS_ADDR, high_gpa); =20 /* Try to resume L2 with the unbacked APIC-access address. */ GUEST_SYNC(vmreadz(APIC_ACCESS_ADDR)); - GUEST_ASSERT(!vmresume()); + vmresume(); GUEST_ASSERT(vmreadz(VM_EXIT_REASON) =3D=3D EXIT_REASON_VMCALL); =20 GUEST_DONE(); diff --git a/tools/testing/selftests/kvm/x86/vmx_apicv_updates_test.c b/too= ls/testing/selftests/kvm/x86/vmx_apicv_updates_test.c index f7ebc9b15629..e578221da247 100644 --- a/tools/testing/selftests/kvm/x86/vmx_apicv_updates_test.c +++ b/tools/testing/selftests/kvm/x86/vmx_apicv_updates_test.c @@ -62,7 +62,7 @@ static void l1_guest_code(struct vmx_pages *vmx_pages) * Run L2 to switch to x2APIC mode, which in turn will uninhibit APICv, * as KVM should force the APIC ID back to its default. */ - GUEST_ASSERT(!vmlaunch()); + vmlaunch(); GUEST_ASSERT(vmreadz(VM_EXIT_REASON) =3D=3D EXIT_REASON_VMCALL); vmwrite(GUEST_RIP, vmreadz(GUEST_RIP) + vmreadz(VM_EXIT_INSTRUCTION_LEN)); GUEST_ASSERT(rdmsr(MSR_IA32_APICBASE) & MSR_IA32_APICBASE_EXTD); @@ -90,7 +90,7 @@ static void l1_guest_code(struct vmx_pages *vmx_pages) * handles the x2APIC =3D> xAPIC transition and inhibits APICv while L2 * is active. */ - GUEST_ASSERT(!vmresume()); + vmresume(); GUEST_ASSERT(vmreadz(VM_EXIT_REASON) =3D=3D EXIT_REASON_VMCALL); GUEST_ASSERT(!(rdmsr(MSR_IA32_APICBASE) & MSR_IA32_APICBASE_EXTD)); =20 diff --git a/tools/testing/selftests/kvm/x86/vmx_invalid_nested_guest_state= .c b/tools/testing/selftests/kvm/x86/vmx_invalid_nested_guest_state.c index 4a6445958cf4..3017938fa993 100644 --- a/tools/testing/selftests/kvm/x86/vmx_invalid_nested_guest_state.c +++ b/tools/testing/selftests/kvm/x86/vmx_invalid_nested_guest_state.c @@ -55,7 +55,7 @@ static void l1_guest_code(struct vmx_pages *vmx_pages) GUEST_ASSERT(!(vmreadz(CPU_BASED_VM_EXEC_CONTROL) & CPU_BASED_ACTIVATE_SE= CONDARY_CONTROLS) || !(vmreadz(SECONDARY_VM_EXEC_CONTROL) & SECONDARY_EXEC_UNRESTRICTED_= GUEST)); =20 - GUEST_ASSERT(!vmlaunch()); + vmlaunch(); =20 /* L2 should triple fault after main() stuffs invalid guest state. */ GUEST_ASSERT(vmreadz(VM_EXIT_REASON) =3D=3D EXIT_REASON_TRIPLE_FAULT); diff --git a/tools/testing/selftests/kvm/x86/vmx_nested_la57_state_test.c b= /tools/testing/selftests/kvm/x86/vmx_nested_la57_state_test.c index 04c2d5113e84..b3651c5ab138 100644 --- a/tools/testing/selftests/kvm/x86/vmx_nested_la57_state_test.c +++ b/tools/testing/selftests/kvm/x86/vmx_nested_la57_state_test.c @@ -56,7 +56,7 @@ static void l1_guest_code(struct vmx_pages *vmx_pages) guest_cr4 &=3D ~X86_CR4_LA57; vmwrite(GUEST_CR4, guest_cr4); =20 - GUEST_ASSERT(!vmlaunch()); + vmlaunch(); =20 exit_reason =3D vmreadz(VM_EXIT_REASON); GUEST_ASSERT(exit_reason =3D=3D EXIT_REASON_VMCALL); diff --git a/tools/testing/selftests/kvm/x86/vmx_preemption_timer_test.c b/= tools/testing/selftests/kvm/x86/vmx_preemption_timer_test.c index 50fc9309158f..cda53df33888 100644 --- a/tools/testing/selftests/kvm/x86/vmx_preemption_timer_test.c +++ b/tools/testing/selftests/kvm/x86/vmx_preemption_timer_test.c @@ -90,7 +90,7 @@ void l1_guest_code(struct vmx_pages *vmx_pages) !(ctrl_exit_rev.clr & VM_EXIT_SAVE_VMX_PREEMPTION_TIMER)) return; =20 - GUEST_ASSERT(!vmlaunch()); + vmlaunch(); GUEST_ASSERT(vmreadz(VM_EXIT_REASON) =3D=3D EXIT_REASON_VMCALL); vmwrite(GUEST_RIP, vmreadz(GUEST_RIP) + vmreadz(VM_EXIT_INSTRUCTION_LEN)); =20 @@ -110,7 +110,7 @@ void l1_guest_code(struct vmx_pages *vmx_pages) =20 l1_vmx_pt_start =3D (rdtsc() >> vmx_pt_rate) << vmx_pt_rate; =20 - GUEST_ASSERT(!vmresume()); + vmresume(); =20 l1_vmx_pt_finish =3D rdtsc(); =20 --=20 2.55.0.887.g758fc8c411-goog