From nobody Fri Sep 4 05:20:08 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 F0007244687 for ; Fri, 4 Sep 2026 00:24:27 +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=1788481469; cv=none; b=C4ZIsdyxTCK0uJIez6wO+8MRmtkgGgZ5EmpYwKgL3AKYAglw3m8vGOZNMLQETLcFCI5vc4G0pf6ydqeejXjPan4i08q4+k6han++9xkdB9owJmCTolAtQL0wHXkszXY25Ft0lVh69g027xKMlX3ZUz5L2Ou/cQnHjFZk/Qfqzpw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788481469; c=relaxed/simple; bh=q9o2sO+8tFxBRqdWv+G5m4qqEyReNwVpsJM88/0++yQ=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=saY1WjvRreQ+Qym9f5Q0qSEWjaib3z8OR/WYnSV8NonAdW7/nf3fFAn90v3nYPYkzQSgpbs9Ckdk2bHGeH3HUhwBUX+hJNSR4XOpWwoXB42PI3BYbzDPs4C3qkiU1FrONKbz4H+7pHEZUEXccgJaiILvF8ab5jkBCA0mHIYE6E0= 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=a3i6r+pX; 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="a3i6r+pX" Received: by mail-pf1-f197.google.com with SMTP id d2e1a72fcca58-84a251c2e3eso2093016b3a.1 for ; Thu, 03 Sep 2026 17:24:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1788481467; x=1789086267; 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=/766USs3JdFk4eApT4HnvuxiQ4O/gSl+NL1dajtI/fI=; b=a3i6r+pXvR/KHC0ZQLB3AW84ZaZhkWz4++ua5hjvRs4os7a85BOWDb43nElTitaQO9 YW0hIHUztMW7rEYtKlGhTHpxiUlKXlKLPYuxwVWR8vZwy/CIgwf9jZn40Uon6kqGUfzy /RIQMYjTYkqcqzXAcmnQ5vMQmn962HUIWorgI5vlIa95lgt9AP8nyaj8sT78evhITRN4 ZqXz9NR9oj26RQVHeuWXkJU8PdQs/mCoKEzTm+TPxqZFdOCETav9m/k5enkodgqFzskY tKC8nxMOj47HyELEoRLrjwFdq38B38czfQWKMmKpMEumFY5ulhO+ESvKihc7sUyv6Ms8 /5zQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788481467; x=1789086267; 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=/766USs3JdFk4eApT4HnvuxiQ4O/gSl+NL1dajtI/fI=; b=YfeV2xY8jk0IKb5zD1M1VtIHLFnwE2zAscIWW4RXFdNTKV3eS7dRRbAjO46+Y7qwrQ HAB9Av1e16Nj/Qklgth7rUSYu+W0g3mC1lp7MjoLZ7OEicVyD+e/XQBUgI+a4i+GcqK0 qh3M4pR0nwj5jGkGgqdGLkbHzrih78bmvr1tlfjvvT9/pvMa449M37KK2Nfe6lo5iqfO llA/Muf8SZXpcstGHpMUr+mi25FyYGBZFDfLfnOmbqM5LNriUtcQLUaADUgx5nYq/XYh 5nY3NgTHfgxySgXOkeY1WD/3NXJEWwBVdB3BDJ9F9RPmWZom/gQZrjhWyN1tRKL8K0j1 prLQ== X-Forwarded-Encrypted: i=1; AKwUvBw2M1B7X2+8SeClf26B/VsupIDgwAYcDrr0x5YVgNBJ+PMOU7X5JCs8Ud1f2YxNQcLCj9kxJI56eXFm8oE=@vger.kernel.org X-Gm-Message-State: AFuF++l26lgklyO6ZXJv9YkBzVLYvAm6Kp5d1pGOIDUnG80TIU5/ewAB rAoHEwNwIPh8k6NT4eDE3qSX3R0O5PnPpDmnjIsWgfWt6ut3PBhLSQCzzacee57tKG6hkClP5U2 QZpb1+g== X-Received: from pfbkq17.prod.google.com ([2002:a05:6a00:4b11:b0:847:9be8:84d5]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a00:1d8b:b0:84a:2b96:5986 with SMTP id d2e1a72fcca58-85ffc774e48mr8112529b3a.8.1788481467148; Thu, 03 Sep 2026 17:24:27 -0700 (PDT) Reply-To: Sean Christopherson Date: Thu, 3 Sep 2026 17:24:07 -0700 In-Reply-To: <20260904002423.3154436-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: <20260904002423.3154436-1-seanjc@google.com> X-Mailer: git-send-email 2.55.0.979.g7e5102b832-goog Message-ID: <20260904002423.3154436-2-seanjc@google.com> Subject: [PATCH v4 01/17] 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.979.g7e5102b832-goog From nobody Fri Sep 4 05:20:08 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 408CB254AFF for ; Fri, 4 Sep 2026 00:24:29 +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=1788481472; cv=none; b=VzZ4W6E1K5+ZGCYeONDI7VaI8SLU2rtDi5JQXkKnLoyma6FENnetFrwc9iAQx0qeUFahTOs4XUCl6akfkQE+S3ZoMHiYCyT1e57G/kMy3zqUCyjG4ILlxQtAm1OUB3oUAYMyphYzVbWPn1feJMW45c8aJwkhooTw6rx1QDIaLLQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788481472; c=relaxed/simple; bh=yAXXfMiQDDT+TX3uVpO3MhOalO1RXt+3/lszMXnkOjI=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=C70SQjjQ/aEKm/oPuMc076JnSDwgc5e6Wn2Oifxlxz3hlek/lQDfnYwlJUxcGBCpQSQ+C6XZ7FTxZwk7h5t4z654ovjh7CZXFaE+ZtkaAjPaXde223m2OXeedX2XoWKWFiVKuyq1AoKgzH/T0Fif0PC0S6xQSQWvmwrZ9SOlfR0= 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=fljm5cKn; 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="fljm5cKn" Received: by mail-pf1-f197.google.com with SMTP id d2e1a72fcca58-85326b426c0so497533b3a.3 for ; Thu, 03 Sep 2026 17:24:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1788481469; x=1789086269; 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=IBzhRz5zfoZi7n8bMbtw4lvWtqjJET4EFYtEvAZvYHA=; b=fljm5cKn/+ViheH4hkiscrw20vRDyiVts7GGDRLO+2f+rjxPdqe8UBtLWmDOxRSld0 JhPbwclsNtzANp1XkrcMLdRb/zmJfPZwXq5adGSp8mpGhMccDt38T7V7j2qzkvFpArzl oGLJdmeXR3KK18A5xF1zhqBfsVSmpnGABi6n2+CcrJ7dQfsuEbz0jT8xa9PCdgZJ4yJ3 6OZXlOhl1KIJLBkCdjC/XBFjGz+E9K9G1BfA3WBRwaDH447a7q2eJV2IluI8SnwmnV6H W2MtzHT1J7/r5E9wqUboJ5RiyHZiX4GldYTF+ThuMx7R5+8d1V/rI3mfYN6VKlnfTgUx Wv4Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788481469; x=1789086269; 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=IBzhRz5zfoZi7n8bMbtw4lvWtqjJET4EFYtEvAZvYHA=; b=lfdpE1/DFxXhv6oXqHxl+EOXt0nMOtErIlnod4DbwYmaqxypv//fjo7qMu6ZAq14Bz yGmFM/GkV9YJfzdAAXigNl2JqS3ZqyT+RNF4faCUz265biarxjPOm8XspXpa1bny1EKb RZfoBdAQUVyYmIcAwKi27Wylpe8ew9HlE6qg3COihBA6XJG+wuvnhPoHpqnhMBcKWCzL DwJVDjIa/O/AMOekV1kK79g/AepDQAup6KGef7QImEMMWa5oblA6Y1SWDVvq/pK92ke1 hUdf5lRsu3LkCPwThdHOhBBxgyam3GhHFlkT44LNrMTt9YpPj6/O5eGlFvxwbsAkyhVk GncQ== X-Forwarded-Encrypted: i=1; AKwUvBwfInPlxd7M5RYMjYyeBudXhVxGBzujb9tf39DX6xvhP5na78tcYmUBtuMskLDEgVvTSsdOEby5Ey5ZZds=@vger.kernel.org X-Gm-Message-State: AFuF++k1OgS8r8I5DryXMVO/+lLdUd0jd/PwkNS1ZjeeaxKW9KWM/LRC s09cyQTtCuEpM+w5dOM+mhQPMaLUzZ1+UqecNHWzlTkSJVfwWSnI0j+o2fOjQo3YTBeFoF90I0V 6E8nIhw== X-Received: from pfbfy3.prod.google.com ([2002:a05:6a00:8283:b0:84e:2400:dc7d]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a00:4c83:b0:857:72ba:ff11 with SMTP id d2e1a72fcca58-8616b967099mr4010021b3a.25.1788481468362; Thu, 03 Sep 2026 17:24:28 -0700 (PDT) Reply-To: Sean Christopherson Date: Thu, 3 Sep 2026 17:24:08 -0700 In-Reply-To: <20260904002423.3154436-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: <20260904002423.3154436-1-seanjc@google.com> X-Mailer: git-send-email 2.55.0.979.g7e5102b832-goog Message-ID: <20260904002423.3154436-3-seanjc@google.com> Subject: [PATCH v4 02/17] 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.979.g7e5102b832-goog From nobody Fri Sep 4 05:20:08 2026 Received: from mail-pg1-f198.google.com (mail-pg1-f198.google.com [209.85.215.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 6820F2475F7 for ; Fri, 4 Sep 2026 00:24:30 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.198 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788481472; cv=none; b=tEd5vWiur0XQRVQNMNRo3p496SATHv+PsWhXKeABliCNLIOz/z/tKbU/z61ogEmZdPctuWQ3ce/J2gRKrRqX1p3gYP2IMQgZfrcacXNQmhNnL7OE8TqqiyWscKc+yIIyddvbKWi+lABNHjJVu8FF3vdm93lFkOMouTZ2DG/hsZA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788481472; c=relaxed/simple; bh=hieh5Dzmqi7G+PD9/MtPuY14lFCbp6sayQRMAk/bgVw=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=gIJeD5Zw0gR7do7RRQoly7+z35oDq7ZcXaEQoIXA7hNdI0ztufau+ZVCoZqRplflU7wk3geArKCv5hHWegZ2tvppNAPmBOXfNTwMGLPVTU1BGMaHNs6AD0kGoeNNzmWebCJPZ0Jc6+M/vQqeiyZH0YxudABHg6QLn8EoNdwn5d0= 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=CEfL1Sch; arc=none smtp.client-ip=209.85.215.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="CEfL1Sch" Received: by mail-pg1-f198.google.com with SMTP id 41be03b00d2f7-cc4216aee8fso699935a12.1 for ; Thu, 03 Sep 2026 17:24:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1788481470; x=1789086270; 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=nGk7suZHBZq0aDw88ReExCPDyPGdklb10TBqchjRkS4=; b=CEfL1SchBXd06uXjglv02WOIFobplX3DdRRxY19oF961MsY+CuzdZsc7L25qDy80/R 8tezLB8W81gsaRUOaIujS6ViBhxdTQaPgdyQ7lqHL/LZjf5HkPXDTRBGSMLa71Ek8xc7 utI79zCBKhQWckKrf5hYe+QqqoeBwbn7utmB29SVHfHzaKGQgBWPCNdq4NoXjKYoxJwo E0A42HSIQFJq/8+rYE2qw7FBeSiUiYw4P0UQLeW0uqznvOMr7oSSQN4CRXDHJDMgyEVj 4mm6XvUdD2XYAkPR83Yjba7naB+R3CW56/osWaxMwBij9QQ/kr82DtGPxX/o5WAA0oTh dbHQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788481470; x=1789086270; 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=nGk7suZHBZq0aDw88ReExCPDyPGdklb10TBqchjRkS4=; b=i5RO3E66JwtKJf4y0Oi+X30lHxwzQZxSlvZLgoVNguGiSgKJL0FOBdBr+2mJENOIep 6KjGlIyMsQAYsx1kPRbxULubrC9uX9Qg1nJK8PxCiyGd5JQUIVav7AUTPhCCctFXT5jL owdi4mH0upeefktZomtb66HBTVSOAbJlHyWeBSpzIADvi4AX10xOULtIL2so5iI6JX5R m+o5uWvYLIzznDGwWgBl59lIhCKQqhQpPL/8lNyh2IvXMh6Ly1zhukBT+3bsR70YkEhy priaEHmqZ1HYKwrcoHayjoQFSyTmcbiB1KfEHke/uCe8PRrk9n/O4hOUuJ96N+jDyBrV 2O2Q== X-Forwarded-Encrypted: i=1; AKwUvBxyFkEW9BU1COY1sFdFapIMgeMuOI0tYlv2KBPdJAQzDBQBZU5IeFLjGng0Eywhjd/XzdCTjzvOPMR7OAY=@vger.kernel.org X-Gm-Message-State: AFuF++lV7wpY6gRKI83cF1CXzxpjC4h3ZmREEE4eqdt2VSEX5uAF0mTZ PE5bYgzXJlwCyGEG/uythxt8gk5GKn3PbIg4YHLljzrCHFOIMEwsgkdQn8cSwchjP4Oe3Yx0pVh p+7wCKw== X-Received: from pgnh1.prod.google.com ([2002:a63:3841:0:b0:cc4:57b9:2848]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a21:3cc2:b0:3d7:7b6d:4997 with SMTP id adf61e73a8af0-3da3a16bfd5mr3615765637.27.1788481469519; Thu, 03 Sep 2026 17:24:29 -0700 (PDT) Reply-To: Sean Christopherson Date: Thu, 3 Sep 2026 17:24:09 -0700 In-Reply-To: <20260904002423.3154436-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: <20260904002423.3154436-1-seanjc@google.com> X-Mailer: git-send-email 2.55.0.979.g7e5102b832-goog Message-ID: <20260904002423.3154436-4-seanjc@google.com> Subject: [PATCH v4 03/17] 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.979.g7e5102b832-goog From nobody Fri Sep 4 05:20:08 2026 Received: from mail-pg1-f197.google.com (mail-pg1-f197.google.com [209.85.215.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 A3605131E49 for ; Fri, 4 Sep 2026 00:24:31 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.197 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788481473; cv=none; b=bRly+k8Q6J4wSu5LaDUJMiPYJXiaodTli9s3Q3w2xAQi4DjCaUdLINC6O/E4U4jEX16yH7CBZhMP+S1TO1GHcdg3xLAUgpi++XmcgFRcSCwptiJeIZFQiVXL1j69QUMuDHwxAZmCbLqnBgkICCPUCDuM9ugHhdpdGWSkeu0ftcY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788481473; c=relaxed/simple; bh=lKfRr6U2bhRKVy1KJfPiyPVEF5KWt/ARhVVbK4kS7kg=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=n+1ykZCFs24VOV2UbSmaKvxbIEiRvWCmo3T/qVk4w01UM5w6Ihxj1m8ik/9Q9neFJSMG6c8Dt25pK68+9qOfXIJI+dkV/Te+j+6vCxRJu1PzreTt6PHUAwemX1OXi8rq3hWSMxfWEoZEYeCBQetlxjurf6OFVObEv5Q9z9OtBt4= 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=HGAdgqfU; arc=none smtp.client-ip=209.85.215.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="HGAdgqfU" Received: by mail-pg1-f197.google.com with SMTP id 41be03b00d2f7-cc1c1cc5206so618177a12.3 for ; Thu, 03 Sep 2026 17:24:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1788481471; x=1789086271; 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=DpIcw/+ywfe8w4rdBomypCt/lLrNM04RMqmRif2yLnY=; b=HGAdgqfUIuZzuI4Lq6ATsGs0cdTa+GQmyN/FCGlQ1HwCiQhkddPkEJhW+aG5FsN1gx YVunqfQHvlJ2KqkM7YukxuTLIKARUULxGG+x1JnidzL+SKx14gryyDOXpRRc7b6MxIsh qLUnFOfOVpixWw7OlgFo9bLu3uWfKKRVtzHRBYOBD0qmlyKTUWrZKX6FGP4YGLVOXeP0 SgD0uLEAM0UUUTOIkuPd4nIlHSVyBgjRKHqJsns2zQS0ZibXjGR3D19yXWVRGavj13eQ mJdGxmPnfAPUWww4xkwD5ZvPsL+AuU0NKYY/FfRqFp6K5uDPnNjWgb5UWV67ianMtsZq yjMQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788481471; x=1789086271; 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=DpIcw/+ywfe8w4rdBomypCt/lLrNM04RMqmRif2yLnY=; b=GST30sW/f25vGWvg94DR3YrXwy9uEwBq+CVeqkAMUW4PIvqxdxlTTg2LjVJduVFlFD yf0llLzHZ2e/Kpy+n08KyVor90RFxNZviMFGXM4aCXQImPVUpgqGrSecYZfEF+QOEI2+ reXQEWy4Xggn6Sku00ajUfigK9QSTfmP3zZTn5Uh5HDb0YLXufJ7YtZjrdvjggs6wrs+ 9WX1kmQar/vIBLra3/SKA2L+fd3Y7D7rlN2spGa7NauWbgAR++prgHHBS4HW+aCofanH mwStM91kQEmgy5gI+m9aqoMyIW2twq/VYEXvHXMLlhYIq/8J4TvFKoJ0nWoiU+N+lMee 2ISQ== X-Forwarded-Encrypted: i=1; AKwUvByHOHkTtGCw8Ktb75hYNYtvzETk4Gu2EwgJNuK0uXizYNlA7FajDcI3+NrdH/2HVoMNBZ0fe3SuJd0ECp0=@vger.kernel.org X-Gm-Message-State: AFuF++munxYzBE6k/dp+PZ3gP3UA4Ra7FODODxD6mV7RdEtEeOIgL5I6 VzqbsjJwv01tWdjyqBWCrftXQ8FjoTrpvzsdIAL3XJjN+3e9+YIeDOvjPxF+/8hbTnsaEZHmoro pM4jk8w== X-Received: from pfuj13.prod.google.com ([2002:a05:6a00:130d:b0:847:86fe:e9c2]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a00:3d4b:b0:84c:1cd2:142b with SMTP id d2e1a72fcca58-861671b9e4fmr3506208b3a.9.1788481470573; Thu, 03 Sep 2026 17:24:30 -0700 (PDT) Reply-To: Sean Christopherson Date: Thu, 3 Sep 2026 17:24:10 -0700 In-Reply-To: <20260904002423.3154436-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: <20260904002423.3154436-1-seanjc@google.com> X-Mailer: git-send-email 2.55.0.979.g7e5102b832-goog Message-ID: <20260904002423.3154436-5-seanjc@google.com> Subject: [PATCH v4 04/17] 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.979.g7e5102b832-goog From nobody Fri Sep 4 05:20:08 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 DB9FE281369 for ; Fri, 4 Sep 2026 00:24:32 +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=1788481476; cv=none; b=fjQQlwKAN3Z83GhKRpQCCJB+jHB5LYImLZpXHjGcC6VvMxdJ40yB72ajrAIM4JmaVkWz0iVp8WTkqHcCoPeVizydjmKayRSL7FP0QNvSARRIsoBbeI4wxTEqBLfIqgfLztY8FBn3nHvotV4xVLMAxNX+Dt8ep4acEf3JFY921mg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788481476; c=relaxed/simple; bh=Q7qpdWJEFs8lqslQBXctE4tqpv3fzC5rKtHXZQkZOvU=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=WoZ+ppp6xMMHlUtuAGI9QWgpNCewdJ799veEfIvO//FwJaTvxjP9kXxj9gbEuH64C5QBSWOE3BUBNdjPjJX+ZY+DUtg+WefxBt4tPNotg7jCgkUTN2IaQIK+ldwZc4r0rJpPVzqWTEeRRPTB850QendVUJf+K2ZaW3AORt5uxcw= 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=CTENJn+L; 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="CTENJn+L" Received: by mail-pf1-f198.google.com with SMTP id d2e1a72fcca58-85321e37104so498958b3a.3 for ; Thu, 03 Sep 2026 17:24:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1788481472; x=1789086272; 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=wRWK/v12x99rpq8aWGzvGBtRUnaxTCM6WoKg5BCcAo4=; b=CTENJn+LUSpcW2lMtC+wi/5eqSiZr24HUZeKn8ulmXsUdBdh8GovS8IBXqKF2qrGau wY/kzWCIantR8mD8sRTGWZibnBC2ZW5ClaMuZahaQhgpMPOEgHkmU1q4OJFudfTqwit6 vAmu/6nOQFguPTlqXywCtrGnE5ZYYM001BK0jqYZuiS2hf3QiMYEri55aEeRV1ygdx7d A8PFws/4c7TDauqaM3Nzhy5fsVQCnwHh0a8vTocdKwIrH0YSLr4ejNcmASbYzNuR8cGM rgSbe2W4MdX47Yu8baFiTXZpWVPcgQMGVIqMQzIdKbIA6iuwvpFkbt4rNUBkgsuo9irz jP9Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788481472; x=1789086272; 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=wRWK/v12x99rpq8aWGzvGBtRUnaxTCM6WoKg5BCcAo4=; b=cPznOpplLkePPKkayxK1tTJODo93zdw1SO9bMH5Ezra81Uz2WPFkzv0MjBxETsNXGa LkTzNGmSjlG+xQwlVp2I3436g4pXCEBW2lM3kXOn58Z7ZULiiL7nV4hrQwYcp/EVo1vg NvSkmXT64oEdvRrzJuWcqYb9wUyfm7ljE9rEEgXoMrNChiCc9R92syvklmneN8b/8uEF tAOQYChLMhddgCJqQ5BxdN4hUfxirfWqAlyHNR66SpWH+g5m+Tl3WlWfx6sMRMAd1O0t k2QUeHiPGQeZ1lDZFgmXntvsxDwDsHli1kAJoU0rofbkKWirdTGnwz9xtnr2r656yARH bB2Q== X-Forwarded-Encrypted: i=1; AKwUvBzATtcIRoEgK2i/sMXq8OVy8Ay/hUpILJ/CILgQhp+JWNof+t7hTSpET8JsRDJxWofOucpKfOZ6NIz/LsU=@vger.kernel.org X-Gm-Message-State: AFuF++k+mTGOIXUCrRaZOt2KoNhsGyXQPtGGOSIbx22+DKr3lJk5Ub/Z hYE7PmoTvyI7g/p/O18bbN2G8vnxt6K+WkxCPLVzowOM7WbD+/HsWAb60Na1DHBnLT5HF9cI1SA I8sJXAQ== X-Received: from pfus9.prod.google.com ([2002:a05:6a00:8c9:b0:847:ac08:fdf6]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a00:4b4c:b0:85c:9bb4:a7ea with SMTP id d2e1a72fcca58-8616af56c5fmr2991883b3a.11.1788481471741; Thu, 03 Sep 2026 17:24:31 -0700 (PDT) Reply-To: Sean Christopherson Date: Thu, 3 Sep 2026 17:24:11 -0700 In-Reply-To: <20260904002423.3154436-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: <20260904002423.3154436-1-seanjc@google.com> X-Mailer: git-send-email 2.55.0.979.g7e5102b832-goog Message-ID: <20260904002423.3154436-6-seanjc@google.com> Subject: [PATCH v4 05/17] 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.979.g7e5102b832-goog From nobody Fri Sep 4 05:20:08 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 D67CA298991 for ; Fri, 4 Sep 2026 00:24:33 +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=1788481478; cv=none; b=Y+HdgYob323ORHxembEj12upfLQ2BWSeHTIlPqLwJcyqieHPgXztzk2xP7XiFUlARgt7KBG+Zezv/TV+rWrcS9aG5LnWcLhSraznd8p5e/3Yh8GHRfiVa1OhbR1JsVLtN2ZpiH8YPFrSJ5c7NTbWTRDrVA8YM3Q87Jog9pe3bdU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788481478; c=relaxed/simple; bh=bL+/d2XsljvTdCWPxBEUMfQNuIdb2cAEkc/Lc8x6cmo=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=c7k2EuF0SaMb9dUQASSF59ATBfRA6SaCGGUFhwPoGBOvANDwZRlgputpGJ+jO7iheAhV/7tq3GTzs5jVD6+lm8IxBbRsofXAH0/IIbWL1bNV2RUtFHVL6VD303dePVFZsEGhLT4psfmeH3TSpaixKZa5I2yvTouOtkotL4XnNDE= 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=pf9toYf3; 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="pf9toYf3" Received: by mail-pf1-f199.google.com with SMTP id d2e1a72fcca58-84e13b57b2cso453688b3a.1 for ; Thu, 03 Sep 2026 17:24:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1788481473; x=1789086273; 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=R1KMl6QKcbTWJGXOV2RsRhaC6Lo9OYh7u7lENzPYhXc=; b=pf9toYf3KgDnmJNpBfQz0fgyL8XI5Gyjp0P7+Z9+bl99FwLM6WrzSiqnZxk3tU+Xbr i/vZ+OSxOZ3T1vhiK9MsrBTmYJYpDp4gKvF1AAHLZk5J5LsNxfe5YPSSVeYxsDAMJUY4 JGpVi4A87HtybVwE+r0OiNE1c8aR/NHMGVTGugWqHDxVwCYT+8bBxvquk4EPwIXsaSlK PO7BFRZQqb9kPmSu9lrurMRgMGGJxsjAeQtFUrSZbHijJH6Zs/7ScH07mUP8rmYx4Dqs nayFAUs2zxLwe+QOPaw7gZ0OQGFkknKTkaXXMuond3ZA4jdP1tVkHcaubyLdlgoBMSl/ ZATg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788481473; x=1789086273; 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=R1KMl6QKcbTWJGXOV2RsRhaC6Lo9OYh7u7lENzPYhXc=; b=Hblu+AYysww7PQhyAo8GmzPdFumQi3lmBjranyMqDLiGSNfkwFdXmvCIa0Ne8YlN1U 7ecc8otuDNTpdYjam+i2xqMYYlxUw/WqToF0gliURfC3p4No08kAA9eQiK5AzCgwIbvb p2RLpSah0+WKm6FnDnoEBdEn4p2merNpJeda28oQ2hwHfSdMymaJo7qelGyafv3A85pi +0JdLPDCotkInnxUauoVnq8wKupFeKc5hnlrmbcuhnp39CRP43PnVI4OCbzo4OmtYFgk Z8GaaeF866v3YL5efRGRwDG/Y0aYIBv42u8sMDvxBBfVuizg004xCemSHNaTx+VrKASM UEFA== X-Forwarded-Encrypted: i=1; AKwUvByp16SZmgwvWx8FOnohRCQM3OG5D3wFJHKVPhidSn/mTXHmEbz3j4S/UGirBkoKfhHeOhZQ04wDGdHfM/U=@vger.kernel.org X-Gm-Message-State: AFuF++nFii2CUeGBGruPOAXPK2gcxuKm6klRqhbliLZugC9FIM8EP1Rg RDiZyyk9+cnb4NdYXlxCNo7EFVIiiirmEoQcmhC+dCR4sdruqBOXDo7hjDaIufLDveNyOm6PvFh l3PzU5w== X-Received: from pfw10.prod.google.com ([2002:a05:6a00:a26a:b0:845:e386:e036]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a00:3486:b0:851:804c:f4eb with SMTP id d2e1a72fcca58-86168099cb1mr3514654b3a.4.1788481472848; Thu, 03 Sep 2026 17:24:32 -0700 (PDT) Reply-To: Sean Christopherson Date: Thu, 3 Sep 2026 17:24:12 -0700 In-Reply-To: <20260904002423.3154436-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: <20260904002423.3154436-1-seanjc@google.com> X-Mailer: git-send-email 2.55.0.979.g7e5102b832-goog Message-ID: <20260904002423.3154436-7-seanjc@google.com> Subject: [PATCH v4 06/17] 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.979.g7e5102b832-goog From nobody Fri Sep 4 05:20:08 2026 Received: from mail-pg1-f198.google.com (mail-pg1-f198.google.com [209.85.215.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 DE0B6282F1C for ; Fri, 4 Sep 2026 00:24:36 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.198 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788481481; cv=none; b=QFSy89yxfyqg1hhQTM711wxQ2HqoQXIsQSBSWcPYkpNaKFMpNwB297EFWjtaSem8lxXStWaM2EAzSYkrgA8d3mH2szYEmbl19RPiWlMcFG5Gh2D9ouOllSe11/0DT3h/LbDhWbyRJPqxTxIOubrfDsaUfdcVgUCOWkZ9XcR54IM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788481481; c=relaxed/simple; bh=tyTPuhJ59/2XjTUzKgS1GHNfk7KV+LR3F/VF3b6QuWQ=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=SsMMR8dXgSJa7r/RPEqE9oq5LcsMZptzxzmORVV2NNB3eoT1znetiK/ZNhzQeox6iBCHY3uIHnk+1L/8zvqGMm22HkbNwVSQ4fjPsEYlLrF0BW+chhgTmLHkRDLPiaCIRtuT3gUAFO2kKha758VdOTuXEvO4SDoNTxxj+7q9Xio= 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=Qmjo3nOh; arc=none smtp.client-ip=209.85.215.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="Qmjo3nOh" Received: by mail-pg1-f198.google.com with SMTP id 41be03b00d2f7-cc132709c76so702033a12.3 for ; Thu, 03 Sep 2026 17:24:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1788481474; x=1789086274; 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=YnpMw4eZoFav91J38/RKkAOZr7Pc3bKjaw9owuLkN4o=; b=Qmjo3nOh0hiofFdi0jp/f+foR5rckpFHRUJAT7keH7zoEbseiY/byE2g3lBo17+5wB PWExPMG5CGDwf0J1LhHMaeBGhP4I9mQ76zS/dI/F8aYGrcptYoL5D95Che/soHDH4K1U JabglXkIHVE1K6msYKg7l/wj6RWLCIMDKvJltIrCgiubEaPHdJjkoWEnzbbr7um87k4b fCDXBTGTWS2X0Igq7+4BrrnZArPvYU5eUbEn93wpNIbR10bFpjuEvMoexJOM/oiVNpvD yH7UsRfN5VPuLcr8TTxkji7QV/fSuZwv1aWKMQF+5MTldx0T+drlhDOhOaUgw+G43dsD iOcQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788481474; x=1789086274; 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=YnpMw4eZoFav91J38/RKkAOZr7Pc3bKjaw9owuLkN4o=; b=FhyqyQxDaN2quU3zjx3tCDVQcG1wS+jHeqNOAJbfrmgXimZvYdwxZH3tNQ0JxN7zDD Ddlbr8ivtKnHArf0z2yVD/i5Ubky5t2I/eZxeZcBIhHonrlqW6sklPH/GjVu9UREM0tU WLiG5gA8RwDvqGuuQfRDApB08F0Y6gx/pAstLx5EbzG6PpCCwr4jjng4GWmKmYVXZ2bh GJ2L8aO6nZNeFEGDDS7oi0vCxmPkX3ToAAIH4fpUMVXrB+26wLTOSJZAtqhv3GPFsfLe d3QeVDJCVSD5yV2Y8MJHYO0h4DbJDQ0H8MiKklXbXbJ3vdTowsLFkdF5zSVOGZrcHOna SOYA== X-Forwarded-Encrypted: i=1; AKwUvBzJqDUTCDVrEcbQCuBpk6Edd1DYRAyugL4DpntSrYRUfKNLXFVOB7hqDGDHsjmDAhoaJpdhB4RSH9wM8ks=@vger.kernel.org X-Gm-Message-State: AFuF++kCiVLsJguuWeErYltRnniDWUrOHgruNbzKLNJ9mP/Tc++TWa/T yc7PVuWjVo8nSSJOoWkKWR+VOMY//+zc204Ys4vvwm4CpVusLLbiqbFiAfttsKr0hcOb7Yb9Foz vA1+Ugg== X-Received: from pgbj10-n1.prod.google.com ([2002:a05:6a02:61ca:10b0:cc4:55ec:3295]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a21:a38b:b0:3d0:9164:98a7 with SMTP id adf61e73a8af0-3da39e830b7mr3533851637.11.1788481473933; Thu, 03 Sep 2026 17:24:33 -0700 (PDT) Reply-To: Sean Christopherson Date: Thu, 3 Sep 2026 17:24:13 -0700 In-Reply-To: <20260904002423.3154436-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: <20260904002423.3154436-1-seanjc@google.com> X-Mailer: git-send-email 2.55.0.979.g7e5102b832-goog Message-ID: <20260904002423.3154436-8-seanjc@google.com> Subject: [PATCH v4 07/17] 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.979.g7e5102b832-goog From nobody Fri Sep 4 05:20:08 2026 Received: from mail-pj1-f71.google.com (mail-pj1-f71.google.com [209.85.216.71]) (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 230C7248F7C for ; Fri, 4 Sep 2026 00:24:35 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.71 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788481478; cv=none; b=GdaHt0fv2HhXCAHPW8/jHeIVPmBGw2Un03/G6xuwJ/mYsGBYVC6XaUpAMzy6e1zCzlLmRbFl23Q0JT7dtUNwxMA5yxSqteWyppFoCwCOHauZXK3NNl+6mAUflNJPDtQ7133q/Ici3J1dQkXtYRDoadPZj7ptNnZTmVXzWDWAYpI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788481478; c=relaxed/simple; bh=zXd5X55+TiJnkrJw6tJzRxUAJwCp93n+SWxvi5/Zx/E=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=N1ga7USEbEFag9vSrfVxuvgBqTv3s+kYy/fxmdqggjjHnpTsNYiX1P6svKnYURLQUuxkGnYngtO/1F9+1mHWRLsTkAEOfiAmWir/O7AC4YgRDcbBB2WCNy1ZwhCxrebwrpcFPfqUlf3qENelX6fxQOoBr5nUloEtymenXDZo300= 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=d/xhtsIf; arc=none smtp.client-ip=209.85.216.71 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="d/xhtsIf" Received: by mail-pj1-f71.google.com with SMTP id 98e67ed59e1d1-398d0010cfaso723623a91.3 for ; Thu, 03 Sep 2026 17:24:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1788481475; x=1789086275; 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=907we4nZ8HxvlT+POuzPHkcKY9uyEq/810sd3j/s3UI=; b=d/xhtsIf12jSgcDeDr+ygm5tQ+mLVA/z61lVc1REfIvsSA4pAV1EOkHTs4kqRFb9De zflYvDonYVj0H1Zol/99oOUZNpyI4jeYfTOaZ+TENc0ies4MYmqhbRYbTnzv1wwkcmqa PxgXMT9nRCkRPfWoq579jldUvnpft7vHfLiy0wJPs2w+fpPywROFOzXzrLhQIm9JzskS /RVBkqy0mx/3Z5forDOauEqKWkVPIINMmqKRB/HzYvCQxWVthL1bHorsH1Td/EhSlfZv kNM1QtlyduC26ZLli4hoFr2XNuFrR2OKXw/APKYzPR0EROgu9cxvURBtB8NIijskJqE1 J/0g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788481475; x=1789086275; 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=907we4nZ8HxvlT+POuzPHkcKY9uyEq/810sd3j/s3UI=; b=r1F/BoZDNBf8VoTQawOnJAwBRlXaSStPZhFh1QqAGQhx8MpyYYreKHHs8Ngmf8FZuv N8/4/uYQdAaTn6VOuZNLiYdScnQqCu4/XR25EtA37Ke/kHl05Ybsd2pI3rBcoLJt0c5I sqBYvy3SDnHAtviDntxVTAR4hpaoySS4vRHcb6N0TpqA7meOW+o35nrgAlwtGN9iGLG7 TQiCAmJwNYusyYU9KICxluoYNG31cpkyQ5BWuPUcO0RrVwu0CuhQB3h92oAetyIM8lz9 ugum0hEJccSbjmJI+IQRlNDD0cEQ+WHSVsTuy55TLJE6wJsh+TeWM+nY5SQ3QaMI9li2 LbWQ== X-Forwarded-Encrypted: i=1; AKwUvBzduO/ZrNOxu1vF1hOR8Y/NvTUdRByAsCTnWBEVJciP3AZrV+mY0OURbic145bTnAkOeJMryfW+bj1SHeA=@vger.kernel.org X-Gm-Message-State: AFuF++lIricqfEGMGUllBSME1IZ6J2fQ6Kv0SFAAC5+qJyU+Vfy40zjZ io94PrWVDcFyaqleDU6dDFwzDJucOvVtsyRy8jJxMfznYiKFXgoIbpt0j2CAO3sGqRbX2qzvKiq fxune0g== X-Received: from pjli19.prod.google.com ([2002:a17:90a:7e13:b0:38d:b62f:5045]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90b:51c7:b0:398:e73e:5a0c with SMTP id 98e67ed59e1d1-39b2609f34bmr3601202a91.1.1788481475060; Thu, 03 Sep 2026 17:24:35 -0700 (PDT) Reply-To: Sean Christopherson Date: Thu, 3 Sep 2026 17:24:14 -0700 In-Reply-To: <20260904002423.3154436-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: <20260904002423.3154436-1-seanjc@google.com> X-Mailer: git-send-email 2.55.0.979.g7e5102b832-goog Message-ID: <20260904002423.3154436-9-seanjc@google.com> Subject: [PATCH v4 08/17] 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.979.g7e5102b832-goog From nobody Fri Sep 4 05:20:08 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 C4C42280329 for ; Fri, 4 Sep 2026 00:24:37 +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=1788481482; cv=none; b=YvZkK6KMTExqoW0XXAD/S9gGQrCcDPtiFNDJ3ZMy5lUs8zrATWvlsp1u/znrVUCrOR43k3fjS+GSpLn075WKcGyjz76aYJQRBqmIZVIfSbVGtqnjJb1Bw6VlID688Yku2ANM4wfcLujOIBqPfxhAVGfpXs2N41C3GZlFZUGIkZw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788481482; c=relaxed/simple; bh=tDrKAnuI9Uxg5aMETYZvEKyOXsIlNDxnV7W4NqPPMiY=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=UPin7kAhlOYpYST2nIrVOMOz+peQl8C3D4atHicNKRiPJO+f2rVG1RYjhaafbl+8A5P9IMsirBbh15SNU1dhT4MwpsH1Kw1HwnLdyBVxnwkpdHxXE/7zD617EEJ2VBQPFBR8C1iI+WFJP/3NoVsjhkcZ7rYkGfJP/g3EOri89AM= 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=tHFwXXtl; 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="tHFwXXtl" Received: by mail-pl1-f199.google.com with SMTP id d9443c01a7336-2d9057fab9eso7181545ad.1 for ; Thu, 03 Sep 2026 17:24:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1788481476; x=1789086276; 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=7Xvn0jlM2o/RfgoN0/1SOuii7r0BwBFUn8zSa9jtw2A=; b=tHFwXXtl8OQ7yXzDBoL/p1bUN3712jDosxXnf/lTjnbyqyseu+dtRAcP77iHns+kjn Qiez4+Tzq/779t8iqzKMp64/f3ciZ24KYKUrWdJvdWyZZmLHQhHeUWJ1toicd9+UV48y NdvXY6p6HLv1m1XM9GRO+P+AWLl/Lawpvl3yUACZHoLwEOoVz6+NTWtffDhMzRT2DwKF PUemB8gi6dGi7zq1ZuRUG7cpu+RdcLw8hPL2AU9oYYi9/mRI0yNU1rGPiC2jOEl8xeu3 CwhYjavvPS15a7rbMv/BYkptvThnFlITu/tQsDoAPOA1rCo53eqfapUdGO041hcVpq9d CC9g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788481476; x=1789086276; 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=7Xvn0jlM2o/RfgoN0/1SOuii7r0BwBFUn8zSa9jtw2A=; b=TuYu6kfiVeWb8tOBPkdCkcMKqJq6L3EZloG4YMOuOYm5h4yvHx37meFcCzhUs0iEiu eJIJyg2qcQkZr5OHf6SguW+7DyjF6JldHOvaZ7OMIwiDC1D9+2n8rUYanBFEf46w9Ymt vfL2UXUlSjf+sa5vh/GzKXRyNVnB1fSzfF3yy2uJCC8ECjiX1zgJg/FnEvs+8W37xBmu dm5SUYxAAlI3ytAA3mfXxOXOGSqMsoO136vEgsQjW5wxOXbcY7oudVHt6r/0Z+YpRj2A NkLNb5W1ZGbzFFGjHmTv2+WklzHN4d3qJSrqvwP8hmUXb0WdG7uOz26j19PjePuEOPDu nF0A== X-Forwarded-Encrypted: i=1; AKwUvBzthW6r6SYfce+iuDYNoEsZ9eY41ow8h6GmgJi+ZLwNISurwDYP8N3dpV2xOwUAmcRvH/z8KqmZmBy+T0w=@vger.kernel.org X-Gm-Message-State: AFuF++kul56ejUeddCY90EvdqDm8lEu97+EOtJiRhn1J3atpHWKLVPYx Ia2n5mdcxSc92mwdjDiAfSEEcpw53OGkhWvnkXkbw7fHr8wEmhTXd3g5mCfjOuCZ07oRc34vPnw MgvrvKg== X-Received: from plw19.prod.google.com ([2002:a17:903:45d3:b0:2cf:8131:8521]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a17:903:124e:b0:2d9:4baf:f1a7 with SMTP id d9443c01a7336-2db1287a543mr29645055ad.19.1788481476138; Thu, 03 Sep 2026 17:24:36 -0700 (PDT) Reply-To: Sean Christopherson Date: Thu, 3 Sep 2026 17:24:15 -0700 In-Reply-To: <20260904002423.3154436-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: <20260904002423.3154436-1-seanjc@google.com> X-Mailer: git-send-email 2.55.0.979.g7e5102b832-goog Message-ID: <20260904002423.3154436-10-seanjc@google.com> Subject: [PATCH v4 09/17] 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.979.g7e5102b832-goog From nobody Fri Sep 4 05:20:08 2026 Received: from mail-pf1-f200.google.com (mail-pf1-f200.google.com [209.85.210.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 850872DA757 for ; Fri, 4 Sep 2026 00:24:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.200 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788481483; cv=none; b=QbLarpjPME0L5KKMmRSl9amRGR5VnwIPxwMeA2tqP54/OtDUjFEaqc9kHpSheFlHGz0PGeUjTniR01gYS+dZofNn1IKi3pekRwIbXZQGaDPDIHiJXG0OF18vVC8R9MRi8VJvGwJnU2/wyIUZwG7Vl9jhXT3h2xF8TR+bLUyn1TE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788481483; c=relaxed/simple; bh=HzkKv4Q2MLa0YGb5Rcn1Fmbo1i7nWyNpJmAS6K5V44c=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=flRSPhiuKpEkprGZcxiRP7Qh8pBrStuMt1JP0VN1CA+ctXBHIt0y0TZLj0zO4dCRiefTr6ePOZ1qHzy3nQb0WT+ytqlGCZ93w2V8fv3KzNe0U/7ASwQWrgPc7UMlEDazOisM2tRWPKojn7HeyzIXzLQNZbguYYUXdUGpT4Uwq7c= 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=CFfuAOve; arc=none smtp.client-ip=209.85.210.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="CFfuAOve" Received: by mail-pf1-f200.google.com with SMTP id d2e1a72fcca58-84eee2147ffso478758b3a.0 for ; Thu, 03 Sep 2026 17:24:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1788481478; x=1789086278; 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=4lP+McG+LuzSZSEuCYz5r9zqeKYerKG2G8XKDFbEV6M=; b=CFfuAOveNUvU6qfzFz7wvPg8ajbPpfpIKCNnT5skMuaCKbOaWKaY/kYMY/+C/+YYAX YuCXqJSjN1p2l4uKu/sFMRWkVh1OWystgGMROhyjL0mUKdKlnXjmdwr46Nmh1v2MiWdM v1np07m2rtpNbMFQ0/Vfe/f59+zEvX+MK4JtD8KT2eFIU+0J+s6kFEZuqBxuArk2vl9F eeEJ4b/ydncHI+M6bzVdwDPm0R2xmrTN/sfrVof3W58TH04EzLynlOtTtF+VJDu2J/v0 BoCk7nxBvXA6Nfjcrivq69nA5pBxpso8RMfHOW3jILeZLOLjX2Zj/E4FY2HFrFBh+80s EUHg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788481478; x=1789086278; 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=4lP+McG+LuzSZSEuCYz5r9zqeKYerKG2G8XKDFbEV6M=; b=ocjOIV9ugKNsiphbV6mxKSDWkkxU/9JVxZ1xNCh5enlLUVc3XVjfPruGRcxw3xySiM oPT5o7S3Z81eaKrQnshKf2DUEABQ/tkT9uoo7KGeVk1GbCekMqEPuEU/neHFzITYo5Zb c1XdpTKOA7Tpd6muRAMx81jwd5yrP9uKInLTdx5kosiyiUFzZYlljVGMdYeJ4jzoMx2Q b+g7ZpbUFQaJ9VdSTqVevcP1UOEQkROLjq+pICsNOl4Cgv9hKqwNNWYDiA5KYIFuxP2F 8o/99yh7fO0ZQ0R3+f6P9bNYOYuLhPylMHBvKc1P+ve/9mkaSBDaiskIfgL98FbkryJU UFYw== X-Forwarded-Encrypted: i=1; AKwUvBwO7ZALTRveN9wJKCFsB6H1MaMEpDgFRgn9P4VGyE7H9IngGcMCnpc4EldOX0s91pprOsSBYDGrq/B/2ZE=@vger.kernel.org X-Gm-Message-State: AFuF++nLOCZCc0RlaGOyGtw3Ov2TFEhQLOoNuHYAWKgY/aBC8lulh2PD NhB6VF8Esut+dyFThMkeQGPeZ82aTrbDEOZBg7loO8Y0aDoseUb8wVb/Q+5tNXEWgXAraqfA+LK 6gga7Ow== X-Received: from pgak18.prod.google.com ([2002:a05:6a02:6752:b0:cc4:33fd:a4f7]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a20:1441:b0:3c3:9070:96b3 with SMTP id adf61e73a8af0-3da39cffff0mr3643079637.3.1788481477405; Thu, 03 Sep 2026 17:24:37 -0700 (PDT) Reply-To: Sean Christopherson Date: Thu, 3 Sep 2026 17:24:16 -0700 In-Reply-To: <20260904002423.3154436-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: <20260904002423.3154436-1-seanjc@google.com> X-Mailer: git-send-email 2.55.0.979.g7e5102b832-goog Message-ID: <20260904002423.3154436-11-seanjc@google.com> Subject: [PATCH v4 10/17] 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.979.g7e5102b832-goog From nobody Fri Sep 4 05:20:08 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 47B5D242D88 for ; Fri, 4 Sep 2026 00:24:39 +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=1788481481; cv=none; b=lsTosFgdJFER3nSfQyJ74gVqGxI+6Ojt2cNew8BJBNdm4oEYBlx+JtPt345anxSAfx3K6BKvPXtVZOdMQOKhoXWg0VDNILdGMTq9VWWPfCrwLM++nuni/0rQ9qe6L6mqjy8tBlqHpwE2zjwrO64pqXccQ/wF+wx7Ec4a3UJACyI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788481481; c=relaxed/simple; bh=TzyTpIZvX8nCrYGQ78u757hq1EFVtnC4d3w5LisdstQ=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=e66ok7eIHKjZkfHkVcYSI5LhNICn6foDo/mYtugfVXBLhTff0sDJJPpTafJHqcA8ohuG7WbRD24cvcE03UO7wcU7XjwqicgYt5mGCJaQvJzga3ryoRJPG8bg8CcxT+/03O3BjZUNWgOmoM7PtAR3z1Rsgxxj8YSd1/WZPVAYTdM= 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=bAJLsUrT; 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="bAJLsUrT" Received: by mail-pf1-f199.google.com with SMTP id d2e1a72fcca58-85599cf98e5so694592b3a.1 for ; Thu, 03 Sep 2026 17:24:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1788481479; x=1789086279; 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=ctpiOwQNgtLo4mnzlgvrJK29bFr1/fYhEIoXwvr6TRs=; b=bAJLsUrTsHY0eU60SzvZDgtmXWPIpLSX2+qQM0q0NMW1uUQDswu+JN9NXlxKnUZa1R 6w2P5EeRnUZLah6v7XR1lKxR7ysDQOXBzfHproaWBt9gG12W5fS2Cgq6dF/eUy9NVEGr 7vGzLRnNp+70XZHpBJp40RUhvXzTZf7VYQJYIzJUCzcECxgEf9dYvZRdNOkMbjs8TFOh RQz5kwQbfwy4kt9tFzpZlU8Tk/cx64rJGM84z7ZNkriXgvCwD6KUTzt9X5Mkx8Iu1NwG y9vxvp1lsMGp2fvUPpcaRWona9wbw46s8oX1V6zv5ObunL3D4e5cNEjJQDekaNdoFKRY QuUw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788481479; x=1789086279; 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=ctpiOwQNgtLo4mnzlgvrJK29bFr1/fYhEIoXwvr6TRs=; b=XAG9qYOzInY0lkEBrYsaJo1jHlsbpOYk1pUKCQqG8x9fSlq8QruW64u/MTbBLv84dY 6LEMV7az7CTLuRKEX31k17FrNFw7P6zxrxgGfNx9npe+uJPk3lj4SxlFZL6MpKicXHQx F9gXjKnJa+BRYAiQz4SmIPdZfaHyfXgVMA6/uUZki6bqaZjAgSv9Veb4wZfxC1zJkJs9 Hqdexz8Jf6ppv/CQIyPD1fFHxvgQnJTPhGMH0REHw9eLXe/flJHK/xQ17KmQ2xqz9/PU MPxOVV8es9tbZLJ+0FsCNIPEYrnSs3QXKK9pqrHswxuqDKL1EWK38JLI3OAMoMadFbGt GGdg== X-Forwarded-Encrypted: i=1; AKwUvBw1OIqFyCQ81Gv3fmHmgczAYV2GzRG+hNC65JJ41L9ZiFjAHL7kTViqvCckLcXuCSEBw8ECETkIm3eZyQc=@vger.kernel.org X-Gm-Message-State: AFuF++lhWhy9lI5XomXBgco2A857Rmp8qQ5auC5C8dY7J28YrlJQWy7k DqZzbGmcxl+s+oJJ2z4Gl1t/tjEDr5CnHc0Ce8wsONONJgPLs/9uzpRSLOPNz7mW5ytGxXgobEa JozF3nA== X-Received: from pfjd1.prod.google.com ([2002:a05:6a00:2441:b0:847:a13f:28e2]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a00:4c8f:b0:84f:5cd7:e3c6 with SMTP id d2e1a72fcca58-861662d4ce4mr3977869b3a.5.1788481478472; Thu, 03 Sep 2026 17:24:38 -0700 (PDT) Reply-To: Sean Christopherson Date: Thu, 3 Sep 2026 17:24:17 -0700 In-Reply-To: <20260904002423.3154436-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: <20260904002423.3154436-1-seanjc@google.com> X-Mailer: git-send-email 2.55.0.979.g7e5102b832-goog Message-ID: <20260904002423.3154436-12-seanjc@google.com> Subject: [PATCH v4 11/17] 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.979.g7e5102b832-goog From nobody Fri Sep 4 05:20:08 2026 Received: from mail-pl1-f200.google.com (mail-pl1-f200.google.com [209.85.214.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 8A81B2E8897 for ; Fri, 4 Sep 2026 00:24:42 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.200 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788481484; cv=none; b=PNKo6RQlUSa2OTi2r1h590lbfuRtfIHCoF5Z2r7yP5JvGMdEBfg2hlOp4a43W9w77JLRd+M5ijhZOuaVT6f66mY3rpAYAjwUlw9h55Q33ne66c2OliokSe9w3lV32N8CsuLRb/ZrvAgHplRoI0URQ5jBbqPCHw4lQKEzB3ltX0E= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788481484; c=relaxed/simple; bh=aHwWoAXL6Rh4JcyNpSkn+QfPxM10FYDybagucr0UcI0=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=QSR34ctndzO/2j9r0R+tzpOSYBuAzuckkdKRXno46HMPSigGuywamEz052e1pTaLgvJBtvbbdYxJncfGl2eQLkplfJ4ekOG3164eb+48OTJySCApG7PbOAywonY9RStTzzww4r0ieSY8QOWIyV4o1cn86WWNW/urVCVn9bhThmg= 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=c+gJ7ocp; arc=none smtp.client-ip=209.85.214.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="c+gJ7ocp" Received: by mail-pl1-f200.google.com with SMTP id d9443c01a7336-2d7443e0f0bso6947115ad.1 for ; Thu, 03 Sep 2026 17:24:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1788481480; x=1789086280; 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=Tg/5+B1ZuTrkzw//MOyCVIR0C7JVEC7pdCYgG150qIo=; b=c+gJ7ocpxYIcxJPC9qXXvfgV29fR4gzVK+IwzsrHyw/oG8sJXtM8YNCgQOtN1qxlHt 1DIaXPsWno8Ke3LDA68TMcRuIrUdYGobsmsiDP2CZlXCb0jGBjDc5Gy37SAyX3HHkx50 xRuQO1OZtJga11diiOqkM4tCg7j9gK8UulT1cNq3i+/vjAvGClRRHLRBWIWhzRAjS7JF fypnoe1TMPV0eyquri+WUn64tKMKdSn/kBevDCFr+6pIDGMSVI8KP/3TOnQnHJsgmGnx g/Wgrhd7sO0bQ7fJttECVXbRH7MVACnmkiyvhXcptvXrRw4e96G/RR/xwje/uqLJ4fC7 gQ6g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788481480; x=1789086280; 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=Tg/5+B1ZuTrkzw//MOyCVIR0C7JVEC7pdCYgG150qIo=; b=QAVkiLvmDVKTzCtkyvBPqwhRN9oDOTy9XQNNgd9xwisyEgW/jh2CG46MSXHrgjBT6L Iph4KKkj/LwRSBsBPUiPNh8h0l+IcKofMC1TNmcPe+U30paNy/WbgaWCHQOnln2IcjYw yREfeRsDcjYDePzAD3loKE6BCMA2J7GJEF97JHtQXxhN3lQXX7sjUKDIPx+bKnTf+cIw MQHVng4Taz39EZ7pOWI1UiNe1xotnzFr4NGBdajEdziTVJTuUPhPRgqNmriIweQ6PZr+ 6ZMVbrRNA57kXbOiIQePd4QtzI5AMTHbNz4n02O6ne5eLaqkf2GuXBnOUxbvUehd1vAc bXZw== X-Forwarded-Encrypted: i=1; AKwUvBxmZ+B+4EQErGzz4mZT/CXmQuP4GpSlKYyPdjWs4tTJOIkDqypwaQ4z9G/DUywXeyai6jMczMLcAlyO0hY=@vger.kernel.org X-Gm-Message-State: AFuF++lROCBP46DBmIUbFqPaczXZlAbx+QbbjpJ82Whh0yDbW06mKvIE ghIQnRiqPOgMRUrrtvV9Fo7JSo+sQdvDPV5OG7dJ1Ghxaot4Q292ru0qdL66Sdqjv8lE5RQQhbP 6c7OK1w== X-Received: from plgq3.prod.google.com ([2002:a17:902:eb83:b0:2d6:eae9:3473]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a17:903:2f8f:b0:2d9:2fc9:5706 with SMTP id d9443c01a7336-2db12321cd9mr36362385ad.2.1788481479587; Thu, 03 Sep 2026 17:24:39 -0700 (PDT) Reply-To: Sean Christopherson Date: Thu, 3 Sep 2026 17:24:18 -0700 In-Reply-To: <20260904002423.3154436-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: <20260904002423.3154436-1-seanjc@google.com> X-Mailer: git-send-email 2.55.0.979.g7e5102b832-goog Message-ID: <20260904002423.3154436-13-seanjc@google.com> Subject: [PATCH v4 12/17] KVM: selftests: Drop dead return code from evmcs_vmptrld() and load_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" Drop the return codes from evmcs_vmptrld() and load_evmcs() as they are hardcoded to return '0' and "true" respectively. No functional change intended. Signed-off-by: Sean Christopherson --- tools/testing/selftests/kvm/include/x86/evmcs.h | 12 +++--------- .../selftests/kvm/x86/evmcs_smm_controls_test.c | 2 +- tools/testing/selftests/kvm/x86/hyperv_evmcs.c | 2 +- 3 files changed, 5 insertions(+), 11 deletions(-) diff --git a/tools/testing/selftests/kvm/include/x86/evmcs.h b/tools/testin= g/selftests/kvm/include/x86/evmcs.h index c5b9d26f6cdb..f18ebfb10ee0 100644 --- a/tools/testing/selftests/kvm/include/x86/evmcs.h +++ b/tools/testing/selftests/kvm/include/x86/evmcs.h @@ -245,24 +245,18 @@ static inline void evmcs_enable(void) enable_evmcs =3D true; } =20 -static inline int evmcs_vmptrld(u64 vmcs_pa, void *vmcs) +static inline void evmcs_vmptrld(u64 vmcs_pa, void *vmcs) { current_vp_assist->current_nested_vmcs =3D vmcs_pa; current_vp_assist->enlighten_vmentry =3D 1; =20 current_evmcs =3D vmcs; - - return 0; } =20 -static inline bool load_evmcs(struct hyperv_test_pages *hv) +static inline void load_evmcs(struct hyperv_test_pages *hv) { - if (evmcs_vmptrld(hv->enlightened_vmcs_gpa, hv->enlightened_vmcs)) - return false; - + evmcs_vmptrld(hv->enlightened_vmcs_gpa, hv->enlightened_vmcs); current_evmcs->revision_id =3D EVMCS_VERSION; - - return true; } =20 static inline int evmcs_vmread(u64 encoding, u64 *value) 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..5c0391f8a38d 100644 --- a/tools/testing/selftests/kvm/x86/evmcs_smm_controls_test.c +++ b/tools/testing/selftests/kvm/x86/evmcs_smm_controls_test.c @@ -56,7 +56,7 @@ static void guest_code(struct vmx_pages *vmx_pages, evmcs_enable(); =20 prepare_for_vmx_operation(vmx_pages); - GUEST_ASSERT(load_evmcs(hv_pages)); + load_evmcs(hv_pages); prepare_vmcs(vmx_pages, l2_guest_code); =20 GUEST_ASSERT(!vmlaunch()); diff --git a/tools/testing/selftests/kvm/x86/hyperv_evmcs.c b/tools/testing= /selftests/kvm/x86/hyperv_evmcs.c index d0e857b75a47..854b86c4be8a 100644 --- a/tools/testing/selftests/kvm/x86/hyperv_evmcs.c +++ b/tools/testing/selftests/kvm/x86/hyperv_evmcs.c @@ -95,7 +95,7 @@ void guest_code(struct vmx_pages *vmx_pages, struct hyper= v_test_pages *hv_pages, =20 prepare_for_vmx_operation(vmx_pages); GUEST_SYNC(3); - GUEST_ASSERT(load_evmcs(hv_pages)); + load_evmcs(hv_pages); /* VMPTRST returns -1 until VMLAUNCH with eVMCS ptr set */ GUEST_ASSERT(vmptrst() =3D=3D -1); =20 --=20 2.55.0.979.g7e5102b832-goog From nobody Fri Sep 4 05:20:08 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 E48F82DECD3 for ; Fri, 4 Sep 2026 00:24:41 +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=1788481484; cv=none; b=pSLGp3Bnl2aKLyXH71K5ra5DYC86NK9rsIWRmNgwkpXQ4UBDwf79L/QRWi95dPEs3PySjbb2Txw0FF00MhVKlWwxEU4DI+tLGrLucQGhDfh7dS86hkTRNyLsLKQ6d9XGIbnxeySnSSIqzqC34rAbGLrt5mOpz0/AmFvukYlHD2s= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788481484; c=relaxed/simple; bh=lOLkDhC+0jEEmaJA/kJ3+0nq2l0G4q+uHGVmRu7NGRo=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=k4xPzOG7UJHApH0maxX8s+5T8hpkjuFyI980GATMtZV+v+szt+HCWemePsBcKqHnHpWxGXV1yrqNQgqwc/cFBeZsKtnNa6AcXhn8ofvc9KDpx/jHSXJ8k/Xm7cppwO84e0UjHFY/+cscyJ9EGak+sy2RPDQ+aWvrDouDqwITiuc= 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=BhNDZMrt; 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="BhNDZMrt" Received: by mail-pl1-f199.google.com with SMTP id d9443c01a7336-2d6df0a1e18so7699025ad.1 for ; Thu, 03 Sep 2026 17:24:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1788481481; x=1789086281; 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=ldmCfKYtALnNcT6kPjdmhY8VFTLAAtrBH06PwWUQQDg=; b=BhNDZMrt6y6pj+f/M6ZqL5ZOby9XPobh/+CpccYQsIqaagm244Q3j3PkRIIKBhSVL1 gvynXcD37YIuotZEBKWQ5Kh+TGM6gqZI1w2IBXYJfTnMelsEGgB3B7yO+qqkupjZVwXg 05TEWfP+uPa8NjYMqkMN2Vm1EgfsBNA1lyOsGdeMIHJH3mGTsvy22v2OrTMwfi/I7GNC GzHbwL6OHPqf4ErFFlUgIHPSYN0ys4MvYjrWnphnSOgBZqO8R0wnQQPyvkDVsGJWutvi HJHuAAKzFmaOh4TyKKnrRYVjMTuK9MGfOxmWJJ5X6JfE2+wHt90kmcyyfJ4OAPMJMQhD Z6Bg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788481481; x=1789086281; 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=ldmCfKYtALnNcT6kPjdmhY8VFTLAAtrBH06PwWUQQDg=; b=d5AEZEmBqfwoUsrMT160SyZSAmpe7JxuOnMyqXgn/tchuZ1KCZS3F+tKH4fuGFDJei dMbv4x/YB8ZxstV/hUPO1GIieqckTEDutk+KhbFM1tHIWo+MISKsdSnPRdnDkFkw9AWx gVNgKFg2OkjGigAQZP8QcUfjpZdpADakgB71fMTetx8nG1w7DOu5PPDYuVdmRfwZ6jmF 2tuzwBDgE+ArFuh1/KaOXlLFCNPpIKKNOZl1e/A6W5BQgGQ/HMZ9l6HtBbd+jzsbFeRs PzcKE3XK6rxgN9I0AeXmr/qkcaA6RWFZp/nvRC/zU2wxzO2PCfqGYDzDTbQFE7LlI6rX nscg== X-Forwarded-Encrypted: i=1; AKwUvBwO4qiVd9lDHj1C8CsnzbeG4rkvjF0nqI+3DHaI1jA9i/pL/bScUMe/AZz+9n63dmbKyUr2xGcbz9nuA9s=@vger.kernel.org X-Gm-Message-State: AFuF++mRp3yKV1d7dq9TnCLuNb2CNqI+Qoe6dOJmQCDN3+LBoI+9U8Dv 7Ggm5OMsFwdSBS/zgEl/1+mdFCsOz3uIhVYnvEC9iqn5/3GerAu6i+poB2/3u2w2D/y0lCgrifY W/4QbAA== X-Received: from plww3.prod.google.com ([2002:a17:902:d103:b0:2ce:fa2c:7de3]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a17:902:a981:b0:2d8:de9f:9a44 with SMTP id d9443c01a7336-2db12879178mr27625465ad.19.1788481480684; Thu, 03 Sep 2026 17:24:40 -0700 (PDT) Reply-To: Sean Christopherson Date: Thu, 3 Sep 2026 17:24:19 -0700 In-Reply-To: <20260904002423.3154436-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: <20260904002423.3154436-1-seanjc@google.com> X-Mailer: git-send-email 2.55.0.979.g7e5102b832-goog Message-ID: <20260904002423.3154436-14-seanjc@google.com> Subject: [PATCH v4 13/17] 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 for VMLAUNCH vs. VMRESUME, for both architectural VMCS and eVMCS, as the difference is literally only the actual VM-Enter instruction for VMLAUNCH vs. VMRESUME, and VMWRITE vs. MOV for VMCS vs. eVMCS. Opportunistically place the implementations in vmx.c so that the lengthy sequence (~580 bytes of code) aren't inlined for every single VM-Enter. 000000000041b910 <__vmlaunch>: 41b910: 80 3d 61 5e 10 00 00 cmpb $0x0= ,0x105e61(%rip) # 521778 41b917: 0f 85 13 01 00 00 jne 41ba= 30 <__vmlaunch+0x120> 41b91d: ba 14 6c 00 00 mov $0x6= c14,%edx 41b922: b9 16 6c 00 00 mov $0x6= c16,%ecx 41b927: 6a 00 push $0x0 41b929: 0f 79 d4 vmwrite %rs= p,%rdx 41b92c: 48 8d 05 82 00 00 00 lea 0x82= (%rip),%rax # 41b9b5 <__vmlaunch+0xa5> 41b933: 0f 79 c8 vmwrite %ra= x,%rcx 41b9ae: 0f 01 c2 vmlaunch 41b9b1: 48 ff 04 24 incq (%rs= p) 41ba2d: 58 pop %rax 41ba2e: c3 ret 41ba2f: 90 nop 41ba30: 48 8b 35 39 5d 10 00 mov 0x10= 5d39(%rip),%rsi # 521770 41ba37: c7 86 38 03 00 00 00 00 00 00 movl $0x0= ,0x338(%rsi) 41ba41: 6a 00 push $0x0 41ba43: 48 89 a6 68 02 00 00 mov %rsp= ,0x268(%rsi) 41ba4a: 48 8d 05 83 00 00 00 lea 0x83= (%rip),%rax # 41bad4 <__vmlaunch+0x1c4> 41ba51: 48 89 46 50 mov %rax= ,0x50(%rsi) 41bacd: 0f 01 c2 vmlaunch 41bad0: 48 ff 04 24 incq (%rs= p) 41bb4c: 58 pop %rax 41bb4d: c3 ret No functional change intended (though the code generation will be quite different). Cc: Yosry Ahmed Signed-off-by: Sean Christopherson --- .../testing/selftests/kvm/include/x86/evmcs.h | 58 ------------------- tools/testing/selftests/kvm/include/x86/vmx.h | 47 ++------------- tools/testing/selftests/kvm/lib/x86/vmx.c | 55 ++++++++++++++++++ 3 files changed, 60 insertions(+), 100 deletions(-) diff --git a/tools/testing/selftests/kvm/include/x86/evmcs.h b/tools/testin= g/selftests/kvm/include/x86/evmcs.h index f18ebfb10ee0..491fb8107473 100644 --- a/tools/testing/selftests/kvm/include/x86/evmcs.h +++ b/tools/testing/selftests/kvm/include/x86/evmcs.h @@ -1187,62 +1187,4 @@ static inline int evmcs_vmwrite(u64 encoding, u64 va= lue) return 0; } =20 -static inline int evmcs_vmlaunch(void) -{ - int ret; - - current_evmcs->hv_clean_fields =3D 0; - - __asm__ __volatile__("push $0;" - "mov %%rsp, (%[host_rsp]);" - "lea 1f(%%rip), %%rax;" - "mov %%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)¤t_evmcs->host_rsp), - [host_rip]"r" - ((u64)¤t_evmcs->host_rip), - GUEST_REGS_OFFSETS - : "memory", "cc"); - return ret; -} - -/* - * No guest state (e.g. GPRs) is established by this vmresume. - */ -static inline int evmcs_vmresume(void) -{ - int ret; - - /* HOST_RIP */ - current_evmcs->hv_clean_fields &=3D ~HV_VMX_ENLIGHTENED_CLEAN_FIELD_HOST_= GRP1; - /* HOST_RSP */ - current_evmcs->hv_clean_fields &=3D ~HV_VMX_ENLIGHTENED_CLEAN_FIELD_HOST_= POINTER; - - __asm__ __volatile__("push $0;" - "mov %%rsp, (%[host_rsp]);" - "lea 1f(%%rip), %%rax;" - "mov %%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)¤t_evmcs->host_rsp), - [host_rip]"r" - ((u64)¤t_evmcs->host_rip), - GUEST_REGS_OFFSETS - : "memory", "cc"); - return ret; -} - #endif /* !SELFTEST_KVM_EVMCS_H */ diff --git a/tools/testing/selftests/kvm/include/x86/vmx.h b/tools/testing/= selftests/kvm/include/x86/vmx.h index 3def8df902a2..d0ac8e128d98 100644 --- a/tools/testing/selftests/kvm/include/x86/vmx.h +++ b/tools/testing/selftests/kvm/include/x86/vmx.h @@ -359,54 +359,17 @@ static inline u64 vmptrst(void) return value; } =20 +int __vmlaunch(void); +int __vmresume(void); + 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; + return __vmlaunch(); } =20 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; + return __vmresume(); } =20 static inline void vmcall(void) diff --git a/tools/testing/selftests/kvm/lib/x86/vmx.c b/tools/testing/self= tests/kvm/lib/x86/vmx.c index 5c6cadc08405..1a8515de42b0 100644 --- a/tools/testing/selftests/kvm/lib/x86/vmx.c +++ b/tools/testing/selftests/kvm/lib/x86/vmx.c @@ -179,6 +179,61 @@ void load_vmcs(struct vmx_pages *vmx) vmclear(vmx->shadow_vmcs_gpa); } =20 +#define __BUILD_VMX_VM_ENTRY_HELPER(insn, prefix, vmwrite_insn, vmwrite_op= erand, \ + __host_rsp, __host_rip) \ +static int __##prefix##_##insn(void) \ +{ \ + int ret; \ + \ + __asm__ __volatile__("push $0;" \ + __stringify(vmwrite_insn) " %%rsp, %[host_rsp];" \ + "lea 1f(%%rip), %%rax;" \ + __stringify(vmwrite_insn) " %%rax, %[host_rip];" \ + VMX_SWITCH_GPRS_ASM \ + __stringify(insn)";" \ + "incq (%%rsp);" \ + "1: ;" \ + VMX_SWITCH_GPRS_ASM \ + "pop %%rax;" \ + : [ret]"=3D&a"(ret) \ + : [host_rsp]__stringify(vmwrite_operand)(__host_rsp), \ + [host_rip]__stringify(vmwrite_operand)(__host_rip), \ + GUEST_REGS_OFFSETS \ + : "memory", "cc"); \ + return ret; \ +} + +#define BUILD_VMX_VM_ENTRY_HELPER(insn) \ + __BUILD_VMX_VM_ENTRY_HELPER(insn, _, vmwrite, r, (u64)HOST_RSP, (u64)HOST= _RIP) \ + __BUILD_VMX_VM_ENTRY_HELPER(insn, __evmcs, mov, m, \ + current_evmcs->host_rsp, current_evmcs->host_rip) + +BUILD_VMX_VM_ENTRY_HELPER(vmlaunch) +BUILD_VMX_VM_ENTRY_HELPER(vmresume) + +int __vmlaunch(void) +{ + if (enable_evmcs) { + current_evmcs->hv_clean_fields =3D 0; + return ____evmcs_vmlaunch(); + } + + return ____vmlaunch(); +} + +int __vmresume(void) +{ + if (enable_evmcs) { + /* HOST_RIP */ + current_evmcs->hv_clean_fields &=3D ~HV_VMX_ENLIGHTENED_CLEAN_FIELD_HOST= _GRP1; + /* HOST_RSP */ + current_evmcs->hv_clean_fields &=3D ~HV_VMX_ENLIGHTENED_CLEAN_FIELD_HOST= _POINTER; + return ____evmcs_vmresume(); + } + + return ____vmresume(); +} + static bool ept_vpid_cap_supported(u64 mask) { return rdmsr(MSR_IA32_VMX_EPT_VPID_CAP) & mask; --=20 2.55.0.979.g7e5102b832-goog From nobody Fri Sep 4 05:20:08 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 D18F62EEE89 for ; Fri, 4 Sep 2026 00:24:42 +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=1788481485; cv=none; b=XKQoaInW9NCFZg/Dox2Ql4JjbvIUr4LeSZhT5Rv+ZjgnuvyM86kP/Y2RZOw+BzV3bZKYUZp1iMFl+AkobnxMuCHMrU590mekgRz1oP/9OsrG1sO9ShUa81V0Y0mkemXUs/MCxulsWr3/EAPMUgtS0NYhHzFRFJzT+enwBWxmjWo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788481485; c=relaxed/simple; bh=lbe1U0KO5X5xOrefUC72Ym+R5BKPGg5F8swAkx4ngHQ=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=lyvDdTZcbGPFXEe2XJC7r7m9G0e1W4CuFwOK/U/ul97+AQzHp3zg/bXJKTN8Wzmhi6oguqyNaM+D1G9m+I3LOZ3SLN9axs+n7hE9jw140o93q4Ln/bMLVEv4bWPn3GI60XSk8mKXTbIawGnF9gszIsDFTLmlHj+9iYLFfFN2rIg= 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=NXfRDqnE; 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="NXfRDqnE" Received: by mail-pf1-f199.google.com with SMTP id d2e1a72fcca58-853d0d87123so259489b3a.1 for ; Thu, 03 Sep 2026 17:24:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1788481482; x=1789086282; 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=xI8imjf1MyoiMrMAgGjWPnXngkNAlqyamDaGrAEaebk=; b=NXfRDqnEc8Kn5LPd19wvfN/RXpMZcVCJWoRR7u/fXucAcGjMQfEG4QXzaWhlDPKFFI hIvMeV7ucV7SzoOpk18TEvBtYW+kD6YOs0tmtkRsj+/gfgh0c6JYFwKDo0c8ArcXeWe6 FNXyd3cvBj05fAm2fs+FXWspHjSR86cKcC1dT8Q8UsoOG2sg/JnlDPP0NKX2qxcvLg0a ORPgukm3+DyW39x8vdxE6L/ShYH7xGqtNtsjwU617jptlqASR4ii+03Xmo0camcXBHuA c6xtLX2pJFl3U+d4uDCWKUT6d932VcoFJO1YtsjSw+pPeMbC8FLWIQJKGk4UwXN/nV/t 4UOw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788481482; x=1789086282; 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=xI8imjf1MyoiMrMAgGjWPnXngkNAlqyamDaGrAEaebk=; b=LUMpWxz1LQIDJSLVsUTGNfuHMzz75Y8bFVx6womcxt+F0weCG2I6s395EeCtZDxJD+ CjGfQUD9pCZVhXkKsdnQV4D9f0vAdZ2jLWAQhgPql+/L3wDlWCBrIXJdJiWvWBsVYydw VfwyW5FR8kf7lrc35uVlT2mdtbbGIECXVoOOak7PHcDQtHeDgsPaoV0XiFSFm81cSw0t gCb9EJZejI9qPjjUJOVsb95jhrUmivGXP76G2UZLJHLvfoam9RKXy/jKuXZpeUzVowdA +3yEL2cxH2HTc7rDJ5jDDkP3/nGumCQCFdnYnovKWvpnM7cvb5yQ6Qx6NhxUyUy8OCmh RzpA== X-Forwarded-Encrypted: i=1; AKwUvBzBfRFKyaMWlo/e2WvIxS/fsE+nwxiBQqK4aLabjxTvAPIEWtTtwLg2rr3HddXOiz21g/CNg1H9VdHyYV4=@vger.kernel.org X-Gm-Message-State: AFuF++lAzTaKfWJa5VFA26DZfK0RPM/VFiKuprt5W48LpzQmRR033toM hjsDBu/U21Tj2dw8IqhFIE73861jYtSWJMlWhU7aeQ0xpuq9Pmjtl8QeV1RwiJal5c6kvjVeFaL bGOLtow== X-Received: from pfnv24.prod.google.com ([2002:aa7:8518:0:b0:84e:5c66:796c]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a00:2183:b0:857:7384:b5f9 with SMTP id d2e1a72fcca58-86169974910mr2760774b3a.21.1788481481879; Thu, 03 Sep 2026 17:24:41 -0700 (PDT) Reply-To: Sean Christopherson Date: Thu, 3 Sep 2026 17:24:20 -0700 In-Reply-To: <20260904002423.3154436-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: <20260904002423.3154436-1-seanjc@google.com> X-Mailer: git-send-email 2.55.0.979.g7e5102b832-goog Message-ID: <20260904002423.3154436-15-seanjc@google.com> Subject: [PATCH v4 14/17] KVM: selftests: Assert success in 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" Assert success in the "outer" APIs for VMLAUNCH and VMRESUME to dedup a pile of code, and switch to the double-underscores versions as necessary, to make it more obvious which paths expect VM-Enter *failure*. Signed-off-by: Sean Christopherson --- tools/testing/selftests/kvm/include/x86/vmx.h | 8 +++---- .../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 | 5 +++- .../kvm/x86/nested_exceptions_test.c | 5 +++- .../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, 57 insertions(+), 51 deletions(-) diff --git a/tools/testing/selftests/kvm/include/x86/vmx.h b/tools/testing/= selftests/kvm/include/x86/vmx.h index d0ac8e128d98..1419043b41dd 100644 --- a/tools/testing/selftests/kvm/include/x86/vmx.h +++ b/tools/testing/selftests/kvm/include/x86/vmx.h @@ -362,14 +362,14 @@ static inline u64 vmptrst(void) int __vmlaunch(void); int __vmresume(void); =20 -static inline int vmlaunch(void) +static inline void vmlaunch(void) { - return __vmlaunch(); + __GUEST_ASSERT(!__vmlaunch(), "vmlaunch hit VM-Fail"); } =20 -static inline int vmresume(void) +static inline void vmresume(void) { - return __vmresume(); + __GUEST_ASSERT(!__vmresume(), "vmresume hit VM-Fail"); } =20 static inline void vmcall(void) 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 5c0391f8a38d..4a65eb02349c 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, 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 854b86c4be8a..bb31c1aa51bf 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..51e2f7e386c1 100644 --- a/tools/testing/selftests/kvm/x86/nested_emulation_test.c +++ b/tools/testing/selftests/kvm/x86/nested_emulation_test.c @@ -102,7 +102,10 @@ 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); + if (!i) + vmlaunch(); + else + vmresume(); 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..031eb84229dc 100644 --- a/tools/testing/selftests/kvm/x86/nested_exceptions_test.c +++ b/tools/testing/selftests/kvm/x86/nested_exceptions_test.c @@ -112,7 +112,10 @@ static void vmx_run_l2(void *l2_code, int vector, u32 = error_code) { GUEST_ASSERT(!vmwrite(GUEST_RIP, (u64)l2_code)); =20 - GUEST_ASSERT_EQ(vector =3D=3D SS_VECTOR ? vmlaunch() : vmresume(), 0); + if (vector =3D=3D SS_VECTOR) + vmlaunch(); + else + 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.979.g7e5102b832-goog From nobody Fri Sep 4 05:20:08 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 0C650298991 for ; Fri, 4 Sep 2026 00:24:43 +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=1788481486; cv=none; b=iYU8lT6/8lsGXKcCfrpmEInYu6JGdszmMbUxIrItzwnyX/sA1XwDjfu1rIFv+rM5UjhnrjTiAc6i2XkunOD2VORIcHmDShz1F0DObowmD6+81YMA4RKKIYNuXB9WMno5vMGgiAN11TqUjRn7Tfg2DFaQ0/vzjjKVRE+U22myZnM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788481486; c=relaxed/simple; bh=vgXQFuBJ0c3qC6re8no35X7E/n7kKg/3QaAVG1RR6lM=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=pSy5Tm9BYhhb4wo6p0rILWeVq+f8/PsmnQxkok0Zw+IFDNfqgKGQB1TNx8UfY6lz/BKUG9vmeTW5ktv3ivlIccfH9cmVnxiCZCGTDHi89cFd+64cqppJ6yUBfRlW0Lvr2L9aTU+W4mjpYqytwKW6W84hwi1nFlAV6NvXwOKvljQ= 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=q3J+wWjs; 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="q3J+wWjs" Received: by mail-pf1-f197.google.com with SMTP id d2e1a72fcca58-85722fc5a21so515408b3a.2 for ; Thu, 03 Sep 2026 17:24:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1788481483; x=1789086283; 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=8ag8bpeoUZOOSbjWNaS/zDOOv3tyyAmOLhY6BO17Mks=; b=q3J+wWjs3H40orhptjf8giQ6V7S/F2L8+QfTR9QUSKDPmYvlZJMVKJJYv+aSDaubsc 702Dlaj7DADOwQsDzmKFFARrmh9q8u2U9rPF5ehRk+FNSuPh5x+3/sIMG+CKJCKONCIC lEWYcS4J5f58w6YrORmxDHIXLFgwrij8hIRThG46HYJuas3Sbj4duRq2VQqF28b5TzEz dZpQDRABg52LN6aImNzRPJiNGru7LsQWvWlcv46pclwZkWGtonZAofrPwlu6hVGKAPvt qB1/iOe0lymf10vZUsDKYzX/AvG23Z7cpA6SQbpzFWEiTiKqijUURIs5/DiF7CX9J02n KNug== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788481483; x=1789086283; 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=8ag8bpeoUZOOSbjWNaS/zDOOv3tyyAmOLhY6BO17Mks=; b=SpH6/GkOmDfoQHTsNed/sxbqx45BmqLJ2E/VFIOS3RzFXl/O+XLF4JJLPCdTU+B0X+ YOVwHq1jHBoYZc4D9L+PP4BkAIapoTlJZrqgMTLHJLI/L2joD1g9jSAoO3lVm7gM84Ey SsN8ExeJeVprrbkqbZIvtrwHQppTv4MU3MCSPBbmbS/NyJmBnfxtJrNFRhQ8fwsNKxIr bv+mhMmOmV9PCs8DF+0n5p+k9p7x4Lno/CUVIOJloGedK3XnlBurOOQ+81uNBRU9rJFC d1PaTs1ac59F7HGZRDsOEHesthx9oBnjusvkWuyPLPTAEDj3qJTblwZ4KwTN8a5/E5n8 BUQQ== X-Forwarded-Encrypted: i=1; AKwUvByuP0Xsm7CEwJeCL6h1VhdWVyXOm7ZUuBL7j0f4hjOOO1GmP4Kt8WlVi21v9k853T2wbld99vi+XvlNE6M=@vger.kernel.org X-Gm-Message-State: AFuF++k/1bBMa8sYqi7rdIqlK/posBuZEOUbEb5Ll61J5DJUYKtWSo4K zPptXfTDgj9SFDtmltNSJCpDnnwrffRQOAeRLgRZnfbhybWlAifEfm0BNSyDCzHRJcNCAMzpfkA 28aenNg== X-Received: from pfcg1.prod.google.com ([2002:a05:6a00:23c1:b0:848:7fd6:7dec]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a00:8d8d:b0:855:eb7b:5804 with SMTP id d2e1a72fcca58-861662d4c0fmr3948705b3a.4.1788481483050; Thu, 03 Sep 2026 17:24:43 -0700 (PDT) Reply-To: Sean Christopherson Date: Thu, 3 Sep 2026 17:24:21 -0700 In-Reply-To: <20260904002423.3154436-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: <20260904002423.3154436-1-seanjc@google.com> X-Mailer: git-send-email 2.55.0.979.g7e5102b832-goog Message-ID: <20260904002423.3154436-16-seanjc@google.com> Subject: [PATCH v4 15/17] KVM: selftests: Add __vmwrite() and use it when initializing optional fields. 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 __vmwrite() in anticipation of having vmwrite() assert success, and use the "failure allowed" version in the common VMCS setup code, which is the only code that wants to write fields that may or may not exist (although arguably the code should check if the field exists instead of blindly writing). E.g. When doing initial configuration of a VMCS, the core library doesn't want to assume secondary controls are supported, and so blindly does a VMWRITE and pivots on success/failure. All usage of vmwrite() outside of common setup already asserts success, or 100% relies on VMWRITE succeeding in order for the test to function correctly. No functional change intended. Signed-off-by: Sean Christopherson --- tools/testing/selftests/kvm/include/x86/vmx.h | 7 ++++++- tools/testing/selftests/kvm/lib/x86/vmx.c | 18 +++++++++--------- 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/tools/testing/selftests/kvm/include/x86/vmx.h b/tools/testing/= selftests/kvm/include/x86/vmx.h index 1419043b41dd..40111db580a8 100644 --- a/tools/testing/selftests/kvm/include/x86/vmx.h +++ b/tools/testing/selftests/kvm/include/x86/vmx.h @@ -414,7 +414,7 @@ static inline u64 vmreadz(u64 encoding) return value; } =20 -static inline int vmwrite(u64 encoding, u64 value) +static __always_inline int __vmwrite(u64 encoding, u64 value) { u8 ret; =20 @@ -429,6 +429,11 @@ static inline int vmwrite(u64 encoding, u64 value) return ret; } =20 +static inline int vmwrite(u64 encoding, u64 value) +{ + return __vmwrite(encoding, value); +} + static inline u32 vmcs_revision(void) { return rdmsr(MSR_IA32_VMX_BASIC); diff --git a/tools/testing/selftests/kvm/lib/x86/vmx.c b/tools/testing/self= tests/kvm/lib/x86/vmx.c index 1a8515de42b0..b6bd9423e676 100644 --- a/tools/testing/selftests/kvm/lib/x86/vmx.c +++ b/tools/testing/selftests/kvm/lib/x86/vmx.c @@ -252,7 +252,7 @@ static inline void init_vmcs_control_fields(struct vmx_= pages *vmx) u32 sec_exec_ctl =3D 0; =20 vmwrite(VIRTUAL_PROCESSOR_ID, 0); - vmwrite(POSTED_INTR_NV, 0); + __vmwrite(POSTED_INTR_NV, 0); =20 vmwrite(PIN_BASED_VM_EXEC_CONTROL, rdmsr(MSR_IA32_VMX_TRUE_PINBASED_CTLS)= ); =20 @@ -269,7 +269,7 @@ static inline void init_vmcs_control_fields(struct vmx_= pages *vmx) sec_exec_ctl |=3D SECONDARY_EXEC_ENABLE_EPT; } =20 - if (!vmwrite(SECONDARY_VM_EXEC_CONTROL, sec_exec_ctl)) + if (!__vmwrite(SECONDARY_VM_EXEC_CONTROL, sec_exec_ctl)) vmwrite(CPU_BASED_VM_EXEC_CONTROL, rdmsr(MSR_IA32_VMX_TRUE_PROCBASED_CTLS) | CPU_BASED_ACTIVATE_SECONDARY_= CONTROLS); else { @@ -289,16 +289,16 @@ static inline void init_vmcs_control_fields(struct vm= x_pages *vmx) VM_ENTRY_IA32E_MODE); /* 64-bit guest */ vmwrite(VM_ENTRY_MSR_LOAD_COUNT, 0); vmwrite(VM_ENTRY_INTR_INFO_FIELD, 0); - vmwrite(TPR_THRESHOLD, 0); + __vmwrite(TPR_THRESHOLD, 0); =20 vmwrite(CR0_GUEST_HOST_MASK, 0); vmwrite(CR4_GUEST_HOST_MASK, 0); vmwrite(CR0_READ_SHADOW, get_cr0()); vmwrite(CR4_READ_SHADOW, get_cr4()); =20 - vmwrite(MSR_BITMAP, vmx->msr_gpa); - vmwrite(VMREAD_BITMAP, vmx->vmread_gpa); - vmwrite(VMWRITE_BITMAP, vmx->vmwrite_gpa); + __vmwrite(MSR_BITMAP, vmx->msr_gpa); + __vmwrite(VMREAD_BITMAP, vmx->vmread_gpa); + __vmwrite(VMWRITE_BITMAP, vmx->vmwrite_gpa); } =20 /* @@ -356,8 +356,8 @@ static inline void init_vmcs_guest_state(void *rip, voi= d *rsp) vmwrite(GUEST_GS_SELECTOR, vmreadz(HOST_GS_SELECTOR)); vmwrite(GUEST_LDTR_SELECTOR, 0); vmwrite(GUEST_TR_SELECTOR, vmreadz(HOST_TR_SELECTOR)); - vmwrite(GUEST_INTR_STATUS, 0); - vmwrite(GUEST_PML_INDEX, 0); + __vmwrite(GUEST_INTR_STATUS, 0); + __vmwrite(GUEST_PML_INDEX, 0); =20 vmwrite(VMCS_LINK_POINTER, -1ll); vmwrite(GUEST_IA32_DEBUGCTL, 0); @@ -391,7 +391,7 @@ static inline void init_vmcs_guest_state(void *rip, voi= d *rsp) vmwrite(GUEST_INTERRUPTIBILITY_INFO, 0); vmwrite(GUEST_ACTIVITY_STATE, 0); vmwrite(GUEST_SYSENTER_CS, vmreadz(HOST_IA32_SYSENTER_CS)); - vmwrite(VMX_PREEMPTION_TIMER_VALUE, 0); + __vmwrite(VMX_PREEMPTION_TIMER_VALUE, 0); =20 vmwrite(GUEST_CR0, vmreadz(HOST_CR0)); vmwrite(GUEST_CR3, vmreadz(HOST_CR3)); --=20 2.55.0.979.g7e5102b832-goog From nobody Fri Sep 4 05:20:08 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 00DF72EEE75 for ; Fri, 4 Sep 2026 00:24:44 +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=1788481487; cv=none; b=IVHvIBGzrwBOGr58jVZP4Z1UpOLwXloFZc4mwm0ktTMjXKZOncjhVD3wBzHrWAmU+kz0+3rKyFvXFKIMQJ3qLlqJ1Ax7XzNh7I+oFjTv6bce4t81yKycAu+EVZ9VzTmlBDRsQndL5tAFbkDrnuvGxWSdkelTxDpBb6CE8rMKSMc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788481487; c=relaxed/simple; bh=JROQpRJndZZZP209SuX2wjyaL8u5hx8u19eSloFQfmU=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=N+tGMRluNWUtsBzyl/SYp/OaqvDBIjlDst9OKMfHAqsTw8L4P7BxuQxxN4oSlYlYoGABqmwyrH8PMinKpMAy3wBy9uYyEZgfnbnRgZvygNow3Uqv8Tw+eLL3WiNBI6M4xrrP8+cGxrKRzv/Wxo/TvgVsUhLpu/Qg7JBgkUujj0U= 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=q+lYFkFE; 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="q+lYFkFE" Received: by mail-pg1-f200.google.com with SMTP id 41be03b00d2f7-cc1bbd7d6e6so614774a12.3 for ; Thu, 03 Sep 2026 17:24:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1788481484; x=1789086284; 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=8DzzgIr+0cObo03tv5BPb8/ieIObvKNOGQaJvCJlMNs=; b=q+lYFkFEsK84al204dJeuuzKt0C9HVf1x8jbaG0oIm0jyVCKCi1JFxRmoh2Vbshvjq ZOEXxuSl/i6i9xO17WtnPoODxUI01b0meR5e8HYV/zF2A3aCsAtbpAZvCJFLmyHzQXkJ 88THCnR7CBvegnXh2PC+xjFFXHMbFFg3N+x8GK3qXgzfnSEZZ3WrGOLi+Ybx9NzAvDgr O8EPuY1Lv0QBplZduDI5ab/zYNcTM4bEtw1ArANfDQJmSjhzA+xGh5ZrtKrmPXEZHT4D Lr+O2b8x0rsYyrCn4lsZZ8ECpVDiy73QOKo9RHGO4RLPDNrLOpMLBynRAkwgX5WFK9pR fvvg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788481484; x=1789086284; 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=8DzzgIr+0cObo03tv5BPb8/ieIObvKNOGQaJvCJlMNs=; b=rUw4YIrtQfFyACf5PpeyYSsPJRQC/T2aSFl4+4wwrmy5rSPXL+QcqYnoRsxZIma54L bf/+iYu5v3V9i0lY9EHwvl8RTOWJibgQHNAH9tGLD2JtQrq2tZAiawllxM3pLY9/tEYw Up7z6ntuDk/QLB6Zfk3iqQRCNNODLSpD/4B7I/7BGkCsuS6HzJJJkcrBgvj5J5zGe0Lb 3qXD/UDAmtGsrlmEdkLJ0yUY6ukMjR4arnF65x8FcSYLl760CH47fnOGKVDy5lfjoOqb Ur6vDPNExOiU/eTaPwX8d7HWpb1xVEJzFb5LlAXx6li+wP8FHDapNXcDNnI/46K7cNtb YEmA== X-Forwarded-Encrypted: i=1; AKwUvByEP7iyoo4UN9nIQ8pdvHaKE3zZtRK7g/q947BZb955sVfPzDFv4jSUr1rO86tgvsAlIPX9ew+/tJctIv4=@vger.kernel.org X-Gm-Message-State: AFuF++lj6qJQOcnHI0FhcTlzyG9jrSnFjmonM6Jxa58CsG56/5YLmKLE i/D036snNTlPU60cWvemUpKd64bbJL7TL4YCaW2Q0BNs/zrdEAhhRK7J9mbR9nBgZplAJCUoozX uM6OSQA== X-Received: from pgee1.prod.google.com ([2002:a63:1e01:0:b0:cc4:31fa:cb70]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a20:450f:b0:3d1:ae83:6fc2 with SMTP id adf61e73a8af0-3da39d2824amr3452857637.9.1788481484209; Thu, 03 Sep 2026 17:24:44 -0700 (PDT) Reply-To: Sean Christopherson Date: Thu, 3 Sep 2026 17:24:22 -0700 In-Reply-To: <20260904002423.3154436-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: <20260904002423.3154436-1-seanjc@google.com> X-Mailer: git-send-email 2.55.0.979.g7e5102b832-goog Message-ID: <20260904002423.3154436-17-seanjc@google.com> Subject: [PATCH v4 16/17] KVM: selftests: Always assert that vmwrite() 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 vmwrite() succeeds instead of forcing all callers to do the same (or as is much more common, ignoring VM-Fail and likely letting the test fail in weird ways), opportunistically provide a more verbose error message on failure. All usage of vmwrite() "guarantees" success, either because the field in question is unconditionally emulated by KVM, by virtue of earlier support checks, or by falling over (later in the test) if the VMWRITE fails. Cc: Yosry Ahmed Signed-off-by: Sean Christopherson --- tools/testing/selftests/kvm/include/x86/vmx.h | 5 +++-- tools/testing/selftests/kvm/x86/aperfmperf_test.c | 2 +- tools/testing/selftests/kvm/x86/kvm_buslock_test.c | 2 +- .../testing/selftests/kvm/x86/nested_emulation_test.c | 6 +++--- .../testing/selftests/kvm/x86/nested_exceptions_test.c | 10 +++++----- .../selftests/kvm/x86/save_restore_pf_stress_test.c | 2 +- tools/testing/selftests/kvm/x86/state_test.c | 4 ++-- .../selftests/kvm/x86/vmx_preemption_timer_test.c | 8 +++----- 8 files changed, 19 insertions(+), 20 deletions(-) diff --git a/tools/testing/selftests/kvm/include/x86/vmx.h b/tools/testing/= selftests/kvm/include/x86/vmx.h index 40111db580a8..be10028c51b9 100644 --- a/tools/testing/selftests/kvm/include/x86/vmx.h +++ b/tools/testing/selftests/kvm/include/x86/vmx.h @@ -429,9 +429,10 @@ static __always_inline int __vmwrite(u64 encoding, u64= value) return ret; } =20 -static inline int vmwrite(u64 encoding, u64 value) +static inline void vmwrite(u64 encoding, u64 value) { - return __vmwrite(encoding, value); + __GUEST_ASSERT(!__vmwrite(encoding, value), + "vmwrite[0x%lx] =3D 0x%lx hit VM-Fail", encoding, value); } =20 static inline u32 vmcs_revision(void) diff --git a/tools/testing/selftests/kvm/x86/aperfmperf_test.c b/tools/test= ing/selftests/kvm/x86/aperfmperf_test.c index a082658c1e48..7761a8bdf5f6 100644 --- a/tools/testing/selftests/kvm/x86/aperfmperf_test.c +++ b/tools/testing/selftests/kvm/x86/aperfmperf_test.c @@ -82,7 +82,7 @@ static void l1_vmx_code(struct vmx_pages *vmx) vmwrite(CPU_BASED_VM_EXEC_CONTROL, vmreadz(CPU_BASED_VM_EXEC_CONTROL) | CPU_BASED_USE_MSR_BITMAPS); =20 - GUEST_ASSERT(!vmwrite(GUEST_RIP, (u64)l2_guest_code)); + vmwrite(GUEST_RIP, (u64)l2_guest_code); vmlaunch(); } =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 337d3c28bc6d..e1d2730b16ba 100644 --- a/tools/testing/selftests/kvm/x86/kvm_buslock_test.c +++ b/tools/testing/selftests/kvm/x86/kvm_buslock_test.c @@ -47,7 +47,7 @@ static void l1_vmx_code(struct vmx_pages *vmx) =20 prepare_vmcs(vmx, NULL); =20 - GUEST_ASSERT(!vmwrite(GUEST_RIP, (u64)l2_guest_code)); + vmwrite(GUEST_RIP, (u64)l2_guest_code); vmlaunch(); } =20 diff --git a/tools/testing/selftests/kvm/x86/nested_emulation_test.c b/tool= s/testing/selftests/kvm/x86/nested_emulation_test.c index 51e2f7e386c1..009932b1604e 100644 --- a/tools/testing/selftests/kvm/x86/nested_emulation_test.c +++ b/tools/testing/selftests/kvm/x86/nested_emulation_test.c @@ -70,9 +70,9 @@ static void guest_code(void *test_data) load_vmcs(test_data); =20 prepare_vmcs(test_data, NULL); - GUEST_ASSERT(!vmwrite(GUEST_IDTR_LIMIT, 0)); - GUEST_ASSERT(!vmwrite(GUEST_RIP, (u64)l2_guest_code)); - GUEST_ASSERT(!vmwrite(EXCEPTION_BITMAP, 0)); + vmwrite(GUEST_IDTR_LIMIT, 0); + vmwrite(GUEST_RIP, (u64)l2_guest_code); + vmwrite(EXCEPTION_BITMAP, 0); =20 vmwrite(CPU_BASED_VM_EXEC_CONTROL, vmreadz(CPU_BASED_VM_EXEC_CONTROL) | CPU_BASED_PAUSE_EXITING | diff --git a/tools/testing/selftests/kvm/x86/nested_exceptions_test.c b/too= ls/testing/selftests/kvm/x86/nested_exceptions_test.c index 031eb84229dc..d0beaa7b280b 100644 --- a/tools/testing/selftests/kvm/x86/nested_exceptions_test.c +++ b/tools/testing/selftests/kvm/x86/nested_exceptions_test.c @@ -110,7 +110,7 @@ static void l1_svm_code(struct svm_test_data *svm) =20 static void vmx_run_l2(void *l2_code, int vector, u32 error_code) { - GUEST_ASSERT(!vmwrite(GUEST_RIP, (u64)l2_code)); + vmwrite(GUEST_RIP, (u64)l2_code); =20 if (vector =3D=3D SS_VECTOR) vmlaunch(); @@ -133,21 +133,21 @@ static void l1_vmx_code(struct vmx_pages *vmx) load_vmcs(vmx); =20 prepare_vmcs(vmx, NULL); - GUEST_ASSERT_EQ(vmwrite(GUEST_IDTR_LIMIT, 0), 0); + vmwrite(GUEST_IDTR_LIMIT, 0); =20 /* * VMX disallows injecting an exception with error_code[31:16] !=3D 0, * and hardware will never generate a VM-Exit with bits 31:16 set. * KVM should likewise truncate the "bad" userspace value. */ - GUEST_ASSERT_EQ(vmwrite(EXCEPTION_BITMAP, INTERCEPT_SS_GP_DF), 0); + vmwrite(EXCEPTION_BITMAP, INTERCEPT_SS_GP_DF); vmx_run_l2(l2_ss_pending_test, SS_VECTOR, (u16)SS_ERROR_CODE); vmx_run_l2(l2_ss_injected_gp_test, GP_VECTOR, GP_ERROR_CODE_INTEL); =20 - GUEST_ASSERT_EQ(vmwrite(EXCEPTION_BITMAP, INTERCEPT_SS_DF), 0); + vmwrite(EXCEPTION_BITMAP, INTERCEPT_SS_DF); vmx_run_l2(l2_ss_injected_df_test, DF_VECTOR, DF_ERROR_CODE); =20 - GUEST_ASSERT_EQ(vmwrite(EXCEPTION_BITMAP, INTERCEPT_SS), 0); + vmwrite(EXCEPTION_BITMAP, INTERCEPT_SS); vmx_run_l2(l2_ss_injected_tf_test, FAKE_TRIPLE_FAULT_VECTOR, 0); GUEST_ASSERT_EQ(vmreadz(VM_EXIT_REASON), EXIT_REASON_TRIPLE_FAULT); =20 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 f88427e925fc..e728f040916f 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 @@ -102,7 +102,7 @@ static void l1_vmx_code(struct vmx_pages *vmx) load_vmcs(vmx); prepare_vmcs(vmx, guest_access_memory); =20 - GUEST_ASSERT(!vmwrite(EXCEPTION_BITMAP, BIT(UD_VECTOR))); + vmwrite(EXCEPTION_BITMAP, BIT(UD_VECTOR)); =20 vmlaunch(); while (1) { diff --git a/tools/testing/selftests/kvm/x86/state_test.c b/tools/testing/s= elftests/kvm/x86/state_test.c index 38c9689ac601..7cb1d160e2d9 100644 --- a/tools/testing/selftests/kvm/x86/state_test.c +++ b/tools/testing/selftests/kvm/x86/state_test.c @@ -62,10 +62,10 @@ void vmx_l2_guest_code(void) GUEST_ASSERT(vmreadz(GUEST_RIP) =3D=3D 0xc0ffee); GUEST_SYNC(10); GUEST_ASSERT(vmreadz(GUEST_RIP) =3D=3D 0xc0ffee); - GUEST_ASSERT(!vmwrite(GUEST_RIP, 0xc0fffee)); + vmwrite(GUEST_RIP, 0xc0fffee); GUEST_SYNC(11); GUEST_ASSERT(vmreadz(GUEST_RIP) =3D=3D 0xc0fffee); - GUEST_ASSERT(!vmwrite(GUEST_RIP, 0xc0ffffee)); + vmwrite(GUEST_RIP, 0xc0ffffee); GUEST_SYNC(12); =20 /* Done, exit to L1 and never come back. */ 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 cda53df33888..c5f9d9879f61 100644 --- a/tools/testing/selftests/kvm/x86/vmx_preemption_timer_test.c +++ b/tools/testing/selftests/kvm/x86/vmx_preemption_timer_test.c @@ -97,12 +97,10 @@ void l1_guest_code(struct vmx_pages *vmx_pages) /* * Turn on PIN control and resume the guest */ - GUEST_ASSERT(!vmwrite(PIN_BASED_VM_EXEC_CONTROL, - vmreadz(PIN_BASED_VM_EXEC_CONTROL) | - PIN_BASED_VMX_PREEMPTION_TIMER)); + vmwrite(PIN_BASED_VM_EXEC_CONTROL, + vmreadz(PIN_BASED_VM_EXEC_CONTROL) | PIN_BASED_VMX_PREEMPTION_TIMER); =20 - GUEST_ASSERT(!vmwrite(VMX_PREEMPTION_TIMER_VALUE, - PREEMPTION_TIMER_VALUE)); + vmwrite(VMX_PREEMPTION_TIMER_VALUE, PREEMPTION_TIMER_VALUE); =20 vmx_pt_rate =3D rdmsr(MSR_IA32_VMX_MISC) & 0x1F; =20 --=20 2.55.0.979.g7e5102b832-goog From nobody Fri Sep 4 05:20:08 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 7DB9A327C13 for ; Fri, 4 Sep 2026 00:24:46 +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=1788481490; cv=none; b=i/UFujsR7OCrg5Y3Ft7r2k/g2JTqDz65YXtmdPyjh2oE+9D9npuFdv7YH3+RquHClUbt2zCifL6luTuP0gCjr37F1/QyOBd/3DdkGA4In6xSk2tZFyI8gphRA8YxnODmiekyrJyx71Gr3Hft8YSeqc4CcY454fkvfNuK3GwO6yw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788481490; c=relaxed/simple; bh=nIh+VB4EjbMHRVZbj5aW5Kwq70HSg9OREbwMKl7LPSo=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=O6MfWwiHxHi+00a0HVLEUanwM34D/sSw8bZlu+/78qQg09qqOTAnVy7fDRY3jPaqLKmDRfcRXcmbBgIX0atqfOHqdGaVL2e7zCKccUW9rrTgTMCQ46g8U2jmDYjEJnAsi8FoI69BaChaRSpyT0vVnyLrx8Ph9WAQ74IfVtMQ6Ug= 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=j2gO1rD7; 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="j2gO1rD7" Received: by mail-pf1-f198.google.com with SMTP id d2e1a72fcca58-85722fc5a21so515465b3a.2 for ; Thu, 03 Sep 2026 17:24:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1788481486; x=1789086286; 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=fobeK2AzEKwQOMdkiKT8N96SjHDY9A8YvJp1nlyUn/I=; b=j2gO1rD7YEE/Y5RgVZt6hkgg/s8+pZkRJ+4Q5+0iQtBpRIsn4/xeQfwd0QmpM4zh6a BUP6w42MfaL8bzpAVBbs+sU5qlhET3uWWOdJlBPZcDcdSpAbDLXKP6m4I7zFqV+wJVbo +oA1ps6rJzasbSQ1FfiE3+pzah2e64pOVeUk2OgqA0SoWu0Q1Nm2L2mpBqgh/uUjUS3n 0h5SXKdasojUbcorVvGRW+Lc7NE9uMp020TNyfpEqGY5ux6l+b1i4CzCrnSHhJf2qFhE ZVpYWF8urZib2S/FxLuJJqWsIhwZHhr8OBvfheIt4S3pm2dCeJrNRLdsMVfPCo+Rl9JU B9zg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788481486; x=1789086286; 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=fobeK2AzEKwQOMdkiKT8N96SjHDY9A8YvJp1nlyUn/I=; b=dhN1oViHurHnTWCNSTkn+IjSVwBJeg4YPX8QJKi2gvQGT9WylP8+Bbkz+hRLNWMKEn +YUNiWdb/uhS0hC9yXQhTVENhpSny33kwinfjPjiujQSsp9hL1PpWgAPsycrK6mvTmqr DP6oRQLjUH/vwzQH6OC0REbygkXYPucuUpcMEZ+puAiMolDXQBJ1ewwRr62Dl0iyP6nG GJhwTFHBgGsYc0I+2qXosvwdvzMZp9pZOMxbEaN+ONmY9aySmPiAt2oq9edkwfOlgVKy FrQEJjxceWhM+yGZT/fOuRlMOY7M/+n+q+9q9U/gmZbVq4cueAJYmtimOXk6LjtRkg8j Jgqw== X-Forwarded-Encrypted: i=1; AKwUvBwTYJi6gUyOoyby/Fw0zkarTz1OXYguHJ8wCcLt5aCsYfdFaV/tNHHa8A5L4PLSAYmX7OLhgtQhWNCEZ/U=@vger.kernel.org X-Gm-Message-State: AFuF++k/5kao0fmCDR2jTWEG3O+q15IaMfmI8wEYype4qt3vo80R8mzj 2WF/xi5L6VBWJpplwiswjP6IbX/WYPe2hslhELQ96kzSw1o8+eNcEW/vJq1llD/tcJ3hyFYSpXc wjniKNA== X-Received: from pfblc11.prod.google.com ([2002:a05:6a00:4f4b:b0:84e:2062:2edb]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a00:4290:b0:85c:2d83:bbf1 with SMTP id d2e1a72fcca58-86168e8bc6emr3427066b3a.20.1788481485393; Thu, 03 Sep 2026 17:24:45 -0700 (PDT) Reply-To: Sean Christopherson Date: Thu, 3 Sep 2026 17:24:23 -0700 In-Reply-To: <20260904002423.3154436-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: <20260904002423.3154436-1-seanjc@google.com> X-Mailer: git-send-email 2.55.0.979.g7e5102b832-goog Message-ID: <20260904002423.3154436-18-seanjc@google.com> Subject: [PATCH v4 17/17] KVM: selftests: Always assert that vmreadz() 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" Rename vmreadz() =3D> vmread() (and vmread() =3D> __vmread()) and have it assert success instead of returning garbage on failure. While the eVMCS path avoids clobbering *value on failure, the VMREAD path unconditionally stores tmp to *value, without ever zeroing tmp. I.e. if VMREAD did fail, *value would be loaded with random stack data, not '0'. An audit of the code confirms that nothing is actually relying on vmreadz() to zero the result on failure, as all paths either check for a non-zero value, propagate the result into vmwrite(), or guard the vmread() with a pre-check that the field exists. Opportunistically fix the bug in what is now __vmread(), so that the code isn't consuming uninitialized stack data. Begrudgingly keep zeroing value in vmread(), as gcc-15 at least isn't smart enough to figure out that value won't be used uninitialized (though to be fair, strictly speaking it isn't actually unreachable code). Signed-off-by: Sean Christopherson --- tools/testing/selftests/kvm/include/x86/vmx.h | 15 +++--- .../testing/selftests/kvm/lib/x86/memstress.c | 2 +- tools/testing/selftests/kvm/lib/x86/vmx.c | 52 +++++++++---------- .../selftests/kvm/x86/aperfmperf_test.c | 2 +- .../testing/selftests/kvm/x86/hyperv_evmcs.c | 24 ++++----- .../selftests/kvm/x86/nested_dirty_log_test.c | 2 +- .../selftests/kvm/x86/nested_emulation_test.c | 8 +-- .../kvm/x86/nested_exceptions_test.c | 10 ++-- .../kvm/x86/nested_invalid_cr3_test.c | 6 +-- .../selftests/kvm/x86/nested_tdp_fault_test.c | 10 ++-- .../kvm/x86/nested_tsc_adjust_test.c | 4 +- .../kvm/x86/nested_tsc_scaling_test.c | 6 +-- .../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 | 12 ++--- .../kvm/x86/vmx_apicv_updates_test.c | 8 +-- .../kvm/x86/vmx_invalid_nested_guest_state.c | 6 +-- .../kvm/x86/vmx_nested_la57_state_test.c | 4 +- .../kvm/x86/vmx_preemption_timer_test.c | 8 +-- 20 files changed, 104 insertions(+), 105 deletions(-) diff --git a/tools/testing/selftests/kvm/include/x86/vmx.h b/tools/testing/= selftests/kvm/include/x86/vmx.h index be10028c51b9..a4807e41fe69 100644 --- a/tools/testing/selftests/kvm/include/x86/vmx.h +++ b/tools/testing/selftests/kvm/include/x86/vmx.h @@ -386,7 +386,7 @@ static inline void vmcall(void) "r10", "r11", "r12", "r13", "r14", "r15"); } =20 -static inline int vmread(u64 encoding, u64 *value) +static inline int __vmread(u64 encoding, u64 *value) { u64 tmp; u8 ret; @@ -399,18 +399,17 @@ static inline int vmread(u64 encoding, u64 *value) : [encoding]"r"(encoding) : "cc", "memory"); =20 - *value =3D tmp; + if (!ret) + *value =3D tmp; return ret; } =20 -/* - * A wrapper around vmread that ignores errors and returns zero if the - * vmread instruction fails. - */ -static inline u64 vmreadz(u64 encoding) +static inline u64 vmread(u64 encoding) { u64 value =3D 0; - vmread(encoding, &value); + + __GUEST_ASSERT(!__vmread(encoding, &value), + "vmwread[0x%lx] hit VM-Fail", encoding); return value; } =20 diff --git a/tools/testing/selftests/kvm/lib/x86/memstress.c b/tools/testin= g/selftests/kvm/lib/x86/memstress.c index 6a1815fb97e9..9bfea36144a7 100644 --- a/tools/testing/selftests/kvm/lib/x86/memstress.c +++ b/tools/testing/selftests/kvm/lib/x86/memstress.c @@ -41,7 +41,7 @@ static void l1_vmx_code(struct vmx_pages *vmx, u64 vcpu_i= d) prepare_vmcs(vmx, memstress_l2_guest_entry); =20 vmlaunch(); - GUEST_ASSERT_EQ(vmreadz(VM_EXIT_REASON), EXIT_REASON_VMCALL); + GUEST_ASSERT_EQ(vmread(VM_EXIT_REASON), EXIT_REASON_VMCALL); GUEST_DONE(); } =20 diff --git a/tools/testing/selftests/kvm/lib/x86/vmx.c b/tools/testing/self= tests/kvm/lib/x86/vmx.c index b6bd9423e676..9c752739c6c7 100644 --- a/tools/testing/selftests/kvm/lib/x86/vmx.c +++ b/tools/testing/selftests/kvm/lib/x86/vmx.c @@ -308,7 +308,7 @@ static inline void init_vmcs_control_fields(struct vmx_= pages *vmx) */ static inline void init_vmcs_host_state(void) { - u32 exit_controls =3D vmreadz(VM_EXIT_CONTROLS); + u32 exit_controls =3D vmread(VM_EXIT_CONTROLS); =20 vmwrite(HOST_ES_SELECTOR, get_es()); vmwrite(HOST_CS_SELECTOR, get_cs()); @@ -348,23 +348,23 @@ static inline void init_vmcs_host_state(void) */ static inline void init_vmcs_guest_state(void *rip, void *rsp) { - vmwrite(GUEST_ES_SELECTOR, vmreadz(HOST_ES_SELECTOR)); - vmwrite(GUEST_CS_SELECTOR, vmreadz(HOST_CS_SELECTOR)); - vmwrite(GUEST_SS_SELECTOR, vmreadz(HOST_SS_SELECTOR)); - vmwrite(GUEST_DS_SELECTOR, vmreadz(HOST_DS_SELECTOR)); - vmwrite(GUEST_FS_SELECTOR, vmreadz(HOST_FS_SELECTOR)); - vmwrite(GUEST_GS_SELECTOR, vmreadz(HOST_GS_SELECTOR)); + vmwrite(GUEST_ES_SELECTOR, vmread(HOST_ES_SELECTOR)); + vmwrite(GUEST_CS_SELECTOR, vmread(HOST_CS_SELECTOR)); + vmwrite(GUEST_SS_SELECTOR, vmread(HOST_SS_SELECTOR)); + vmwrite(GUEST_DS_SELECTOR, vmread(HOST_DS_SELECTOR)); + vmwrite(GUEST_FS_SELECTOR, vmread(HOST_FS_SELECTOR)); + vmwrite(GUEST_GS_SELECTOR, vmread(HOST_GS_SELECTOR)); vmwrite(GUEST_LDTR_SELECTOR, 0); - vmwrite(GUEST_TR_SELECTOR, vmreadz(HOST_TR_SELECTOR)); + vmwrite(GUEST_TR_SELECTOR, vmread(HOST_TR_SELECTOR)); __vmwrite(GUEST_INTR_STATUS, 0); __vmwrite(GUEST_PML_INDEX, 0); =20 vmwrite(VMCS_LINK_POINTER, -1ll); vmwrite(GUEST_IA32_DEBUGCTL, 0); - vmwrite(GUEST_IA32_PAT, vmreadz(HOST_IA32_PAT)); - vmwrite(GUEST_IA32_EFER, vmreadz(HOST_IA32_EFER)); + vmwrite(GUEST_IA32_PAT, vmread(HOST_IA32_PAT)); + vmwrite(GUEST_IA32_EFER, vmread(HOST_IA32_EFER)); vmwrite(GUEST_IA32_PERF_GLOBAL_CTRL, - vmreadz(HOST_IA32_PERF_GLOBAL_CTRL)); + vmread(HOST_IA32_PERF_GLOBAL_CTRL)); =20 vmwrite(GUEST_ES_LIMIT, -1); vmwrite(GUEST_CS_LIMIT, -1); @@ -377,42 +377,42 @@ static inline void init_vmcs_guest_state(void *rip, v= oid *rsp) vmwrite(GUEST_GDTR_LIMIT, 0xffff); vmwrite(GUEST_IDTR_LIMIT, 0xffff); vmwrite(GUEST_ES_AR_BYTES, - vmreadz(GUEST_ES_SELECTOR) =3D=3D 0 ? 0x10000 : 0xc093); + vmread(GUEST_ES_SELECTOR) =3D=3D 0 ? 0x10000 : 0xc093); vmwrite(GUEST_CS_AR_BYTES, 0xa09b); vmwrite(GUEST_SS_AR_BYTES, 0xc093); vmwrite(GUEST_DS_AR_BYTES, - vmreadz(GUEST_DS_SELECTOR) =3D=3D 0 ? 0x10000 : 0xc093); + vmread(GUEST_DS_SELECTOR) =3D=3D 0 ? 0x10000 : 0xc093); vmwrite(GUEST_FS_AR_BYTES, - vmreadz(GUEST_FS_SELECTOR) =3D=3D 0 ? 0x10000 : 0xc093); + vmread(GUEST_FS_SELECTOR) =3D=3D 0 ? 0x10000 : 0xc093); vmwrite(GUEST_GS_AR_BYTES, - vmreadz(GUEST_GS_SELECTOR) =3D=3D 0 ? 0x10000 : 0xc093); + vmread(GUEST_GS_SELECTOR) =3D=3D 0 ? 0x10000 : 0xc093); vmwrite(GUEST_LDTR_AR_BYTES, 0x10000); vmwrite(GUEST_TR_AR_BYTES, 0x8b); vmwrite(GUEST_INTERRUPTIBILITY_INFO, 0); vmwrite(GUEST_ACTIVITY_STATE, 0); - vmwrite(GUEST_SYSENTER_CS, vmreadz(HOST_IA32_SYSENTER_CS)); + vmwrite(GUEST_SYSENTER_CS, vmread(HOST_IA32_SYSENTER_CS)); __vmwrite(VMX_PREEMPTION_TIMER_VALUE, 0); =20 - vmwrite(GUEST_CR0, vmreadz(HOST_CR0)); - vmwrite(GUEST_CR3, vmreadz(HOST_CR3)); - vmwrite(GUEST_CR4, vmreadz(HOST_CR4)); + vmwrite(GUEST_CR0, vmread(HOST_CR0)); + vmwrite(GUEST_CR3, vmread(HOST_CR3)); + vmwrite(GUEST_CR4, vmread(HOST_CR4)); vmwrite(GUEST_ES_BASE, 0); vmwrite(GUEST_CS_BASE, 0); vmwrite(GUEST_SS_BASE, 0); vmwrite(GUEST_DS_BASE, 0); - vmwrite(GUEST_FS_BASE, vmreadz(HOST_FS_BASE)); - vmwrite(GUEST_GS_BASE, vmreadz(HOST_GS_BASE)); + vmwrite(GUEST_FS_BASE, vmread(HOST_FS_BASE)); + vmwrite(GUEST_GS_BASE, vmread(HOST_GS_BASE)); vmwrite(GUEST_LDTR_BASE, 0); - vmwrite(GUEST_TR_BASE, vmreadz(HOST_TR_BASE)); - vmwrite(GUEST_GDTR_BASE, vmreadz(HOST_GDTR_BASE)); - vmwrite(GUEST_IDTR_BASE, vmreadz(HOST_IDTR_BASE)); + vmwrite(GUEST_TR_BASE, vmread(HOST_TR_BASE)); + vmwrite(GUEST_GDTR_BASE, vmread(HOST_GDTR_BASE)); + vmwrite(GUEST_IDTR_BASE, vmread(HOST_IDTR_BASE)); vmwrite(GUEST_DR7, 0x400); vmwrite(GUEST_RSP, (u64)rsp); vmwrite(GUEST_RIP, (u64)rip); vmwrite(GUEST_RFLAGS, X86_EFLAGS_FIXED); vmwrite(GUEST_PENDING_DBG_EXCEPTIONS, 0); - vmwrite(GUEST_SYSENTER_ESP, vmreadz(HOST_IA32_SYSENTER_ESP)); - vmwrite(GUEST_SYSENTER_EIP, vmreadz(HOST_IA32_SYSENTER_EIP)); + vmwrite(GUEST_SYSENTER_ESP, vmread(HOST_IA32_SYSENTER_ESP)); + vmwrite(GUEST_SYSENTER_EIP, vmread(HOST_IA32_SYSENTER_EIP)); } =20 void prepare_vmcs(struct vmx_pages *vmx, void *guest_rip) diff --git a/tools/testing/selftests/kvm/x86/aperfmperf_test.c b/tools/test= ing/selftests/kvm/x86/aperfmperf_test.c index 7761a8bdf5f6..1ca6495a446f 100644 --- a/tools/testing/selftests/kvm/x86/aperfmperf_test.c +++ b/tools/testing/selftests/kvm/x86/aperfmperf_test.c @@ -80,7 +80,7 @@ static void l1_vmx_code(struct vmx_pages *vmx) * in the VMCS by prepare_vmcs()), as MSR exiting mandatory on Intel. */ vmwrite(CPU_BASED_VM_EXEC_CONTROL, - vmreadz(CPU_BASED_VM_EXEC_CONTROL) | CPU_BASED_USE_MSR_BITMAPS); + vmread(CPU_BASED_VM_EXEC_CONTROL) | CPU_BASED_USE_MSR_BITMAPS); =20 vmwrite(GUEST_RIP, (u64)l2_guest_code); vmlaunch(); diff --git a/tools/testing/selftests/kvm/x86/hyperv_evmcs.c b/tools/testing= /selftests/kvm/x86/hyperv_evmcs.c index bb31c1aa51bf..32c5de890ba7 100644 --- a/tools/testing/selftests/kvm/x86/hyperv_evmcs.c +++ b/tools/testing/selftests/kvm/x86/hyperv_evmcs.c @@ -109,7 +109,7 @@ void guest_code(struct vmx_pages *vmx_pages, struct hyp= erv_test_pages *hv_pages, current_evmcs->revision_id =3D EVMCS_VERSION; GUEST_SYNC(6); =20 - vmwrite(PIN_BASED_VM_EXEC_CONTROL, vmreadz(PIN_BASED_VM_EXEC_CONTROL) | + vmwrite(PIN_BASED_VM_EXEC_CONTROL, vmread(PIN_BASED_VM_EXEC_CONTROL) | PIN_BASED_NMI_EXITING); =20 /* L2 TLB flush setup */ @@ -121,8 +121,8 @@ void guest_code(struct vmx_pages *vmx_pages, struct hyp= erv_test_pages *hv_pages, *(u32 *)(hv_pages->partition_assist) =3D 0; =20 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_EQ(vmread(VM_EXIT_REASON), EXIT_REASON_EXCEPTION_NMI); + GUEST_ASSERT_EQ((vmread(VM_EXIT_INTR_INFO) & 0xff), NMI_VECTOR); GUEST_ASSERT(vmptrst() =3D=3D hv_pages->enlightened_vmcs_gpa); =20 /* @@ -134,21 +134,21 @@ void guest_code(struct vmx_pages *vmx_pages, struct h= yperv_test_pages *hv_pages, =20 GUEST_SYNC(10); =20 - GUEST_ASSERT(vmreadz(VM_EXIT_REASON) =3D=3D EXIT_REASON_VMCALL); + GUEST_ASSERT(vmread(VM_EXIT_REASON) =3D=3D EXIT_REASON_VMCALL); current_evmcs->guest_rip +=3D 3; /* vmcall */ =20 /* Intercept RDMSR 0xc0000100 */ - vmwrite(CPU_BASED_VM_EXEC_CONTROL, vmreadz(CPU_BASED_VM_EXEC_CONTROL) | + vmwrite(CPU_BASED_VM_EXEC_CONTROL, vmread(CPU_BASED_VM_EXEC_CONTROL) | CPU_BASED_USE_MSR_BITMAPS); __set_bit(MSR_FS_BASE & 0x1fff, vmx_pages->msr + 0x400); vmresume(); - GUEST_ASSERT(vmreadz(VM_EXIT_REASON) =3D=3D EXIT_REASON_MSR_READ); + GUEST_ASSERT(vmread(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; vmresume(); - GUEST_ASSERT(vmreadz(VM_EXIT_REASON) =3D=3D EXIT_REASON_MSR_READ); + GUEST_ASSERT(vmread(VM_EXIT_REASON) =3D=3D EXIT_REASON_MSR_READ); current_evmcs->guest_rip +=3D 2; /* rdmsr */ =20 /* Intercept RDMSR 0xc0000101 without telling KVM about it */ @@ -157,13 +157,13 @@ void guest_code(struct vmx_pages *vmx_pages, struct h= yperv_test_pages *hv_pages, current_evmcs->hv_clean_fields |=3D HV_VMX_ENLIGHTENED_CLEAN_FIELD_MSR_BI= TMAP; 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); + GUEST_ASSERT(vmread(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; vmresume(); - GUEST_ASSERT(vmreadz(VM_EXIT_REASON) =3D=3D EXIT_REASON_MSR_READ); + GUEST_ASSERT(vmread(VM_EXIT_REASON) =3D=3D EXIT_REASON_MSR_READ); current_evmcs->guest_rip +=3D 2; /* rdmsr */ =20 /* @@ -171,15 +171,15 @@ void guest_code(struct vmx_pages *vmx_pages, struct h= yperv_test_pages *hv_pages, * no VMCALL exit expected. */ vmresume(); - GUEST_ASSERT(vmreadz(VM_EXIT_REASON) =3D=3D EXIT_REASON_MSR_READ); + GUEST_ASSERT(vmread(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; vmresume(); - GUEST_ASSERT(vmreadz(VM_EXIT_REASON) =3D=3D HV_VMX_SYNTHETIC_EXIT_REASON_= TRAP_AFTER_FLUSH); + GUEST_ASSERT(vmread(VM_EXIT_REASON) =3D=3D HV_VMX_SYNTHETIC_EXIT_REASON_T= RAP_AFTER_FLUSH); =20 vmresume(); - GUEST_ASSERT(vmreadz(VM_EXIT_REASON) =3D=3D EXIT_REASON_VMCALL); + GUEST_ASSERT(vmread(VM_EXIT_REASON) =3D=3D EXIT_REASON_VMCALL); GUEST_SYNC(11); =20 /* VMPTRLD instruction causes #UD after enlightened VMLAUNCH */ 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 7987ce50c382..7e5f9ae1cb00 100644 --- a/tools/testing/selftests/kvm/x86/nested_dirty_log_test.c +++ b/tools/testing/selftests/kvm/x86/nested_dirty_log_test.c @@ -106,7 +106,7 @@ void l1_vmx_code(struct vmx_pages *vmx) GUEST_SYNC(TEST_SYNC_NO_FAULT); vmlaunch(); GUEST_SYNC(TEST_SYNC_NO_FAULT); - GUEST_ASSERT_EQ(vmreadz(VM_EXIT_REASON), EXIT_REASON_VMCALL); + GUEST_ASSERT_EQ(vmread(VM_EXIT_REASON), EXIT_REASON_VMCALL); GUEST_DONE(); } =20 diff --git a/tools/testing/selftests/kvm/x86/nested_emulation_test.c b/tool= s/testing/selftests/kvm/x86/nested_emulation_test.c index 009932b1604e..68d9ce9dc6ba 100644 --- a/tools/testing/selftests/kvm/x86/nested_emulation_test.c +++ b/tools/testing/selftests/kvm/x86/nested_emulation_test.c @@ -74,7 +74,7 @@ static void guest_code(void *test_data) vmwrite(GUEST_RIP, (u64)l2_guest_code); vmwrite(EXCEPTION_BITMAP, 0); =20 - vmwrite(CPU_BASED_VM_EXEC_CONTROL, vmreadz(CPU_BASED_VM_EXEC_CONTROL) | + vmwrite(CPU_BASED_VM_EXEC_CONTROL, vmread(CPU_BASED_VM_EXEC_CONTROL) | CPU_BASED_PAUSE_EXITING | CPU_BASED_HLT_EXITING); } @@ -106,9 +106,9 @@ static void guest_code(void *test_data) vmlaunch(); else vmresume(); - 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); + exit_reason =3D vmread(VM_EXIT_REASON); + exit_insn_len =3D vmread(VM_EXIT_INSTRUCTION_LEN); + GUEST_ASSERT_EQ(vmread(GUEST_RIP), (u64)l2_instruction); } =20 __GUEST_ASSERT(exit_reason =3D=3D insn->exit_reason[f], diff --git a/tools/testing/selftests/kvm/x86/nested_exceptions_test.c b/too= ls/testing/selftests/kvm/x86/nested_exceptions_test.c index d0beaa7b280b..d23e24f35790 100644 --- a/tools/testing/selftests/kvm/x86/nested_exceptions_test.c +++ b/tools/testing/selftests/kvm/x86/nested_exceptions_test.c @@ -120,10 +120,10 @@ static void vmx_run_l2(void *l2_code, int vector, u32= error_code) if (vector =3D=3D FAKE_TRIPLE_FAULT_VECTOR) return; =20 - GUEST_ASSERT_EQ(vmreadz(VM_EXIT_REASON), EXIT_REASON_EXCEPTION_NMI); - GUEST_ASSERT_EQ((vmreadz(VM_EXIT_INTR_INFO) & 0xff), vector); - GUEST_ASSERT_EQ(vmreadz(VM_EXIT_INTR_ERROR_CODE), error_code); - GUEST_ASSERT(!vmreadz(GUEST_INTERRUPTIBILITY_INFO)); + GUEST_ASSERT_EQ(vmread(VM_EXIT_REASON), EXIT_REASON_EXCEPTION_NMI); + GUEST_ASSERT_EQ((vmread(VM_EXIT_INTR_INFO) & 0xff), vector); + GUEST_ASSERT_EQ(vmread(VM_EXIT_INTR_ERROR_CODE), error_code); + GUEST_ASSERT(!vmread(GUEST_INTERRUPTIBILITY_INFO)); } =20 static void l1_vmx_code(struct vmx_pages *vmx) @@ -149,7 +149,7 @@ static void l1_vmx_code(struct vmx_pages *vmx) =20 vmwrite(EXCEPTION_BITMAP, INTERCEPT_SS); vmx_run_l2(l2_ss_injected_tf_test, FAKE_TRIPLE_FAULT_VECTOR, 0); - GUEST_ASSERT_EQ(vmreadz(VM_EXIT_REASON), EXIT_REASON_TRIPLE_FAULT); + GUEST_ASSERT_EQ(vmread(VM_EXIT_REASON), EXIT_REASON_TRIPLE_FAULT); =20 GUEST_DONE(); } 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 101c1fe79eeb..6e147826bc90 100644 --- a/tools/testing/selftests/kvm/x86/nested_invalid_cr3_test.c +++ b/tools/testing/selftests/kvm/x86/nested_invalid_cr3_test.c @@ -46,16 +46,16 @@ static void l1_vmx_code(struct vmx_pages *vmx_pages) prepare_vmcs(vmx_pages, l2_guest_code); =20 /* Try to run L2 with invalid CR3 and make sure it fails */ - save_cr3 =3D vmreadz(GUEST_CR3); + save_cr3 =3D vmread(GUEST_CR3); vmwrite(GUEST_CR3, -1ull); vmlaunch(); - GUEST_ASSERT(vmreadz(VM_EXIT_REASON) =3D=3D + GUEST_ASSERT(vmread(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); vmlaunch(); - GUEST_ASSERT(vmreadz(VM_EXIT_REASON) =3D=3D EXIT_REASON_VMCALL); + GUEST_ASSERT(vmread(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 d6c443e3d147..fae77d843b13 100644 --- a/tools/testing/selftests/kvm/x86/nested_tdp_fault_test.c +++ b/tools/testing/selftests/kvm/x86/nested_tdp_fault_test.c @@ -63,17 +63,17 @@ static void l1_vmx_code(struct vmx_pages *vmx, u64 expe= cted_fault_gpa, vmlaunch(); =20 /* Verify we got an EPT violation exit */ - __GUEST_ASSERT(vmreadz(VM_EXIT_REASON) =3D=3D EXIT_REASON_EPT_VIOLATION, + __GUEST_ASSERT(vmread(VM_EXIT_REASON) =3D=3D EXIT_REASON_EPT_VIOLATION, "Expected EPT violation (0x%x), got 0x%lx", EXIT_REASON_EPT_VIOLATION, - vmreadz(VM_EXIT_REASON)); + vmread(VM_EXIT_REASON)); =20 - __GUEST_ASSERT(vmreadz(GUEST_PHYSICAL_ADDRESS) =3D=3D expected_fault_gpa, + __GUEST_ASSERT(vmread(GUEST_PHYSICAL_ADDRESS) =3D=3D expected_fault_gpa, "Expected guest_physical_address =3D 0x%lx, got 0x%lx", expected_fault_gpa, - vmreadz(GUEST_PHYSICAL_ADDRESS)); + vmread(GUEST_PHYSICAL_ADDRESS)); =20 - exit_qual =3D vmreadz(EXIT_QUALIFICATION); + exit_qual =3D vmread(EXIT_QUALIFICATION); =20 /* * Note, EPT page table accesses are always read+write, e.g. so that 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 c60dea899624..6a1a88e926f8 100644 --- a/tools/testing/selftests/kvm/x86/nested_tsc_adjust_test.c +++ b/tools/testing/selftests/kvm/x86/nested_tsc_adjust_test.c @@ -90,13 +90,13 @@ static void l1_guest_code(void *data) load_vmcs(vmx_pages); =20 prepare_vmcs(vmx_pages, l2_guest_code); - control =3D vmreadz(CPU_BASED_VM_EXEC_CONTROL); + control =3D vmread(CPU_BASED_VM_EXEC_CONTROL); control |=3D CPU_BASED_USE_MSR_BITMAPS | CPU_BASED_USE_TSC_OFFSETTING; vmwrite(CPU_BASED_VM_EXEC_CONTROL, control); vmwrite(TSC_OFFSET, TSC_OFFSET_VALUE); =20 vmlaunch(); - GUEST_ASSERT(vmreadz(VM_EXIT_REASON) =3D=3D EXIT_REASON_VMCALL); + GUEST_ASSERT(vmread(VM_EXIT_REASON) =3D=3D EXIT_REASON_VMCALL); } else { struct svm_test_data *svm =3D data; =20 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 b2fc7f0b5b3c..c763f4cf0f62 100644 --- a/tools/testing/selftests/kvm/x86/nested_tsc_scaling_test.c +++ b/tools/testing/selftests/kvm/x86/nested_tsc_scaling_test.c @@ -112,11 +112,11 @@ static void l1_vmx_code(struct vmx_pages *vmx_pages) prepare_vmcs(vmx_pages, l2_guest_code); =20 /* enable TSC offsetting and TSC scaling for L2 */ - control =3D vmreadz(CPU_BASED_VM_EXEC_CONTROL); + control =3D vmread(CPU_BASED_VM_EXEC_CONTROL); control |=3D CPU_BASED_USE_MSR_BITMAPS | CPU_BASED_USE_TSC_OFFSETTING; vmwrite(CPU_BASED_VM_EXEC_CONTROL, control); =20 - control =3D vmreadz(SECONDARY_VM_EXEC_CONTROL); + control =3D vmread(SECONDARY_VM_EXEC_CONTROL); control |=3D SECONDARY_EXEC_TSC_SCALING; vmwrite(SECONDARY_VM_EXEC_CONTROL, control); =20 @@ -126,7 +126,7 @@ static void l1_vmx_code(struct vmx_pages *vmx_pages) =20 /* launch L2 */ vmlaunch(); - GUEST_ASSERT(vmreadz(VM_EXIT_REASON) =3D=3D EXIT_REASON_VMCALL); + GUEST_ASSERT(vmread(VM_EXIT_REASON) =3D=3D EXIT_REASON_VMCALL); =20 /* check that L1's frequency still looks good */ check_tsc_freq(UCHECK_L1); 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 e728f040916f..24056921110c 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 @@ -106,8 +106,8 @@ static void l1_vmx_code(struct vmx_pages *vmx) =20 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_EQ(vmread(VM_EXIT_REASON), EXIT_REASON_EXCEPTION_NMI); + GUEST_ASSERT_EQ(vmread(VM_EXIT_INTR_INFO) & 0xff, UD_VECTOR); vmresume(); } } diff --git a/tools/testing/selftests/kvm/x86/state_test.c b/tools/testing/s= elftests/kvm/x86/state_test.c index 7cb1d160e2d9..75e09d5e03eb 100644 --- a/tools/testing/selftests/kvm/x86/state_test.c +++ b/tools/testing/selftests/kvm/x86/state_test.c @@ -59,12 +59,12 @@ void vmx_l2_guest_code(void) vmcall(); =20 /* L1 has now set up a shadow VMCS for us. */ - GUEST_ASSERT(vmreadz(GUEST_RIP) =3D=3D 0xc0ffee); + GUEST_ASSERT(vmread(GUEST_RIP) =3D=3D 0xc0ffee); GUEST_SYNC(10); - GUEST_ASSERT(vmreadz(GUEST_RIP) =3D=3D 0xc0ffee); + GUEST_ASSERT(vmread(GUEST_RIP) =3D=3D 0xc0ffee); vmwrite(GUEST_RIP, 0xc0fffee); GUEST_SYNC(11); - GUEST_ASSERT(vmreadz(GUEST_RIP) =3D=3D 0xc0fffee); + GUEST_ASSERT(vmread(GUEST_RIP) =3D=3D 0xc0fffee); vmwrite(GUEST_RIP, 0xc0ffffee); GUEST_SYNC(12); =20 @@ -89,21 +89,21 @@ static void vmx_l1_guest_code(struct vmx_pages *vmx_pag= es) GUEST_ASSERT(vmptrst() =3D=3D vmx_pages->vmcs_gpa); vmlaunch(); GUEST_ASSERT(vmptrst() =3D=3D vmx_pages->vmcs_gpa); - GUEST_ASSERT(vmreadz(VM_EXIT_REASON) =3D=3D EXIT_REASON_VMCALL); + GUEST_ASSERT(vmread(VM_EXIT_REASON) =3D=3D EXIT_REASON_VMCALL); =20 /* Check that the launched state is preserved. */ GUEST_ASSERT(__vmlaunch()); =20 vmresume(); - GUEST_ASSERT(vmreadz(VM_EXIT_REASON) =3D=3D EXIT_REASON_VMCALL); + GUEST_ASSERT(vmread(VM_EXIT_REASON) =3D=3D EXIT_REASON_VMCALL); =20 GUEST_SYNC(7); - GUEST_ASSERT(vmreadz(VM_EXIT_REASON) =3D=3D EXIT_REASON_VMCALL); + GUEST_ASSERT(vmread(VM_EXIT_REASON) =3D=3D EXIT_REASON_VMCALL); =20 vmresume(); - GUEST_ASSERT(vmreadz(VM_EXIT_REASON) =3D=3D EXIT_REASON_VMCALL); + GUEST_ASSERT(vmread(VM_EXIT_REASON) =3D=3D EXIT_REASON_VMCALL); =20 - vmwrite(GUEST_RIP, vmreadz(GUEST_RIP) + 3); + vmwrite(GUEST_RIP, vmread(GUEST_RIP) + 3); =20 vmwrite(SECONDARY_VM_EXEC_CONTROL, SECONDARY_EXEC_SHADOW_VMCS); vmwrite(VMCS_LINK_POINTER, vmx_pages->shadow_vmcs_gpa); @@ -116,18 +116,18 @@ static void vmx_l1_guest_code(struct vmx_pages *vmx_p= ages) =20 vmwrite(GUEST_RIP, 0xc0ffee); GUEST_SYNC(9); - GUEST_ASSERT(vmreadz(GUEST_RIP) =3D=3D 0xc0ffee); + GUEST_ASSERT(vmread(GUEST_RIP) =3D=3D 0xc0ffee); =20 vmptrld(vmx_pages->vmcs_gpa); vmresume(); - GUEST_ASSERT(vmreadz(VM_EXIT_REASON) =3D=3D EXIT_REASON_VMCALL); + GUEST_ASSERT(vmread(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(vmread(GUEST_RIP) =3D=3D 0xc0ffffee); GUEST_ASSERT(__vmlaunch()); GUEST_ASSERT(__vmresume()); GUEST_SYNC(13); - GUEST_ASSERT(vmreadz(GUEST_RIP) =3D=3D 0xc0ffffee); + GUEST_ASSERT(vmread(GUEST_RIP) =3D=3D 0xc0ffffee); GUEST_ASSERT(__vmlaunch()); GUEST_ASSERT(__vmresume()); } 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 bb31a1ba8932..b2b796fd9ffb 100644 --- a/tools/testing/selftests/kvm/x86/triple_fault_event_test.c +++ b/tools/testing/selftests/kvm/x86/triple_fault_event_test.c @@ -32,7 +32,7 @@ void l1_guest_code_vmx(struct vmx_pages *vmx) =20 vmlaunch(); /* L2 should triple fault after a triple fault event injected. */ - GUEST_ASSERT(vmreadz(VM_EXIT_REASON) =3D=3D EXIT_REASON_TRIPLE_FAULT); + GUEST_ASSERT(vmread(VM_EXIT_REASON) =3D=3D EXIT_REASON_TRIPLE_FAULT); GUEST_DONE(); } =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 fe29c869a235..d6373c414d18 100644 --- a/tools/testing/selftests/kvm/x86/vmx_apic_access_test.c +++ b/tools/testing/selftests/kvm/x86/vmx_apic_access_test.c @@ -43,25 +43,25 @@ static void l1_guest_code(struct vmx_pages *vmx_pages, = unsigned long high_gpa) =20 /* Prepare the VMCS for L2 execution. */ prepare_vmcs(vmx_pages, l2_guest_code); - control =3D vmreadz(CPU_BASED_VM_EXEC_CONTROL); + control =3D vmread(CPU_BASED_VM_EXEC_CONTROL); control |=3D CPU_BASED_ACTIVATE_SECONDARY_CONTROLS; vmwrite(CPU_BASED_VM_EXEC_CONTROL, control); - control =3D vmreadz(SECONDARY_VM_EXEC_CONTROL); + control =3D vmread(SECONDARY_VM_EXEC_CONTROL); control |=3D SECONDARY_EXEC_VIRTUALIZE_APIC_ACCESSES; vmwrite(SECONDARY_VM_EXEC_CONTROL, control); vmwrite(APIC_ACCESS_ADDR, vmx_pages->apic_access_gpa); =20 /* Try to launch L2 with the memory-backed APIC-access address. */ - GUEST_SYNC(vmreadz(APIC_ACCESS_ADDR)); + GUEST_SYNC(vmread(APIC_ACCESS_ADDR)); vmlaunch(); - GUEST_ASSERT(vmreadz(VM_EXIT_REASON) =3D=3D EXIT_REASON_VMCALL); + GUEST_ASSERT(vmread(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_SYNC(vmread(APIC_ACCESS_ADDR)); vmresume(); - GUEST_ASSERT(vmreadz(VM_EXIT_REASON) =3D=3D EXIT_REASON_VMCALL); + GUEST_ASSERT(vmread(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 e578221da247..cda9e43e8599 100644 --- a/tools/testing/selftests/kvm/x86/vmx_apicv_updates_test.c +++ b/tools/testing/selftests/kvm/x86/vmx_apicv_updates_test.c @@ -38,7 +38,7 @@ static void l1_guest_code(struct vmx_pages *vmx_pages) =20 /* Prepare the VMCS for L2 execution. */ prepare_vmcs(vmx_pages, l2_guest_code); - control =3D vmreadz(CPU_BASED_VM_EXEC_CONTROL); + control =3D vmread(CPU_BASED_VM_EXEC_CONTROL); control |=3D CPU_BASED_USE_MSR_BITMAPS; vmwrite(CPU_BASED_VM_EXEC_CONTROL, control); =20 @@ -63,8 +63,8 @@ static void l1_guest_code(struct vmx_pages *vmx_pages) * as KVM should force the APIC ID back to its default. */ 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(vmread(VM_EXIT_REASON) =3D=3D EXIT_REASON_VMCALL); + vmwrite(GUEST_RIP, vmread(GUEST_RIP) + vmread(VM_EXIT_INSTRUCTION_LEN)); GUEST_ASSERT(rdmsr(MSR_IA32_APICBASE) & MSR_IA32_APICBASE_EXTD); =20 /* @@ -91,7 +91,7 @@ static void l1_guest_code(struct vmx_pages *vmx_pages) * is active. */ vmresume(); - GUEST_ASSERT(vmreadz(VM_EXIT_REASON) =3D=3D EXIT_REASON_VMCALL); + GUEST_ASSERT(vmread(VM_EXIT_REASON) =3D=3D EXIT_REASON_VMCALL); GUEST_ASSERT(!(rdmsr(MSR_IA32_APICBASE) & MSR_IA32_APICBASE_EXTD)); =20 xapic_write_reg(APIC_ICR, APIC_DEST_SELF | APIC_DM_FIXED | GOOD_IPI_VECTO= R); 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 3017938fa993..bbd188949412 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 @@ -52,13 +52,13 @@ static void l1_guest_code(struct vmx_pages *vmx_pages) * library hasn't enabled it. Because KVM selftests jump directly to * 64-bit mode, unrestricted guest support isn't required. */ - GUEST_ASSERT(!(vmreadz(CPU_BASED_VM_EXEC_CONTROL) & CPU_BASED_ACTIVATE_SE= CONDARY_CONTROLS) || - !(vmreadz(SECONDARY_VM_EXEC_CONTROL) & SECONDARY_EXEC_UNRESTRICTED_= GUEST)); + GUEST_ASSERT(!(vmread(CPU_BASED_VM_EXEC_CONTROL) & CPU_BASED_ACTIVATE_SEC= ONDARY_CONTROLS) || + !(vmread(SECONDARY_VM_EXEC_CONTROL) & SECONDARY_EXEC_UNRESTRICTED_G= UEST)); =20 vmlaunch(); =20 /* L2 should triple fault after main() stuffs invalid guest state. */ - GUEST_ASSERT(vmreadz(VM_EXIT_REASON) =3D=3D EXIT_REASON_TRIPLE_FAULT); + GUEST_ASSERT(vmread(VM_EXIT_REASON) =3D=3D EXIT_REASON_TRIPLE_FAULT); GUEST_DONE(); } =20 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 b3651c5ab138..16f57af5a8e1 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 @@ -52,13 +52,13 @@ static void l1_guest_code(struct vmx_pages *vmx_pages) pml4_pa =3D pml5[0] & PHYSICAL_PAGE_MASK; vmwrite(GUEST_CR3, pml4_pa); =20 - guest_cr4 =3D vmreadz(GUEST_CR4); + guest_cr4 =3D vmread(GUEST_CR4); guest_cr4 &=3D ~X86_CR4_LA57; vmwrite(GUEST_CR4, guest_cr4); =20 vmlaunch(); =20 - exit_reason =3D vmreadz(VM_EXIT_REASON); + exit_reason =3D vmread(VM_EXIT_REASON); GUEST_ASSERT(exit_reason =3D=3D EXIT_REASON_VMCALL); } =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 c5f9d9879f61..376c96e68341 100644 --- a/tools/testing/selftests/kvm/x86/vmx_preemption_timer_test.c +++ b/tools/testing/selftests/kvm/x86/vmx_preemption_timer_test.c @@ -91,14 +91,14 @@ void l1_guest_code(struct vmx_pages *vmx_pages) return; =20 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(vmread(VM_EXIT_REASON) =3D=3D EXIT_REASON_VMCALL); + vmwrite(GUEST_RIP, vmread(GUEST_RIP) + vmread(VM_EXIT_INSTRUCTION_LEN)); =20 /* * Turn on PIN control and resume the guest */ vmwrite(PIN_BASED_VM_EXEC_CONTROL, - vmreadz(PIN_BASED_VM_EXEC_CONTROL) | PIN_BASED_VMX_PREEMPTION_TIMER); + vmread(PIN_BASED_VM_EXEC_CONTROL) | PIN_BASED_VMX_PREEMPTION_TIMER); =20 vmwrite(VMX_PREEMPTION_TIMER_VALUE, PREEMPTION_TIMER_VALUE); =20 @@ -121,7 +121,7 @@ void l1_guest_code(struct vmx_pages *vmx_pages) /* * Ensure the exit from L2 is due to preemption timer expiry */ - GUEST_ASSERT(vmreadz(VM_EXIT_REASON) =3D=3D EXIT_REASON_PREEMPTION_TIMER); + GUEST_ASSERT(vmread(VM_EXIT_REASON) =3D=3D EXIT_REASON_PREEMPTION_TIMER); =20 l1_tsc_deadline =3D l1_vmx_pt_start + (PREEMPTION_TIMER_VALUE << vmx_pt_rate); --=20 2.55.0.979.g7e5102b832-goog