From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.ozlabs.org (lists.ozlabs.org [112.213.38.117]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id C9681C021B6 for ; Mon, 24 Feb 2025 23:56:11 +0000 (UTC) Received: from boromir.ozlabs.org (localhost [127.0.0.1]) by lists.ozlabs.org (Postfix) with ESMTP id 4Z1yL12G8Kz3093; Tue, 25 Feb 2025 10:55:53 +1100 (AEDT) Authentication-Results: lists.ozlabs.org; arc=none smtp.remote-ip="2607:f8b0:4864:20::1049" ARC-Seal: i=1; a=rsa-sha256; d=lists.ozlabs.org; s=201707; t=1740441353; cv=none; b=JbU8k855XdAD3uDtCGtjw+Qnn/EtL+U1GIjJBL5ZuvyyD1EKfHwoQvwcNBupS1DtiH3StHn7s1yN+C+a69kXl0c6fGUDQrwL3eJQMz5MPo2TEQaVacXkPPgfu36QtXgrDDhrIyaoU8/cYb8xQGs8yERuuo6gapwQQi/eV6sGl8LJpHyGDWQmMnhx9F5KRvrpgu/s/ngUE9BjgXrbsPaZXM7LkXyP7ShLtyU7dGZaknHHPXCJ72iHrxHgk195RhxIlTWURk2pZttluDQAXkuYXsCWwyHb6nvoqW0cNKdb+g7EUlmmcsZDpwv+y4SIJhJxlhdZBwbpRfU4PoZG9jzJNA== ARC-Message-Signature: i=1; a=rsa-sha256; d=lists.ozlabs.org; s=201707; t=1740441353; c=relaxed/relaxed; bh=TGU0ybTwy223eIpDzZVLI/W8vnqy8rZ9uLMIqzhcN/c=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=E0EDCXY+VLhjsh8rhSJNuzXFfPRMbxxny+1jp2xMuVb7xdXWWEzNqyG4g/fYegwNcukdGoWRfqcPq4wZZ7RVpzombomcIph/ckMcz0mj0K47+yBekT4NikT3TILnU/ZNOrPljy8pQRbQLO5lZoPmkDifUcry0755g00BO6HUorXpiFaaDXli8YaftmSjaEXnRqbo6g/zSUrTBov/UzqPfxuyy8rQ71CVDrh0+c+63s/aFgzGuxtXkQY1KXBOmXBWTYh1TKX6MuHTm8NtFsgraqY24OnbgsNm4SxGg3dWFANVGP4ofQ0RwS0dUYXRjnm4MRbOWuFQYZSk2gh4YYh5oQ== ARC-Authentication-Results: i=1; lists.ozlabs.org; dmarc=pass (p=reject dis=none) header.from=google.com; dkim=pass (2048-bit key; unprotected) header.d=google.com header.i=@google.com header.a=rsa-sha256 header.s=20230601 header.b=KPFDAwyP; dkim-atps=neutral; spf=pass (client-ip=2607:f8b0:4864:20::1049; helo=mail-pj1-x1049.google.com; envelope-from=3bae9zwykdes5rn0wpt11tyr.p1zyv07a22p-qr8yv565.1cyno5.14t@flex--seanjc.bounces.google.com; receiver=lists.ozlabs.org) smtp.mailfrom=flex--seanjc.bounces.google.com Authentication-Results: lists.ozlabs.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: lists.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=google.com header.i=@google.com header.a=rsa-sha256 header.s=20230601 header.b=KPFDAwyP; dkim-atps=neutral Authentication-Results: lists.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=flex--seanjc.bounces.google.com (client-ip=2607:f8b0:4864:20::1049; helo=mail-pj1-x1049.google.com; envelope-from=3bae9zwykdes5rn0wpt11tyr.p1zyv07a22p-qr8yv565.1cyno5.14t@flex--seanjc.bounces.google.com; receiver=lists.ozlabs.org) Received: from mail-pj1-x1049.google.com (mail-pj1-x1049.google.com [IPv6:2607:f8b0:4864:20::1049]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by lists.ozlabs.org (Postfix) with ESMTPS id 4Z1yKy6Qhdz30MZ for ; Tue, 25 Feb 2025 10:55:50 +1100 (AEDT) Received: by mail-pj1-x1049.google.com with SMTP id 98e67ed59e1d1-2f83e54432dso16611812a91.2 for ; Mon, 24 Feb 2025 15:55:50 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1740441349; x=1741046149; darn=lists.ozlabs.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:from:to:cc:subject:date:message-id:reply-to; bh=TGU0ybTwy223eIpDzZVLI/W8vnqy8rZ9uLMIqzhcN/c=; b=KPFDAwyPqxTnZxB+MI0xiJTsg9khC74vJCykpJF2Ve3Sa2x59ul0HoEVB6iX1h/RC7 KKENAdIvD3NXtoPMfSSF6NSCq1UqaZaWYiykHEl+sxWCFOYpNu//pT6o0IKwBTaejAAh VVFt7gVx9FCaCwQLEk1cBwbsOqAqketK1fO1wvNXULauDjJOu26UzOg7/wOGbrSk5Pdg zvKHYsRgznFOamWizonaKurXnlgCrokBiz849xbt7DjbQec1ICWBKpQfOzOyw7EiQWUk XH8PaIsgZNf9FisXasQG1g+IkO5ng0iw2iI0oV1eNlTZhwd2WRTpYJk+5QrMZTdqSAQz La3g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1740441349; x=1741046149; h=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; bh=TGU0ybTwy223eIpDzZVLI/W8vnqy8rZ9uLMIqzhcN/c=; b=t9YGFOGpmedftwYWOvN0Of/vebbHdpx4LmMsJmmK1myIrOIe/jxn43pFqFrSu8DqHR nyf7QsukueDMFPMGgisRTYFr8iYNuxM7MFHF41JOfjAFTcCb18bCWHPowKI8+Wz0BKkF DB3FAmatRLICpl4PuUWbNxwbCK8PwapwL/N1luZHzusyNmszMZ6pP7Q3kuVvTv+5Th9R cxZkaZ543UWuaPr53/lHQmwih2OS1DigB2P/WfTPXYW++u5ZiyIPzghJvLdiyZXj9794 jOzGEvjJrWEcvc2O5T4cJfnc1T3SSckD69ieoSRo9QGxXFlFxF/ZGWUrrHH2jFYOazsL rFtQ== X-Forwarded-Encrypted: i=1; AJvYcCVEGaZVxtrUjxtUzC4p7pdT9A+RtFsSQpoufLHfI2L90hozGqPezr/E41IkKWIsh52XZgR6XSXLP+BKWW0=@lists.ozlabs.org X-Gm-Message-State: AOJu0YwvKXndPOpZjJ170NFPLsn6d5ajyDIydidLN0hOqaCBF76aXDVM E54coLksHqfBZk+R6DssZgdi72331EGzpiyNNg+uqxw2jsrs+20TO33XSKQ0vP77/EgKNMMXFIy mQQ== X-Google-Smtp-Source: AGHT+IHcos0szxLwYcsW2Q/WbhHjoZ/1wFjhF3Xa+8fw1kzKNZT2q6/VDS58iA2uFYrVe3USusRDS/R8AlY= X-Received: from pjbnb15.prod.google.com ([2002:a17:90b:35cf:b0:2fc:b544:749e]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90a:e7cd:b0:2fa:17d2:166 with SMTP id 98e67ed59e1d1-2fce7b40077mr23992311a91.31.1740441348957; Mon, 24 Feb 2025 15:55:48 -0800 (PST) Reply-To: Sean Christopherson Date: Mon, 24 Feb 2025 15:55:37 -0800 In-Reply-To: <20250224235542.2562848-1-seanjc@google.com> X-Mailing-List: linuxppc-dev@lists.ozlabs.org List-Id: List-Help: List-Owner: List-Post: List-Archive: , List-Subscribe: , , List-Unsubscribe: Mime-Version: 1.0 References: <20250224235542.2562848-1-seanjc@google.com> X-Mailer: git-send-email 2.48.1.658.g4767266eb4-goog Message-ID: <20250224235542.2562848-3-seanjc@google.com> Subject: [PATCH 2/7] KVM: nVMX: Process events on nested VM-Exit if injectable IRQ or NMI is pending From: Sean Christopherson To: Marc Zyngier , Oliver Upton , Tianrui Zhao , Bibo Mao , Huacai Chen , Madhavan Srinivasan , Anup Patel , Paul Walmsley , Palmer Dabbelt , Albert Ou , Christian Borntraeger , Janosch Frank , Claudio Imbrenda , Sean Christopherson , Paolo Bonzini Cc: linux-arm-kernel@lists.infradead.org, kvmarm@lists.linux.dev, kvm@vger.kernel.org, loongarch@lists.linux.dev, linux-mips@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, kvm-riscv@lists.infradead.org, linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org, Aaron Lewis , Jim Mattson , Yan Zhao , Rick P Edgecombe , Kai Huang , Isaku Yamahata Content-Type: text/plain; charset="UTF-8" Process pending events on nested VM-Exit if the vCPU has an injectable IRQ or NMI, as the event may have become pending while L2 was active, i.e. may not be tracked in the context of vmcs01. E.g. if L1 has passed its APIC through to L2 and an IRQ arrives while L2 is active, then KVM needs to request an IRQ window prior to running L1, otherwise delivery of the IRQ will be delayed until KVM happens to process events for some other reason. The missed failure is detected by vmx_apic_passthrough_tpr_threshold_test in KVM-Unit-Tests, but has effectively been masked due to a flaw in KVM's PIC emulation that causes KVM to make spurious KVM_REQ_EVENT requests (and apparently no one ever ran the test with split IRQ chips). Cc: stable@vger.kernel.org Signed-off-by: Sean Christopherson --- arch/x86/kvm/vmx/nested.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/arch/x86/kvm/vmx/nested.c b/arch/x86/kvm/vmx/nested.c index bca2575837ce..8220b09e91ce 100644 --- a/arch/x86/kvm/vmx/nested.c +++ b/arch/x86/kvm/vmx/nested.c @@ -5084,6 +5084,17 @@ void nested_vmx_vmexit(struct kvm_vcpu *vcpu, u32 vm_exit_reason, load_vmcs12_host_state(vcpu, vmcs12); + /* + * Process events if an injectable IRQ or NMI is pending, even + * if the event is blocked (RFLAGS.IF is cleared on VM-Exit). + * If an event became pending while L2 was active, KVM needs to + * either inject the event or request an IRQ/NMI window. SMIs + * don't need to be processed as SMM is mutually exclusive with + * non-root mode. INIT/SIPI don't need to be checked as INIT + * is blocked post-VMXON, and SIPIs are ignored. + */ + if (kvm_cpu_has_injectable_intr(vcpu) || vcpu->arch.nmi_pending) + kvm_make_request(KVM_REQ_EVENT, vcpu); return; } -- 2.48.1.658.g4767266eb4-goog