From: "Huang, Kai" <kai.huang@intel.com>
To: "seanjc@google.com" <seanjc@google.com>
Cc: "yosry@kernel.org" <yosry@kernel.org>,
"kvm@vger.kernel.org" <kvm@vger.kernel.org>,
"pbonzini@redhat.com" <pbonzini@redhat.com>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
"binbin.wu@linux.intel.com" <binbin.wu@linux.intel.com>,
"vkuznets@redhat.com" <vkuznets@redhat.com>
Subject: Re: [PATCH v4 18/30] KVM: x86: Move "struct kvm_x86_msr_filter" definition to msrs.c
Date: Tue, 16 Jun 2026 23:30:28 +0000 [thread overview]
Message-ID: <479741e62038c0e051c0fcfb3691b13afda80d06.camel@intel.com> (raw)
In-Reply-To: <ajF3il4nLemXBOle@google.com>
On Tue, 2026-06-16 at 09:19 -0700, Sean Christopherson wrote:
> On Tue, Jun 16, 2026, Kai Huang wrote:
> > On Tue, 2026-06-16 at 15:43 +0800, Binbin Wu wrote:
> > > > However, does moving the structure definition to "msrs.h" fix the problem?
> > >
> > > Yes, it does.
> > >
> > > Similar issue for struct kvm_x86_pmu_event_filter also could be resolved
> > > by moving the structure definition to "pmu.h"
> >
> > Thanks for confirming. I think we should do this.
>
> I really don't want to go that route, especially since there's absolutely no
> reason to use srcu_dereference_check() during destruction. KVM isn't actually
> checking anything, and the (S)RCU pointers _must_ be protected during destruction,
> otherwise use-after-free is all but guaranteed.
Yeah agreed.
>
> Unfortunately, every RCU macro I can find does typeof(*p) somewhere in its flow.
> But I would still strongly prefer to open code a __force to strip the __rcu than
> expose the structures outside of msrs.c and pmu.c.
>
> This makes gcc8 and gcc9 happy on my end. I'll squash the changes into their
> respective patches, and update the changelogs.
Fine to me (seems we are having more and more functional changes in this series
but this particular change may not be the case).
FWIW, I also tested CLANG that your diff builds successfully. I only tried
clang version 20.1.8 (Fedora 20.1.8-4.fc42) since I don't have other versions.
>
> diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
> index 95b3bc7b449e..b3c180e16e29 100644
> --- a/arch/x86/kvm/x86.c
> +++ b/arch/x86/kvm/x86.c
> @@ -9975,13 +9975,13 @@ void kvm_arch_destroy_vm(struct kvm *kvm)
> if (kvm->arch.created_mediated_pmu)
> perf_release_mediated_pmu();
> kvm_destroy_vcpus(kvm);
> - kvm_free_msr_filter(srcu_dereference_check(kvm->arch.msr_filter, &kvm->srcu, 1));
> + kvm_free_msr_filter((void * __force)kvm->arch.msr_filter);
> #ifdef CONFIG_KVM_IOAPIC
> kvm_pic_destroy(kvm);
> kvm_ioapic_destroy(kvm);
> #endif
> kvfree(rcu_dereference_check(kvm->arch.apic_map, 1));
Btw, this made me look at apic_map too. And seems we can also move "struct
kvm_apic_map" to "lapic.h". We cannot move it to lapic.c because
kvm_sched_yield() in x86.c actually references the members of the structure.
next prev parent reply other threads:[~2026-06-16 23:30 UTC|newest]
Thread overview: 92+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-06-13 0:02 [PATCH v4 00/30] KVM: x86: x86.{c,h} spring cleaning Sean Christopherson
2026-06-13 0:03 ` [PATCH v4 01/30] KVM: x86: Extract REGS and SREGS runtime sync code to helpers Sean Christopherson
2026-06-15 2:16 ` Huang, Kai
2026-06-15 5:02 ` Binbin Wu
2026-06-13 0:03 ` [PATCH v4 02/30] KVM: x86: Move get_segment_base() to regs.h, as kvm_get_segment_base() Sean Christopherson
2026-06-15 2:43 ` Huang, Kai
2026-06-15 5:03 ` Binbin Wu
2026-06-13 0:03 ` [PATCH v4 03/30] KVM: x86: Rename __{g,s}et_sregs2() => kvm_x86_vcpu_ioctl_{g,s}et_sregs2() Sean Christopherson
2026-06-15 2:46 ` Huang, Kai
2026-06-15 5:13 ` Binbin Wu
2026-06-15 15:58 ` Sean Christopherson
2026-06-13 0:03 ` [PATCH v4 04/30] KVM: x86: Move the bulk of register specific code from x86.c to regs.c Sean Christopherson
2026-06-15 5:25 ` Binbin Wu
2026-06-13 0:03 ` [PATCH v4 05/30] KVM: x86: Move local APIC specific helpers out of asm/kvm_host.h Sean Christopherson
2026-06-15 5:47 ` Binbin Wu
2026-06-15 16:06 ` Sean Christopherson
2026-06-13 0:03 ` [PATCH v4 06/30] KVM: x86: Move kvm_caps and kvm_host_values to asm/kvm_host.h Sean Christopherson
2026-06-13 9:01 ` Xiaoyao Li
2026-06-15 6:49 ` Binbin Wu
2026-06-15 16:24 ` Sean Christopherson
2026-06-16 8:18 ` Xiaoyao Li
2026-06-13 0:03 ` [PATCH v4 07/30] KVM: x86: Swap the include order between x86.h and mmu.h Sean Christopherson
2026-06-15 7:26 ` Binbin Wu
2026-06-13 0:03 ` [PATCH v4 08/30] KVM: x86: Move tdp_enabled from kvm_host.h to mmu.h Sean Christopherson
2026-06-15 7:33 ` Binbin Wu
2026-06-13 0:03 ` [PATCH v4 09/30] KVM: x86: Move eager_page_split to mmu.{c,h} Sean Christopherson
2026-06-15 7:49 ` Binbin Wu
2026-06-16 17:19 ` Sean Christopherson
2026-06-13 0:03 ` [PATCH v4 10/30] KVM: x86/hyperv: Eliminate an unnecessary include of x86.h in hyperv.h Sean Christopherson
2026-06-15 7:52 ` Binbin Wu
2026-06-13 0:03 ` [PATCH v4 11/30] KVM: x86: Move kvm_{load,put}_guest_fpu() to fpu.h Sean Christopherson
2026-06-15 8:13 ` Binbin Wu
2026-06-15 16:31 ` Sean Christopherson
2026-06-13 0:03 ` [PATCH v4 12/30] KVM: x86: Extract get/set MSR (list) ioctl logic to helpers Sean Christopherson
2026-06-15 8:30 ` Binbin Wu
2026-06-13 0:03 ` [PATCH v4 13/30] KVM: x86: Expose several TSC helpers via x86.h for use by MSR code Sean Christopherson
2026-06-13 0:03 ` [PATCH v4 14/30] KVM: x86: Move the bulk of MSR specific code from x86.c to msrs.{c,h} Sean Christopherson
2026-06-15 9:30 ` Binbin Wu
2026-06-13 0:03 ` [PATCH v4 15/30] KVM: x86: Move register helper declarations from kvm_host.h => regs.h Sean Christopherson
2026-06-16 2:15 ` Binbin Wu
2026-06-13 0:03 ` [PATCH v4 16/30] KVM: x86: Move kvm_{g,s}et_segment() to inline helpers in regs.h Sean Christopherson
2026-06-16 2:19 ` Binbin Wu
2026-06-13 0:03 ` [PATCH v4 17/30] KVM: x86: Move MSR helper declarations from kvm_host.h => msrs.h Sean Christopherson
2026-06-16 2:25 ` Binbin Wu
2026-06-13 0:03 ` [PATCH v4 18/30] KVM: x86: Move "struct kvm_x86_msr_filter" definition to msrs.c Sean Christopherson
2026-06-15 2:47 ` Huang, Kai
2026-06-16 3:12 ` Binbin Wu
2026-06-16 6:29 ` Binbin Wu
2026-06-16 7:29 ` Huang, Kai
2026-06-16 7:43 ` Binbin Wu
2026-06-16 7:46 ` Huang, Kai
2026-06-16 16:19 ` Sean Christopherson
2026-06-16 23:30 ` Huang, Kai [this message]
2026-06-16 23:45 ` Sean Christopherson
2026-06-13 0:03 ` [PATCH v4 19/30] KVM: x86/pmu: Move "struct kvm_x86_pmu_event_filter" definition to pmu.c Sean Christopherson
2026-06-15 2:48 ` Huang, Kai
2026-06-16 3:18 ` Binbin Wu
2026-06-13 0:03 ` [PATCH v4 20/30] KVM: x86: Move MMU helper declarations from kvm_host.h => mmu.h Sean Christopherson
2026-06-16 5:04 ` Binbin Wu
2026-06-13 0:03 ` [PATCH v4 21/30] KVM: x86: Move LLDT assembly wrappers into VMX Sean Christopherson
2026-06-16 6:40 ` Binbin Wu
2026-06-13 0:03 ` [PATCH v4 22/30] KVM: x86: Move misc "VALID MASK" defines from kvm_host.h => x86.c Sean Christopherson
2026-06-16 6:46 ` Binbin Wu
2026-06-13 0:03 ` [PATCH v4 23/30] KVM: x86: Move __kvm_irq_line_state() from kvm_host.h => ioapic.h Sean Christopherson
2026-06-16 6:50 ` Binbin Wu
2026-06-13 0:03 ` [PATCH v4 24/30] KVM: x86: Move IRQ-related helper declarations from kvm_host.h => irq.h Sean Christopherson
2026-06-15 11:55 ` Huang, Kai
2026-06-16 6:55 ` Binbin Wu
2026-06-13 0:03 ` [PATCH v4 25/30] KVM: x86: Move kvm_pv_send_ipi() declaration from kvm_host.h => lapic.h Sean Christopherson
2026-06-16 6:58 ` Binbin Wu
2026-06-13 0:03 ` [PATCH v4 26/30] KVM: x86: Don't treat interrupts as allowed just because a nested run is pending Sean Christopherson
2026-06-15 16:40 ` Yosry Ahmed
2026-06-15 16:43 ` Yosry Ahmed
2026-06-15 17:03 ` Sean Christopherson
2026-06-15 19:37 ` Yosry Ahmed
2026-06-15 17:26 ` Sean Christopherson
2026-06-15 19:48 ` Yosry Ahmed
2026-06-16 17:46 ` Sean Christopherson
2026-06-16 18:08 ` Yosry Ahmed
2026-06-13 0:03 ` [PATCH v4 27/30] KVM: x86: Rework kvm_arch_interrupt_allowed() into kvm_is_interrupt_allowed() Sean Christopherson
2026-06-13 0:03 ` [PATCH v4 28/30] KVM: x86/mmu: Move kvm_arch_async_page_ready() below kvm_tdp_page_fault() Sean Christopherson
2026-06-16 8:40 ` Binbin Wu
2026-06-13 0:03 ` [PATCH v4 29/30] KVM: x86/mmu: Move kvm_mmu_do_page_fault() from mmu_internal.h => mmu.c Sean Christopherson
2026-06-16 8:48 ` Binbin Wu
2026-06-13 0:03 ` [PATCH v4 30/30] KVM: x86: Move a pile of stuff from kvm_host.h => x86.h Sean Christopherson
2026-06-15 13:01 ` Huang, Kai
2026-06-15 14:23 ` Sean Christopherson
2026-06-24 12:30 ` [PATCH v4 00/30] KVM: x86: x86.{c,h} spring cleaning Paolo Bonzini
2026-06-24 12:55 ` Sean Christopherson
2026-06-24 13:00 ` Paolo Bonzini
2026-06-24 13:02 ` Sean Christopherson
2026-06-24 14:37 ` Sean Christopherson
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=479741e62038c0e051c0fcfb3691b13afda80d06.camel@intel.com \
--to=kai.huang@intel.com \
--cc=binbin.wu@linux.intel.com \
--cc=kvm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=pbonzini@redhat.com \
--cc=seanjc@google.com \
--cc=vkuznets@redhat.com \
--cc=yosry@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
Powered by JetHome