From mboxrd@z Thu Jan 1 00:00:00 1970 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-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; } -static inline int vmwrite(u64 encoding, u64 value) +static __always_inline int __vmwrite(u64 encoding, u64 value) { u8 ret; @@ -429,6 +429,11 @@ static inline int vmwrite(u64 encoding, u64 value) return ret; } +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/selftests/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 = 0; vmwrite(VIRTUAL_PROCESSOR_ID, 0); - vmwrite(POSTED_INTR_NV, 0); + __vmwrite(POSTED_INTR_NV, 0); vmwrite(PIN_BASED_VM_EXEC_CONTROL, rdmsr(MSR_IA32_VMX_TRUE_PINBASED_CTLS)); @@ -269,7 +269,7 @@ static inline void init_vmcs_control_fields(struct vmx_pages *vmx) sec_exec_ctl |= SECONDARY_EXEC_ENABLE_EPT; } - 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 vmx_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); vmwrite(CR0_GUEST_HOST_MASK, 0); vmwrite(CR4_GUEST_HOST_MASK, 0); vmwrite(CR0_READ_SHADOW, get_cr0()); vmwrite(CR4_READ_SHADOW, get_cr4()); - 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); } /* @@ -356,8 +356,8 @@ static inline void init_vmcs_guest_state(void *rip, void *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); vmwrite(VMCS_LINK_POINTER, -1ll); vmwrite(GUEST_IA32_DEBUGCTL, 0); @@ -391,7 +391,7 @@ static inline void init_vmcs_guest_state(void *rip, void *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); vmwrite(GUEST_CR0, vmreadz(HOST_CR0)); vmwrite(GUEST_CR3, vmreadz(HOST_CR3)); -- 2.55.0.979.g7e5102b832-goog