Unverified Commit 8d9b9796 authored by openeuler-ci-bot's avatar openeuler-ci-bot Committed by Gitee
Browse files

!2461 perf/core: Fix reentry problem in perf_output_read_group()

parents 36b20b20 15eed3de
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -6208,9 +6208,16 @@ static void perf_output_read_group(struct perf_output_handle *handle,
{
	struct perf_event *leader = event->group_leader, *sub;
	u64 read_format = event->attr.read_format;
	unsigned long flags;
	u64 values[5];
	int n = 0;

	/*
	 * Disabling interrupts avoids all counter scheduling
	 * (context switches, timer based rotation and IPIs).
	 */
	local_irq_save(flags);

	values[n++] = 1 + leader->nr_siblings;

	if (read_format & PERF_FORMAT_TOTAL_TIME_ENABLED)
@@ -6242,6 +6249,8 @@ static void perf_output_read_group(struct perf_output_handle *handle,

		__output_copy(handle, values, n * sizeof(u64));
	}

	local_irq_restore(flags);
}

#define PERF_FORMAT_TOTAL_TIMES (PERF_FORMAT_TOTAL_TIME_ENABLED|\