From nobody Sat Feb 7 22:21:29 2026 Received: from mail-wm1-f52.google.com (mail-wm1-f52.google.com [209.85.128.52]) (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 6188C3EDAD7 for ; Tue, 20 Jan 2026 14:45:55 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.52 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768920357; cv=none; b=MAiit2OWIhPxAhjfDW8WpLevzFaE+GfNg1Rqp1ItczSEHdW5LUozNuH6i155bmw1/F+Cd7ygPbzOzXVDnpXm3HE22en2hR8tQUYoaj6j79M8z10sz5zU3pVex/QxDXYyOnqCV7Hv6J0VNgAnr2qZf3oKXKIHhyemhOUPcdNB0XY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768920357; c=relaxed/simple; bh=qohqTrHOpcszpY6T71fBAof7W0BAd5JCuzPM0Kr/W+Q=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=PDNJHi0wH7yey8gyfpXry7+zR4+E3ViiCPS9TEQfwUuoY1H5K8GF7nIAi63/og8h4hYaId8mA/nTMfF8znvD4wPYwcDgnf1P56lMxr6aOHqdr3KvD+ZvMo/k59SnC08Zb1cDDcP9LivupDt9gGMcTvvrllRvsyUzdOCa6cu8TgI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=eav/Ltcu; arc=none smtp.client-ip=209.85.128.52 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="eav/Ltcu" Received: by mail-wm1-f52.google.com with SMTP id 5b1f17b1804b1-4801d24d91bso38563665e9.2 for ; Tue, 20 Jan 2026 06:45:55 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1768920354; x=1769525154; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=YIqO4SrmEsn8JNS9MkoMfSMXaWLK+Ne7pozd40Hy4X8=; b=eav/LtcuyO8vYNeXaiu9c3JvTpfe2+HNJ1eT/+dnpiwIJ+G06eTyR7HDkOxz9H3JR3 1B1G/uRLQxWBK8JxOgvvmsK43E43kteFJ4t48WfYuGlcHaphWzLmSCCF9hxCSDsVB6CS DKqgPoQe25ee2Vt/C6tSVpK9Qv65NiesIsjvzQL7yLzDh8e2R8DIEyH14Pb8mLjY5BUE gALAoVxEMFddhODuCduh6b/gJHrypD7wIRoL1V7LDNux5RyghAcXSsWwfpWJ8SLWy73S FrLEcpyXhKZ0X9GZEDfmaeRXjA8waurXn3fMnbVvD1IwelzZS55xBhX/GtBcuGuCzj3W t0jw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1768920354; x=1769525154; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=YIqO4SrmEsn8JNS9MkoMfSMXaWLK+Ne7pozd40Hy4X8=; b=r9y4Mjyox/MR2jXbSHCJrtEg5oMvQiu+Id6fhDW6v+Z8Iy1oP420J1gbYhAHLjia48 55mUoEMsF21yKghDLU8ExCCPLIpIzGGgXIou5oLRdlZxRR4u7oOCpIKX3EfVr4Sfx/JR e+cMWy2veQCRQy1EnP7s3xYxQBMjMuIhWNmttNGQ6bDn85mdUhuY7jE8apC8inzREg9f 0niYXA9E+lBGRGtSqmFrYfbMTMmHmc1xlKiAkxGKhwMZ20sBVG8vCeKRDDlK1vRIMKDj idH2mzoqwVgJNjN3O6t5Js/O7k5iNRW85xU2/uVRRPxbf2HizTmtB9GBTWIKzt66qPpM R/Bw== X-Forwarded-Encrypted: i=1; AJvYcCUz6AKEuz7JIv31P6IncPGI+UwQ3pJg1l9L+B6BwF5XQNI02RV6e3oXShdjNWhadeb+5sg4aohj4zQG88o=@vger.kernel.org X-Gm-Message-State: AOJu0YzPEALAO/X7xBdI2sPXkHlDOmdMQEEw3jq4LEEk5I1FhpiJDjJK QJH+RAQWp37roQ/T/FhdTnz5Yd5ti1Srq1ajGLb8oLq52HEYs1IH64gU9ZR4XvghLg8= X-Gm-Gg: AY/fxX5I/LZ+UMthpvPOpbcqNaJRgCNd9UB8bEfk65EaxC+JDcrw9aYIKGwOl3IgevE S9skpek8yySeP0BCJP+dhN8dFWPo65iDp8U8Bv1b4TCE3qrJOehACYelhoC3RLzXNszI5vRLycx +kc9iYQ70o5pZgGJ5izmuAf+RPavqj/1ATE29PnDFdnew0MDrP3hoJR91wZop2NiFzK0BOLKLYM T6rfp87VZHdHWgJUXOjUZWsXv8sMfbuQRsT4ohpnX8EAQC2WNBY17p8Ar3bsvunoZ0JkmnTvbqV ReLjfCjo8yiU5nXtLy6JdEHhxhbs8LtjoAsAORto+c4UuKqzhGZ37RjCNN40f4dm4B8ojJyRaMm ixaHM6IYA8KEXMq+OZ38Pv+pLca8PFZyKcaAveNmJNua8FawVH6IVwZQJLxnwoacmL4Vfdc1pzM RIwWU7RlA4hvPThXxa3JlAvehad+VRZSo84inBXFIMrc5S3KX4wHhdQ0qOr3eomeoXcMLBiqQIG pUm+SYCqujMmHwgU9nYXxWpxP9OoqhwoBRroQ3OKdIQhO9qrP9BXcAh8HvqCgEI X-Received: by 2002:a05:600c:8b75:b0:477:9574:d641 with SMTP id 5b1f17b1804b1-4803e7e8531mr31387285e9.22.1768920353193; Tue, 20 Jan 2026 06:45:53 -0800 (PST) Received: from ip-10-0-150-200.eu-west-1.compute.internal (ec2-52-49-196-232.eu-west-1.compute.amazonaws.com. [52.49.196.232]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4801e879537sm252972145e9.5.2026.01.20.06.45.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 20 Jan 2026 06:45:52 -0800 (PST) From: Fred Griffoul To: kvm@vger.kernel.org Cc: seanjc@google.com, pbonzini@redhat.com, linux-kernel@vger.kernel.org, Fred Griffoul Subject: [PATCH] KVM: nVMX: Track vmx emulation errors Date: Tue, 20 Jan 2026 14:45:50 +0000 Message-ID: <20260120144550.1083396-1-griffoul@gmail.com> X-Mailer: git-send-email 2.43.0 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Fred Griffoul Add a new kvm_stat vcpu counter called "nested_errors" to track the number of errors returned to an L1 hypervisor when emulated VMX instructions fail. This counter should help monitor nVMX health and troubleshoot issues with L1 hypervisors. Signed-off-by: Fred Griffoul --- arch/x86/include/asm/kvm_host.h | 1 + arch/x86/kvm/vmx/nested.c | 2 ++ arch/x86/kvm/x86.c | 1 + 3 files changed, 4 insertions(+) diff --git a/arch/x86/include/asm/kvm_host.h b/arch/x86/include/asm/kvm_hos= t.h index 5a3bfa293e8b..a3aaccd6e6aa 100644 --- a/arch/x86/include/asm/kvm_host.h +++ b/arch/x86/include/asm/kvm_host.h @@ -1674,6 +1674,7 @@ struct kvm_vcpu_stat { u64 preemption_other; u64 guest_mode; u64 notify_window_exits; + u64 nested_errors; }; =20 struct x86_instruction_info; diff --git a/arch/x86/kvm/vmx/nested.c b/arch/x86/kvm/vmx/nested.c index 6137e5307d0f..2e1394151945 100644 --- a/arch/x86/kvm/vmx/nested.c +++ b/arch/x86/kvm/vmx/nested.c @@ -162,6 +162,7 @@ static int nested_vmx_succeed(struct kvm_vcpu *vcpu) =20 static int nested_vmx_failInvalid(struct kvm_vcpu *vcpu) { + ++vcpu->stat.nested_errors; vmx_set_rflags(vcpu, (vmx_get_rflags(vcpu) & ~(X86_EFLAGS_PF | X86_EFLAGS_AF | X86_EFLAGS_ZF | X86_EFLAGS_SF | X86_EFLAGS_OF)) @@ -172,6 +173,7 @@ static int nested_vmx_failInvalid(struct kvm_vcpu *vcpu) static int nested_vmx_failValid(struct kvm_vcpu *vcpu, u32 vm_instruction_error) { + ++vcpu->stat.nested_errors; vmx_set_rflags(vcpu, (vmx_get_rflags(vcpu) & ~(X86_EFLAGS_CF | X86_EFLAGS_PF | X86_EFLAGS_AF | X86_EFLAGS_SF | X86_EFLAGS_OF)) diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c index ff8812f3a129..475c8a2d704e 100644 --- a/arch/x86/kvm/x86.c +++ b/arch/x86/kvm/x86.c @@ -299,6 +299,7 @@ const struct _kvm_stats_desc kvm_vcpu_stats_desc[] =3D { STATS_DESC_COUNTER(VCPU, preemption_other), STATS_DESC_IBOOLEAN(VCPU, guest_mode), STATS_DESC_COUNTER(VCPU, notify_window_exits), + STATS_DESC_COUNTER(VCPU, nested_errors), }; =20 const struct kvm_stats_header kvm_vcpu_stats_header =3D { base-commit: 0499add8efd72456514c6218c062911ccc922a99 --=20 2.43.0