Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8d3b9323 authored by Avi Kivity's avatar Avi Kivity
Browse files

Merge remote branch 'tip/perf/core'



Signed-off-by: default avatarAvi Kivity <avi@redhat.com>
parents d1476937 6eca8cc3
Loading
Loading
Loading
Loading
+14 −6
Original line number Diff line number Diff line
@@ -1752,23 +1752,31 @@ void perf_arch_fetch_caller_regs(struct pt_regs *regs, unsigned long ip, int ski
unsigned long perf_instruction_pointer(struct pt_regs *regs)
{
	unsigned long ip;

	if (perf_guest_cbs && perf_guest_cbs->is_in_guest())
		ip = perf_guest_cbs->get_guest_ip();
	else
		ip = instruction_pointer(regs);

	return ip;
}

unsigned long perf_misc_flags(struct pt_regs *regs)
{
	int misc = 0;

	if (perf_guest_cbs && perf_guest_cbs->is_in_guest()) {
		misc |= perf_guest_cbs->is_user_mode() ?
			PERF_RECORD_MISC_GUEST_USER :
			PERF_RECORD_MISC_GUEST_KERNEL;
	} else
		misc |= user_mode(regs) ? PERF_RECORD_MISC_USER :
			PERF_RECORD_MISC_KERNEL;
		if (perf_guest_cbs->is_user_mode())
			misc |= PERF_RECORD_MISC_GUEST_USER;
		else
			misc |= PERF_RECORD_MISC_GUEST_KERNEL;
	} else {
		if (user_mode(regs))
			misc |= PERF_RECORD_MISC_USER;
		else
			misc |= PERF_RECORD_MISC_KERNEL;
	}

	if (regs->flags & PERF_EFLAGS_EXACT)
		misc |= PERF_RECORD_MISC_EXACT;

+4 −0
Original line number Diff line number Diff line
@@ -3965,16 +3965,20 @@ static int kvm_is_in_guest(void)
static int kvm_is_user_mode(void)
{
	int user_mode = 3;

	if (percpu_read(current_vcpu))
		user_mode = kvm_x86_ops->get_cpl(percpu_read(current_vcpu));

	return user_mode != 0;
}

static unsigned long kvm_get_guest_ip(void)
{
	unsigned long ip = 0;

	if (percpu_read(current_vcpu))
		ip = kvm_rip_read(percpu_read(current_vcpu));

	return ip;
}

+4 −6
Original line number Diff line number Diff line
@@ -941,10 +941,8 @@ static inline void perf_event_mmap(struct vm_area_struct *vma)
}

extern struct perf_guest_info_callbacks *perf_guest_cbs;
extern int perf_register_guest_info_callbacks(
		struct perf_guest_info_callbacks *);
extern int perf_unregister_guest_info_callbacks(
		struct perf_guest_info_callbacks *);
extern int perf_register_guest_info_callbacks(struct perf_guest_info_callbacks *callbacks);
extern int perf_unregister_guest_info_callbacks(struct perf_guest_info_callbacks *callbacks);

extern void perf_event_comm(struct task_struct *tsk);
extern void perf_event_fork(struct task_struct *tsk);
@@ -1016,9 +1014,9 @@ static inline void
perf_bp_event(struct perf_event *event, void *data)			{ }

static inline int perf_register_guest_info_callbacks
(struct perf_guest_info_callbacks *) {return 0; }
(struct perf_guest_info_callbacks *callbacks) { return 0; }
static inline int perf_unregister_guest_info_callbacks
(struct perf_guest_info_callbacks *) {return 0; }
(struct perf_guest_info_callbacks *callbacks) { return 0; }

static inline void perf_event_mmap(struct vm_area_struct *vma)		{ }
static inline void perf_event_comm(struct task_struct *tsk)		{ }
+1 −1
Original line number Diff line number Diff line
@@ -1263,7 +1263,7 @@ static struct strlist *get_kprobe_trace_event_names(int fd, bool include_group)

static int write_kprobe_trace_event(int fd, struct kprobe_trace_event *tev)
{
	int ret;
	int ret = 0;
	char *buf = synthesize_kprobe_trace_command(tev);

	if (!buf) {