On Sun, May 22, 2022, Maxim Levitsky wrote: > On Thu, 2022-05-19 at 16:10 +0000, Sean Christopherson wrote: > > On Wed, Apr 27, 2022, Maxim Levitsky wrote: > > > AVIC is now inhibited if the guest changes apic id, thus remove > > > that broken code. > > > > Can you explicitly call out what's broken? Just something short on the code not > > handling the scenario where APIC ID is changed back to vcpu_id to help future > > archaeologists. I forget if there are other bugs... > > > > > Well, the avic_handle_apic_id_update is called each time the AVIC is uninhibited, > because while it is inhibited, the AVIC code doesn't track changes to APIC ID and such. > > Also there are many ways it is broken for example > > 1. a CPU can't move its APIC ID to a free slot due to (!new) check > > 2. If APIC ID is moved to a used slot, then the CPU that used that overwritten > slot can't correctly move it, since its now not its slot, not to mention races. The more the merrier :-) Any/all of those examples are great, just so long as it's obvious to future readers that the code truly is busted. > BTW, if you see a value in it, I can fix this code instead - a lock + going over all the apic ids, > should be quite easy to implement. In case of two vCPUs using the same APIC ID, > I can write non present entry to the table, so none will be able to be addressed, > hoping that the situation is only temporary. Very strong "no", let's keep this as simple as possible without outright killing the guest or breaking ABI. Disabling APICv/AVIC is perfect.