mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-10 21:07:02 +09:00
UPSTREAM: 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: Sean Christopherson <seanjc@google.com>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
Link: https://lore.kernel.org/r/20211111020738.2512932-9-seanjc@google.com
(cherry picked from commit 2aef6f306b)
Signed-off-by: Will Deacon <willdeacon@google.com>
Bug: 233587962
Bug: 233588291
Change-Id: I098ae1986a3749ecef2d318c88094f551f3a128f
This commit is contained in:
committed by
Will Deacon
parent
d97ef4912b
commit
5945311ca4
@@ -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.
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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.
|
||||
|
||||
|
||||
@@ -1232,6 +1232,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)
|
||||
{
|
||||
@@ -1270,6 +1271,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);
|
||||
|
||||
@@ -1815,6 +1815,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
|
||||
|
||||
@@ -6599,6 +6599,7 @@ static void perf_pending_event(struct irq_work *entry)
|
||||
perf_swevent_put_recursion_context(rctx);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_GUEST_PERF_EVENTS
|
||||
struct perf_guest_info_callbacks __rcu *perf_guest_cbs;
|
||||
|
||||
void perf_register_guest_info_callbacks(struct perf_guest_info_callbacks *cbs)
|
||||
@@ -6619,6 +6620,7 @@ void perf_unregister_guest_info_callbacks(struct perf_guest_info_callbacks *cbs)
|
||||
synchronize_rcu();
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(perf_unregister_guest_info_callbacks);
|
||||
#endif
|
||||
|
||||
static void
|
||||
perf_output_sample_regs(struct perf_output_handle *handle,
|
||||
|
||||
Reference in New Issue
Block a user