From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pj1-f73.google.com (mail-pj1-f73.google.com [209.85.216.73]) (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 048132989BC for ; Tue, 13 Jan 2026 23:11:03 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.73 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768345865; cv=none; b=FmpHHOw+NCcRDRJA3ZJBcVyZ+J0v/LEUqSITuPBv1UvLGuMrQcm+5MqrXYkwPZE6L4/5rHb83xXwLY4WWPAj4kCEEcm7tutX470EsYV0/+zUHXvnvek/8PoSuhKgwFG9kgHLqh+ien7qSwuTYAwQwNEv6N3erZb0Q/hw5H9l4RI= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768345865; c=relaxed/simple; bh=fLyu+0cU6qmRu11TkEOA4FgiHbBAgNe08/ZJFz1riZQ=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=HoS7HmnCZLppcvt/jApOprGjhhTcH3/KHqUrYoJhZ68SJZ9uU39VG2mEGO1q8davE+jllaBStw9Os6zzXVu0dSIO4Dijhzb/PBUn51UXsLGCN/w1hNn1DjWl5ZHWVpJWmyKeuCrF5HYXk0d8REMn2m3dJRUUiCQaV1ieC8Bxje4= 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=1j8e8IIT; arc=none smtp.client-ip=209.85.216.73 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="1j8e8IIT" Received: by mail-pj1-f73.google.com with SMTP id 98e67ed59e1d1-34ac819b2f2so7268376a91.0 for ; Tue, 13 Jan 2026 15:11:03 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1768345863; x=1768950663; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=gMHd11+SPOANXiJEC1562pMSsk1oD23Ptnjj0uWhAaQ=; b=1j8e8IITICKtYyBpej7OJdWxrLBPOCEpDA02lbKoJ69o/y6cdLg+ZBC554touUuPnF PXvxZInyUT8ol8yXuyk1c9jSpBqKHjPHqhGa24FCLEKoGMzciJhEVRFnt/GwVra1+vK9 L3/4sSV2EaWSaBQN49sYPB4pGjJ463epXJ1k3M2m33psbDZtxzNEFT+1ssg7weeKUiA5 nBTnSqAvQJcYweIlLQg3H0ioXOF9W4ydJdC1cO7IKwDXCHDBWIxwy25puzw0WICbKo8N jnwcOMYMiRhMMwymknz3FzAzoL//Vccr5m4IAxUb8ppE9HMcP5dJGPYYMEuI5PjpJDWa vUWQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1768345863; x=1768950663; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=gMHd11+SPOANXiJEC1562pMSsk1oD23Ptnjj0uWhAaQ=; b=fjvE785oEWC3tp1fF8KFwO41KBozk10ewfsFKlC25A+kmHC5a48QlxbYFF3UnKNihv 7oQx7YfknvA87uA88q0fGsn2b7fVGZ03QBjR3J1GrqqJ/g0QaUTTONt8X3Z+4kV02A3W G9jYwDX76vznVJ3wJ5yeFR1BZhR/q1K9TMNPMI1bW3ltt838I4wflSRQ2/z9l8mWueuM JcQfycU+VFaabcRRjMxv3A72CUn+XdS4SQn3gbETVM24klzLSUv9KJY1cO7DI5t/AXOS SseQYa3SAbSd10r3JU4phrPDJb/wRtSFKFAXbAA3rIvGZLy9ymimiHeMG01N4XE87q99 tioA== X-Forwarded-Encrypted: i=1; AJvYcCUgG0qYq3DdK7tSOkdaH1r4ooTJaAbplM+Hd5Os345YiB3y8RTXsJB+PacLN7/q5vtX3WXmkSPPLv82Iyk=@vger.kernel.org X-Gm-Message-State: AOJu0YzDJnqH2fA8wyB5hwmrQ7bF3RWYaTds3FBWcOVAFYpDnFe1qzwJ v+6uypJac54n4JgBGMbFtbaydZf0fW9RM7QLoTGMhsZmu2rKVz5U4Lu+HHVPq9hYqvlR1oInE4Y UECaXyA== X-Received: from pjre16.prod.google.com ([2002:a17:90a:b390:b0:340:9d73:9c06]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90b:520e:b0:340:2f48:b51a with SMTP id 98e67ed59e1d1-351090c679emr708041a91.15.1768345863234; Tue, 13 Jan 2026 15:11:03 -0800 (PST) Date: Tue, 13 Jan 2026 15:11:01 -0800 In-Reply-To: <20251229111708.59402-2-khushit.shah@nutanix.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20251229111708.59402-1-khushit.shah@nutanix.com> <20251229111708.59402-2-khushit.shah@nutanix.com> Message-ID: Subject: Re: [PATCH v5 1/3] KVM: x86: Refactor suppress EOI broadcast logic From: Sean Christopherson To: Khushit Shah Cc: pbonzini@redhat.com, kai.huang@intel.com, dwmw2@infradead.org, mingo@redhat.com, x86@kernel.org, bp@alien8.de, hpa@zytor.com, linux-kernel@vger.kernel.org, kvm@vger.kernel.org, dave.hansen@linux.intel.com, tglx@linutronix.de, jon@nutanix.com, shaju.abraham@nutanix.com Content-Type: text/plain; charset="us-ascii" On Mon, Dec 29, 2025, Khushit Shah wrote: > diff --git a/arch/x86/kvm/lapic.c b/arch/x86/kvm/lapic.c > index 0ae7f913d782..2c24fd8d815f 100644 > --- a/arch/x86/kvm/lapic.c > +++ b/arch/x86/kvm/lapic.c > @@ -105,6 +105,39 @@ bool kvm_apic_pending_eoi(struct kvm_vcpu *vcpu, int vector) > apic_test_vector(vector, apic->regs + APIC_IRR); > } > > +bool kvm_lapic_advertise_suppress_eoi_broadcast(struct kvm *kvm) This can be static, its only caller is kvm_apic_set_version(). > +{ > + /* > + * The default in-kernel I/O APIC emulates the 82093AA and does not > + * implement an EOI register. Some guests (e.g. Windows with the > + * Hyper-V role enabled) disable LAPIC EOI broadcast without checking > + * the I/O APIC version, which can cause level-triggered interrupts to > + * never be EOI'd. > + * > + * To avoid this, KVM must not advertise Suppress EOI Broadcast support > + * when using the default in-kernel I/O APIC. > + * > + * Historically, in split IRQCHIP mode, KVM always advertised Suppress > + * EOI Broadcast support but did not actually suppress EOIs, resulting > + * in quirky behavior. > + */ > + return !ioapic_in_kernel(kvm); > +} > + > +bool kvm_lapic_respect_suppress_eoi_broadcast(struct kvm *kvm) I don't see any point in forcing every caller to check SPIV *and* this helper. Just do: bool kvm_lapic_suppress_eoi_broadcast(struct kvm_lapic *apic) { struct kvm *kvm = apic->vcpu->kvm; if (!(kvm_lapic_get_reg(apic, APIC_SPIV) & APIC_SPIV_DIRECTED_EOI)) return false; switch (kvm->arch.suppress_eoi_broadcast_mode) { ... } } And then callers are much more readable, e.g. (spoiler alert if you haven't read my other mail, which I haven't sent yet): if (trigger_mode != IOAPIC_LEVEL_TRIG || kvm_lapic_suppress_eoi_broadcast(apic)) return; and /* Request a KVM exit to inform the userspace IOAPIC. */ if (irqchip_split(apic->vcpu->kvm)) { /* * Don't exit to userspace if the guest has enabled Directed * EOI, a.k.a. Suppress EOI Broadcasts, in which case the local * APIC doesn't broadcast EOIs (the guest must EOI the target * I/O APIC(s) directly). */ if (kvm_lapic_suppress_eoi_broadcast(apic)) return; apic->vcpu->arch.pending_ioapic_eoi = vector; kvm_make_request(KVM_REQ_IOAPIC_EOI_EXIT, apic->vcpu); return; }