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

Commit d4c5a2f5 authored by Ingo Molnar's avatar Ingo Molnar Committed by Thomas Gleixner
Browse files

ftrace: fix locking



we can hold all cpu trace buffer locks at once - put each into a
separate lock class.

Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
parent b3806b43
Loading
Loading
Loading
Loading
+3 −5
Original line number Diff line number Diff line
@@ -1865,11 +1865,8 @@ tracing_read_pipe(struct file *filp, char __user *ubuf,

	}

	for_each_possible_cpu(cpu) {
	for_each_cpu_mask(cpu, mask) {
		data = iter->tr->data[cpu];

		if (!cpu_isset(cpu, mask))
			continue;
		spin_unlock(&data->lock);
		atomic_dec(&data->disabled);
	}
@@ -2076,6 +2073,7 @@ static int trace_alloc_page(void)
	for_each_possible_cpu(i) {
		data = global_trace.data[i];
		spin_lock_init(&data->lock);
		lockdep_set_class(&data->lock, &data->lock_key);
		page = list_entry(pages.next, struct page, lru);
		list_del_init(&page->lru);
		list_add_tail(&page->lru, &data->trace_pages);
@@ -2084,6 +2082,7 @@ static int trace_alloc_page(void)
#ifdef CONFIG_TRACER_MAX_TRACE
		data = max_tr.data[i];
		spin_lock_init(&data->lock);
		lockdep_set_class(&data->lock, &data->lock_key);
		page = list_entry(pages.next, struct page, lru);
		list_del_init(&page->lru);
		list_add_tail(&page->lru, &data->trace_pages);
@@ -2203,5 +2202,4 @@ __init static int tracer_alloc_buffers(void)
	}
	return ret;
}

fs_initcall(tracer_alloc_buffers);
+1 −0
Original line number Diff line number Diff line
@@ -56,6 +56,7 @@ struct trace_array_cpu {
	struct list_head	trace_pages;
	atomic_t		disabled;
	spinlock_t		lock;
	struct lock_class_key	lock_key;
	cycle_t			time_offset;

	/* these fields get copied into max-trace: */