[PATCH RFC 00/10] KVM: Enable Clang Context Analysis
From: Marco Elver <elver@google.com>
Date: 2026-09-10 16:23:56
Also in:
kvm, lkml
Enable compiler-based static context analysis [1] for x86 KVM, along with prerequisite lock annotations in virt/kvm. During the initial annotation pass, context analysis uncovered a missing SRCU read-side critical section in x86 PMU filter lookups; patch 1 fixes this bug. The remainder of the series is strictly non-functional: it establishes basic function annotations, guarded_by annotations on core structs, and straightforward refactorings in hva/gfn range walks and guest_memfd to eliminate conditional locking patterns that cannot be tracked statically. Annotating the MMU (mmu/mmu.c, mmu/tdp_mmu.c), i8259, and Xen requires more invasive changes and is deferred to follow-ups. [1] https://docs.kernel.org/next/dev-tools/context-analysis.html Marco Elver (10): KVM: x86/pmu: Acquire SRCU in pmc_is_event_allowed() to protect filter lookup KVM: Allow reading memslots while holding slots_arch_lock KVM: guest_memfd: Avoid conditional mmu_lock acquisition KVM: Refactor kvm_handle_hva_range() to avoid conditional mmu_lock KVM: Refactor kvm_handle_gfn_range() to avoid conditional mmu_lock KVM: Add basic lock context annotations KVM: x86: Add basic lock context annotations KVM: Add guarded_by to members in struct kvm KVM: x86: Add guarded_by annotations for kvm_arch, kvm_hv, and ioapic KVM: x86: Enable CONTEXT_ANALYSIS with opt-outs arch/x86/include/asm/kvm_host.h | 32 ++-- arch/x86/kvm/Makefile | 8 + arch/x86/kvm/debugfs.c | 1 + arch/x86/kvm/hyperv.c | 21 +++ arch/x86/kvm/hyperv.h | 16 +- arch/x86/kvm/ioapic.c | 28 ++- arch/x86/kvm/ioapic.h | 16 +- arch/x86/kvm/irq.c | 2 + arch/x86/kvm/lapic.c | 8 +- arch/x86/kvm/lapic.h | 15 +- arch/x86/kvm/mmu/page_track.c | 1 + arch/x86/kvm/mmu/page_track.h | 3 +- arch/x86/kvm/mmu/spte.h | 3 +- arch/x86/kvm/msrs.c | 5 + arch/x86/kvm/msrs.h | 3 +- arch/x86/kvm/pmu.c | 9 +- arch/x86/kvm/regs.h | 15 +- arch/x86/kvm/smm.c | 6 + arch/x86/kvm/smm.h | 2 +- arch/x86/kvm/svm/hyperv.c | 2 + arch/x86/kvm/svm/hyperv.h | 6 +- arch/x86/kvm/svm/nested.c | 30 +++- arch/x86/kvm/svm/sev.c | 18 ++ arch/x86/kvm/svm/svm.c | 32 ++++ arch/x86/kvm/svm/svm.h | 28 ++- arch/x86/kvm/vmx/hyperv.h | 6 +- arch/x86/kvm/vmx/main.c | 5 + arch/x86/kvm/vmx/nested.c | 54 +++++- arch/x86/kvm/vmx/nested.h | 19 +- arch/x86/kvm/vmx/sgx.c | 3 + arch/x86/kvm/vmx/sgx.h | 3 +- arch/x86/kvm/vmx/tdx.c | 9 + arch/x86/kvm/vmx/vmx.c | 11 ++ arch/x86/kvm/vmx/x86_ops.h | 24 ++- arch/x86/kvm/x86.c | 66 ++++++- arch/x86/kvm/x86.h | 37 ++-- include/linux/kvm_host.h | 215 ++++++++++++++++------- scripts/context-analysis-suppression.txt | 1 + virt/kvm/dirty_ring.c | 2 + virt/kvm/eventfd.c | 9 +- virt/kvm/guest_memfd.c | 21 ++- virt/kvm/kvm_main.c | 183 +++++++++++++------ virt/kvm/pfncache.c | 3 + 43 files changed, 745 insertions(+), 236 deletions(-) -- 2.55.0.1003.g10538fe699-goog