Commit 2aef6f30 authored by Sean Christopherson's avatar Sean Christopherson Committed by Peter Zijlstra
Browse files

perf: Force architectures to opt-in to guest callbacks



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: default avatarSean Christopherson <seanjc@google.com>
Signed-off-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
Reviewed-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
Link: https://lore.kernel.org/r/20211111020738.2512932-9-seanjc@google.com
parent 1c343051
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -39,6 +39,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.

+1 −0
Original line number Diff line number Diff line
@@ -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
+1 −0
Original line number Diff line number Diff line
@@ -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.

+6 −0
Original line number Diff line number Diff line
@@ -1242,6 +1242,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 __rcu *perf_guest_cbs;
static inline struct perf_guest_info_callbacks *perf_get_guest_cbs(void)
{
@@ -1280,6 +1281,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 */

extern void perf_event_exec(void);
extern void perf_event_comm(struct task_struct *tsk, bool exec);
+4 −0
Original line number Diff line number Diff line
@@ -1804,6 +1804,10 @@ config HAVE_PERF_EVENTS
	help
	  See tools/perf/design.txt for details.

config GUEST_PERF_EVENTS
	bool
	depends on HAVE_PERF_EVENTS

config PERF_USE_VMALLOC
	bool
	help
Loading