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

Commit cc867094 authored by Ingo Molnar's avatar Ingo Molnar
Browse files

Merge branch 'perf/urgent' into perf/core, to pick up fixes



Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
parents 496156e3 9d5dcc93
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -3134,7 +3134,7 @@ static unsigned long intel_pmu_large_pebs_flags(struct perf_event *event)
		flags &= ~PERF_SAMPLE_TIME;
	if (!event->attr.exclude_kernel)
		flags &= ~PERF_SAMPLE_REGS_USER;
	if (event->attr.sample_regs_user & ~PEBS_REGS)
	if (event->attr.sample_regs_user & ~PEBS_GP_REGS)
		flags &= ~(PERF_SAMPLE_REGS_USER | PERF_SAMPLE_REGS_INTR);
	return flags;
}
+19 −19
Original line number Diff line number Diff line
@@ -95,25 +95,25 @@ struct amd_nb {
	PERF_SAMPLE_REGS_INTR | PERF_SAMPLE_REGS_USER | \
	PERF_SAMPLE_PERIOD)

#define PEBS_REGS \
	(PERF_REG_X86_AX | \
	 PERF_REG_X86_BX | \
	 PERF_REG_X86_CX | \
	 PERF_REG_X86_DX | \
	 PERF_REG_X86_DI | \
	 PERF_REG_X86_SI | \
	 PERF_REG_X86_SP | \
	 PERF_REG_X86_BP | \
	 PERF_REG_X86_IP | \
	 PERF_REG_X86_FLAGS | \
	 PERF_REG_X86_R8 | \
	 PERF_REG_X86_R9 | \
	 PERF_REG_X86_R10 | \
	 PERF_REG_X86_R11 | \
	 PERF_REG_X86_R12 | \
	 PERF_REG_X86_R13 | \
	 PERF_REG_X86_R14 | \
	 PERF_REG_X86_R15)
#define PEBS_GP_REGS			\
	((1ULL << PERF_REG_X86_AX)    | \
	 (1ULL << PERF_REG_X86_BX)    | \
	 (1ULL << PERF_REG_X86_CX)    | \
	 (1ULL << PERF_REG_X86_DX)    | \
	 (1ULL << PERF_REG_X86_DI)    | \
	 (1ULL << PERF_REG_X86_SI)    | \
	 (1ULL << PERF_REG_X86_SP)    | \
	 (1ULL << PERF_REG_X86_BP)    | \
	 (1ULL << PERF_REG_X86_IP)    | \
	 (1ULL << PERF_REG_X86_FLAGS) | \
	 (1ULL << PERF_REG_X86_R8)    | \
	 (1ULL << PERF_REG_X86_R9)    | \
	 (1ULL << PERF_REG_X86_R10)   | \
	 (1ULL << PERF_REG_X86_R11)   | \
	 (1ULL << PERF_REG_X86_R12)   | \
	 (1ULL << PERF_REG_X86_R13)   | \
	 (1ULL << PERF_REG_X86_R14)   | \
	 (1ULL << PERF_REG_X86_R15))

/*
 * Per register state.
+21 −16
Original line number Diff line number Diff line
@@ -9077,26 +9077,29 @@ static void perf_event_addr_filters_apply(struct perf_event *event)
	if (task == TASK_TOMBSTONE)
		return;

	if (!ifh->nr_file_filters)
		return;

	if (ifh->nr_file_filters) {
		mm = get_task_mm(event->ctx->task);
		if (!mm)
			goto restart;

		down_read(&mm->mmap_sem);
	}

	raw_spin_lock_irqsave(&ifh->lock, flags);
	list_for_each_entry(filter, &ifh->list, entry) {
		if (filter->path.dentry) {
			/*
			 * Adjust base offset if the filter is associated to a
			 * binary that needs to be mapped:
			 */
			event->addr_filter_ranges[count].start = 0;
			event->addr_filter_ranges[count].size = 0;

		/*
		 * Adjust base offset if the filter is associated to a binary
		 * that needs to be mapped:
		 */
		if (filter->path.dentry)
			perf_addr_filter_apply(filter, mm, &event->addr_filter_ranges[count]);
		} else {
			event->addr_filter_ranges[count].start = filter->offset;
			event->addr_filter_ranges[count].size  = filter->size;
		}

		count++;
	}
@@ -9104,9 +9107,11 @@ static void perf_event_addr_filters_apply(struct perf_event *event)
	event->addr_filters_gen++;
	raw_spin_unlock_irqrestore(&ifh->lock, flags);

	if (ifh->nr_file_filters) {
		up_read(&mm->mmap_sem);

		mmput(mm);
	}

restart:
	perf_event_stop(event, 1);
+15 −18
Original line number Diff line number Diff line
@@ -455,7 +455,6 @@ void perf_aux_output_end(struct perf_output_handle *handle, unsigned long size)
		rb->aux_head += size;
	}

	if (size || handle->aux_flags) {
	/*
	 * Only send RECORD_AUX if we have something useful to communicate
	 *
@@ -468,11 +467,9 @@ void perf_aux_output_end(struct perf_output_handle *handle, unsigned long size)
	 * offset. So, from now on we don't output AUX records that
	 * have *only* OVERWRITE flag set.
	 */

		if (handle->aux_flags & ~(u64)PERF_AUX_FLAG_OVERWRITE)
	if (size || (handle->aux_flags & ~(u64)PERF_AUX_FLAG_OVERWRITE))
		perf_event_aux_event(handle->event, aux_head, size,
				     handle->aux_flags);
	}

	rb->user_page->aux_head = rb->aux_head;
	if (rb_need_aux_wakeup(rb))
+2 −4
Original line number Diff line number Diff line
@@ -709,7 +709,6 @@ static void unoptimize_kprobe(struct kprobe *p, bool force)
static int reuse_unused_kprobe(struct kprobe *ap)
{
	struct optimized_kprobe *op;
	int ret;

	/*
	 * Unused kprobe MUST be on the way of delayed unoptimizing (means
@@ -720,9 +719,8 @@ static int reuse_unused_kprobe(struct kprobe *ap)
	/* Enable the probe again */
	ap->flags &= ~KPROBE_FLAG_DISABLED;
	/* Optimize it again (remove from op->list) */
	ret = kprobe_optready(ap);
	if (ret)
		return ret;
	if (!kprobe_optready(ap))
		return -EINVAL;

	optimize_kprobe(ap);
	return 0;