Re: [PATCH v3 08/16] perf: Force architectures to opt-in to guest callbacks

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 22/09/21 02:05, Sean Christopherson wrote:
Introduce GUEST_PERF_EVENTS and require architectures to select it to
allow registering and using guest callbacks in perf.  This will hopefully
make it more difficult for new architectures to add useless "support" for
guest callbacks, e.g. via copy+paste.

Stubbing out the helpers has the happy bonus of avoiding a load of
perf_guest_cbs when GUEST_PERF_EVENTS=n on arm64/x86.

Signed-off-by: Sean Christopherson <seanjc@xxxxxxxxxx>
---
  arch/arm64/kvm/Kconfig     | 1 +
  arch/x86/kvm/Kconfig       | 1 +
  arch/x86/xen/Kconfig       | 1 +
  include/linux/perf_event.h | 6 ++++++
  init/Kconfig               | 4 ++++
  kernel/events/core.c       | 2 ++
  6 files changed, 15 insertions(+)

diff --git a/arch/arm64/kvm/Kconfig b/arch/arm64/kvm/Kconfig
index a4eba0908bfa..f2121404c7c6 100644
--- a/arch/arm64/kvm/Kconfig
+++ b/arch/arm64/kvm/Kconfig
@@ -37,6 +37,7 @@ menuconfig KVM
  	select HAVE_KVM_IRQ_BYPASS
  	select HAVE_KVM_VCPU_RUN_PID_CHANGE
  	select SCHED_INFO
+	select GUEST_PERF_EVENTS if PERF_EVENTS
  	help
  	  Support hosting virtualized guest machines.
diff --git a/arch/x86/kvm/Kconfig b/arch/x86/kvm/Kconfig
index ac69894eab88..699bf786fbce 100644
--- a/arch/x86/kvm/Kconfig
+++ b/arch/x86/kvm/Kconfig
@@ -36,6 +36,7 @@ config KVM
  	select KVM_MMIO
  	select SCHED_INFO
  	select PERF_EVENTS
+	select GUEST_PERF_EVENTS
  	select HAVE_KVM_MSI
  	select HAVE_KVM_CPU_RELAX_INTERCEPT
  	select HAVE_KVM_NO_POLL
diff --git a/arch/x86/xen/Kconfig b/arch/x86/xen/Kconfig
index afc1da68b06d..d07595a9552d 100644
--- a/arch/x86/xen/Kconfig
+++ b/arch/x86/xen/Kconfig
@@ -23,6 +23,7 @@ config XEN_PV
  	select PARAVIRT_XXL
  	select XEN_HAVE_PVMMU
  	select XEN_HAVE_VPMU
+	select GUEST_PERF_EVENTS
  	help
  	  Support running as a Xen PV guest.
diff --git a/include/linux/perf_event.h b/include/linux/perf_event.h
index c0a6eaf55fb1..eefa197d5354 100644
--- a/include/linux/perf_event.h
+++ b/include/linux/perf_event.h
@@ -1238,6 +1238,7 @@ extern void perf_event_bpf_event(struct bpf_prog *prog,
  				 enum perf_bpf_event_type type,
  				 u16 flags);
+#ifdef CONFIG_GUEST_PERF_EVENTS
  extern struct perf_guest_info_callbacks *perf_guest_cbs;
  static inline struct perf_guest_info_callbacks *perf_get_guest_cbs(void)
  {
@@ -1273,6 +1274,11 @@ static inline unsigned int perf_guest_handle_intel_pt_intr(void)
  }
  extern void perf_register_guest_info_callbacks(struct perf_guest_info_callbacks *cbs);
  extern void perf_unregister_guest_info_callbacks(struct perf_guest_info_callbacks *cbs);
+#else
+static inline unsigned int perf_guest_state(void)		 { return 0; }
+static inline unsigned long perf_guest_get_ip(void)		 { return 0; }
+static inline unsigned int perf_guest_handle_intel_pt_intr(void) { return 0; }
+#endif /* CONFIG_GUEST_PERF_EVENTS */

Reviewed-by: Paolo Bonzini <pbonzini@xxxxxxxxxx>

Having perf_guest_handle_intel_pt_intr in generic code is a bit off. Of course it has to be in the struct, but the wrapper might be placed in arch/x86/include/asm/perf_event.h as well (applies to patch 7 as well).

Paolo




[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux