Re: Nested AVIC design (was:Re: [RFC PATCH v3 04/19] KVM: x86: mmu: allow to enable write tracking externally)

From: Sean Christopherson
Date: Thu Sep 29 2022 - 18:44:03 EST


On Mon, Aug 08, 2022, Maxim Levitsky wrote:
> Hi Sean, Paolo, and everyone else who wants to review my nested AVIC work.

Before we dive deep into design details, I think we should first decide whether
or not nested AVIC is worth pursing/supporting.

- Rome has a ucode/silicon bug with no known workaround and no anticipated fix[*];
AMD's recommended "workaround" is to disable AVIC.
- AVIC is not available in Milan, which may or may not be related to the
aforementioned bug.
- AVIC is making a comeback on Zen4, but Zen4 comes with x2AVIC.
- x2APIC is likely going to become ubiquitous, e.g. Intel is effectively
requiring x2APIC to fudge around xAPIC bugs.
- It's actually quite realistic to effectively force the guest to use x2APIC,
at least if it's a Linux guest. E.g. turn x2APIC on in BIOS, which is often
(always?) controlled by the host, and Linux will use x2APIC.

In other words, given that AVIC is well on its way to becoming a "legacy" feature,
IMO there needs to be a fairly strong use case to justify taking on this much code
and complexity. ~1500 lines of code to support a feature that has historically
been buggy _without_ nested support is going to require a non-trivial amount of
effort to review, stabilize, and maintain.

[*] 1235 "Guest With AVIC (Advanced Virtual Interrupt Controller) Enabled May Fail
to Process IPI (Inter-Processor Interrupt) Until Guest Is Re-Scheduled" in
https://www.amd.com/system/files/TechDocs/56323-PUB_1.00.pdf