On Wed, May 08, 2024 at 02:58:30PM +0800, Zhang, Xiong Y wrote: > On 5/7/2024 5:22 PM, Peter Zijlstra wrote: > > On Mon, May 06, 2024 at 05:29:37AM +0000, Mingwei Zhang wrote: > >> From: Xiong Zhang <xiong.y.zhang@xxxxxxxxxxxxxxx> > >> +void x86_perf_guest_enter(u32 guest_lvtpc) > >> +{ > >> + lockdep_assert_irqs_disabled(); > >> + > >> + apic_write(APIC_LVTPC, APIC_DM_FIXED | KVM_GUEST_PMI_VECTOR | > >> + (guest_lvtpc & APIC_LVT_MASKED)); > >> +} > >> +EXPORT_SYMBOL_GPL(x86_perf_guest_enter); > >> + > >> +void x86_perf_guest_exit(void) > >> +{ > >> + lockdep_assert_irqs_disabled(); > >> + > >> + apic_write(APIC_LVTPC, APIC_DM_NMI); > >> +} > >> +EXPORT_SYMBOL_GPL(x86_perf_guest_exit); > > > > Urgghh... because it makes sense for this bare APIC write to be exported > > ?!? > Usually KVM doesn't access HW except vmx directly and requests other > components to access HW to avoid confliction, APIC_LVTPC is managed by x86 > perf driver, so I added two functions here and exported them. Yes, I understand how you got here. But as with everything you export, you should ask yourself, should I export this. The above x86_perf_guest_enter() function allows any module to write random LVTPC entries. That's not a good thing to export. I utterly detest how KVM is a module and ends up exporting a ton of stuff that *really* should not be exported.