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

Commit 9b1f2611 authored by Barry Kasindorf's avatar Barry Kasindorf Committed by Robert Richter
Browse files

OProfile: Fix buffer synchronization for IBS



The patch is needed since there is some IBS code in add_ibs_begin()
that handles more than one sample per iteration. This requires calling
get_slots() during each loop.

This fixes the current problem, but a proper solution that reworks the
cpu buffer synchronization is needed here in the future.

Signed-off-by: default avatarBarry Kasindorf <barry.kasindorf@amd.com>
Signed-off-by: default avatarRobert Richter <robert.richter@amd.com>
parent 4bd9b9dc
Loading
Loading
Loading
Loading
+7 −1
Original line number Diff line number Diff line
@@ -564,9 +564,11 @@ void sync_buffer(int cpu)
	struct task_struct *new;
	unsigned long cookie = 0;
	int in_kernel = 1;
	unsigned int i;
	sync_buffer_state state = sb_buffer_start;
#ifndef CONFIG_OPROFILE_IBS
	unsigned int i;
	unsigned long available;
#endif

	mutex_lock(&buffer_mutex);

@@ -574,9 +576,13 @@ void sync_buffer(int cpu)

	/* Remember, only we can modify tail_pos */

#ifndef CONFIG_OPROFILE_IBS
	available = get_slots(cpu_buf);

	for (i = 0; i < available; ++i) {
#else
	while (get_slots(cpu_buf)) {
#endif
		struct op_sample *s = &cpu_buf->buffer[cpu_buf->tail_pos];

		if (is_code(s->eip)) {