On Wed, Dec 3, 2025 at 2:32 PM David Woodhouse dwmw2@infradead.org wrote:
That would make it impossible to use the fixed implementation on the local APIC side, without changing the way the IOAPIC appears to the guest.
Yes, but remember that "the fixed implementation on the local APIC side" means precisely that it's fixed to *not* broadcast the EOI. Which means you absolutely *need* to have an I/O APIC capable of receiving the explicit directed EOI, or the EOI will never happen at all.
Which is why it probably makes sense to drop the 'version_id' field from the struct where I'd added it, and just make the code report a hard-coded version based on suppress_eoi_broadcast being enabled:
(kvm->arch.suppress_eoi_broadcast == KVM_SUPPRESS_EOI_ENABLED) ? 0x20: 0x11
So yes, it's a guest-visible change, but only if the VMM explicitly *asks* for the broadcast suppression feature to work, in which case it's *necessary* anyway.
I see what you mean and I guess you're right... "Setting X will cause the in-kernel IOAPIC to report version 0x20" is as obscure as it gets, but then so is "Setting X will break guests unless you tell in-kernel IOAPIC to report version 0x20".
So this is good, but the docs need to say clearly that this should only be set if either full in-kernel irqchip is in use or, for split irqchip, if the userspace IOAPIC implements directed EOI correctly.
Paolo