From: Maxim Levitsky <mlevitsk@redhat.com>
To: kvm@vger.kernel.org
Cc: Jim Mattson <jmattson@google.com>,
linux-kernel@vger.kernel.org, Wanpeng Li <wanpengli@tencent.com>,
Borislav Petkov <bp@alien8.de>, Joerg Roedel <joro@8bytes.org>,
Suravee Suthikulpanit <suravee.suthikulpanit@amd.com>,
"H. Peter Anvin" <hpa@zytor.com>,
Paolo Bonzini <pbonzini@redhat.com>,
Thomas Gleixner <tglx@linutronix.de>,
Ingo Molnar <mingo@redhat.com>,
Vitaly Kuznetsov <vkuznets@redhat.com>,
Sean Christopherson <seanjc@google.com>,
x86@kernel.org (maintainer:X86 ARCHITECTURE (32-BIT AND 64-BIT)),
Maxim Levitsky <mlevitsk@redhat.com>
Subject: [PATCH v4 00/16] My AVIC patch queue
Date: Tue, 10 Aug 2021 23:52:35 +0300 [thread overview]
Message-ID: <20210810205251.424103-1-mlevitsk@redhat.com> (raw)
Hi!
This is a series of bugfixes to the AVIC dynamic inhibition, which was
made while trying to fix bugs as much as possible in this area and trying
to make the AVIC+SYNIC conditional enablement work.
* Patches 1,3-8 are code from Sean Christopherson which
implement an alternative approach of inhibiting AVIC without
disabling its memslot.
V4: addressed review feedback.
* Patch 2 is new and it fixes a bug in kvm_flush_remote_tlbs_with_address
* Patches 9-10 in this series fix a race condition which can cause
a lost write from a guest to APIC when the APIC write races
the AVIC un-inhibition, and add a warning to catch this problem
if it re-emerges again.
V4: applied review feedback from Paolo
* Patch 11 is the patch from Vitaly about allowing AVIC with SYNC
as long as the guest doesn’t use the AutoEOI feature. I only slightly
changed it to expose the AutoEOI cpuid bit regardless of AVIC enablement.
V4: fixed a race that Paolo pointed out.
* Patch 12 is a refactoring that is now possible in SVM AVIC inhibition code,
because the RCU lock is not dropped anymore.
* Patch 13-15 fixes another issue I found in AVIC inhibit code:
Currently avic_vcpu_load/avic_vcpu_put are called on userspace entry/exit
from KVM (aka kvm_vcpu_get/kvm_vcpu_put), and these functions update the
"is running" bit in the AVIC physical ID remap table and update the
target vCPU in iommu code.
However both of these functions don't do anything when AVIC is inhibited
thus the "is running" bit will be kept enabled during the exit to userspace.
This shouldn't be a big issue as the caller
doesn't use the AVIC when inhibited but still inconsistent and can trigger
a warning about this in avic_vcpu_load.
To be on the safe side I think it makes sense to call
avic_vcpu_put/avic_vcpu_load when inhibiting/uninhibiting the AVIC.
This will ensure that the work these functions do is matched.
V4: I splitted a single patch to 3 patches to make it easier
to review, and applied Paolo's review feedback.
* Patch 16 removes the pointless APIC base
relocation from AVIC to make it consistent with the rest of KVM.
(both AVIC and APICv only support default base, while regular KVM,
sort of support any APIC base as long as it is not RAM.
If guest attempts to relocate APIC base to non RAM area,
while APICv/AVIC are active, the new base will be non accelerated,
while the default base will continue to be AVIC/APICv backed).
On top of that if guest uses different APIC bases on different vCPUs,
KVM doesn't honour the fact that the MMIO range should only be active
on that vCPU.
Best regards,
Maxim Levitsky
Maxim Levitsky (14):
KVM: x86/mmu: fix parameters to kvm_flush_remote_tlbs_with_address
KVM: x86/mmu: add comment explaining arguments to kvm_zap_gfn_range
KVM: x86/mmu: bump mmu notifier count in kvm_zap_gfn_range
KVM: x86/mmu: rename try_async_pf to kvm_faultin_pfn
KVM: x86/mmu: allow kvm_faultin_pfn to return page fault handling code
KVM: x86/mmu: allow APICv memslot to be enabled but invisible
KVM: x86: don't disable APICv memslot when inhibited
KVM: x86: APICv: fix race in kvm_request_apicv_update on SVM
KVM: SVM: add warning for mistmatch between AVIC vcpu state and AVIC
inhibition
KVM: SVM: remove svm_toggle_avic_for_irq_window
KVM: SVM: avoid refreshing avic if its state didn't change
KVM: SVM: move check for kvm_vcpu_apicv_active outside of
avic_vcpu_{put|load}
KVM: SVM: call avic_vcpu_load/avic_vcpu_put when enabling/disabling
AVIC
KVM: SVM: AVIC: drop unsupported AVIC base relocation code
Sean Christopherson (1):
Revert "KVM: x86/mmu: Allow zap gfn range to operate under the mmu
read lock"
Vitaly Kuznetsov (1):
KVM: x86: hyper-v: Deactivate APICv only when AutoEOI feature is in
use
arch/x86/include/asm/kvm-x86-ops.h | 1 -
arch/x86/include/asm/kvm_host.h | 13 +++++-
arch/x86/kvm/hyperv.c | 32 ++++++++++---
arch/x86/kvm/mmu/mmu.c | 75 ++++++++++++++++++++----------
arch/x86/kvm/mmu/paging_tmpl.h | 6 +--
arch/x86/kvm/mmu/tdp_mmu.c | 15 ++----
arch/x86/kvm/mmu/tdp_mmu.h | 11 ++---
arch/x86/kvm/svm/avic.c | 49 +++++++------------
arch/x86/kvm/svm/svm.c | 21 ++++-----
arch/x86/kvm/svm/svm.h | 8 ----
arch/x86/kvm/x86.c | 67 +++++++++++++++-----------
include/linux/kvm_host.h | 5 ++
virt/kvm/kvm_main.c | 7 ++-
13 files changed, 174 insertions(+), 136 deletions(-)
--
2.26.3
next reply other threads:[~2021-08-10 20:53 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-08-10 20:52 Maxim Levitsky [this message]
2021-08-10 20:52 ` [PATCH v4 01/16] Revert "KVM: x86/mmu: Allow zap gfn range to operate under the mmu read lock" Maxim Levitsky
2021-08-10 20:52 ` [PATCH v4 02/16] KVM: x86/mmu: fix parameters to kvm_flush_remote_tlbs_with_address Maxim Levitsky
2021-08-10 20:52 ` [PATCH v4 03/16] KVM: x86/mmu: add comment explaining arguments to kvm_zap_gfn_range Maxim Levitsky
2021-08-10 20:52 ` [PATCH v4 04/16] KVM: x86/mmu: bump mmu notifier count in kvm_zap_gfn_range Maxim Levitsky
2021-08-10 20:52 ` [PATCH v4 05/16] KVM: x86/mmu: rename try_async_pf to kvm_faultin_pfn Maxim Levitsky
2021-08-10 20:52 ` [PATCH v4 06/16] KVM: x86/mmu: allow kvm_faultin_pfn to return page fault handling code Maxim Levitsky
2021-08-10 20:52 ` [PATCH v4 07/16] KVM: x86/mmu: allow APICv memslot to be enabled but invisible Maxim Levitsky
2021-08-10 20:52 ` [PATCH v4 08/16] KVM: x86: don't disable APICv memslot when inhibited Maxim Levitsky
2021-08-10 20:52 ` [PATCH v4 09/16] KVM: x86: APICv: fix race in kvm_request_apicv_update on SVM Maxim Levitsky
2021-08-10 20:52 ` [PATCH v4 10/16] KVM: SVM: add warning for mistmatch between AVIC vcpu state and AVIC inhibition Maxim Levitsky
2021-08-10 20:52 ` [PATCH v4 11/16] KVM: x86: hyper-v: Deactivate APICv only when AutoEOI feature is in use Maxim Levitsky
2021-08-10 20:52 ` [PATCH v4 12/16] KVM: SVM: remove svm_toggle_avic_for_irq_window Maxim Levitsky
2021-08-10 20:52 ` [PATCH v4 13/16] KVM: SVM: avoid refreshing avic if its state didn't change Maxim Levitsky
2021-08-10 20:52 ` [PATCH v4 14/16] KVM: SVM: move check for kvm_vcpu_apicv_active outside of avic_vcpu_{put|load} Maxim Levitsky
2021-08-10 20:52 ` [PATCH v4 15/16] KVM: SVM: call avic_vcpu_load/avic_vcpu_put when enabling/disabling AVIC Maxim Levitsky
2021-08-10 20:52 ` [PATCH v4 16/16] KVM: SVM: AVIC: drop unsupported AVIC base relocation code Maxim Levitsky
2021-08-10 21:21 ` [PATCH v4 00/16] My AVIC patch queue Maxim Levitsky
2021-08-11 8:06 ` Paolo Bonzini
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20210810205251.424103-1-mlevitsk@redhat.com \
--to=mlevitsk@redhat.com \
--cc=bp@alien8.de \
--cc=hpa@zytor.com \
--cc=jmattson@google.com \
--cc=joro@8bytes.org \
--cc=kvm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@redhat.com \
--cc=pbonzini@redhat.com \
--cc=seanjc@google.com \
--cc=suravee.suthikulpanit@amd.com \
--cc=tglx@linutronix.de \
--cc=vkuznets@redhat.com \
--cc=wanpengli@tencent.com \
--cc=x86@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox