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

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
...@@ -1865,11 +1865,8 @@ tracing_read_pipe(struct file *filp, char __user *ubuf, ...@@ -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]; data = iter->tr->data[cpu];
if (!cpu_isset(cpu, mask))
continue;
spin_unlock(&data->lock); spin_unlock(&data->lock);
atomic_dec(&data->disabled); atomic_dec(&data->disabled);
} }
...@@ -2076,6 +2073,7 @@ static int trace_alloc_page(void) ...@@ -2076,6 +2073,7 @@ static int trace_alloc_page(void)
for_each_possible_cpu(i) { for_each_possible_cpu(i) {
data = global_trace.data[i]; data = global_trace.data[i];
spin_lock_init(&data->lock); spin_lock_init(&data->lock);
lockdep_set_class(&data->lock, &data->lock_key);
page = list_entry(pages.next, struct page, lru); page = list_entry(pages.next, struct page, lru);
list_del_init(&page->lru); list_del_init(&page->lru);
list_add_tail(&page->lru, &data->trace_pages); list_add_tail(&page->lru, &data->trace_pages);
...@@ -2084,6 +2082,7 @@ static int trace_alloc_page(void) ...@@ -2084,6 +2082,7 @@ static int trace_alloc_page(void)
#ifdef CONFIG_TRACER_MAX_TRACE #ifdef CONFIG_TRACER_MAX_TRACE
data = max_tr.data[i]; data = max_tr.data[i];
spin_lock_init(&data->lock); spin_lock_init(&data->lock);
lockdep_set_class(&data->lock, &data->lock_key);
page = list_entry(pages.next, struct page, lru); page = list_entry(pages.next, struct page, lru);
list_del_init(&page->lru); list_del_init(&page->lru);
list_add_tail(&page->lru, &data->trace_pages); list_add_tail(&page->lru, &data->trace_pages);
...@@ -2203,5 +2202,4 @@ __init static int tracer_alloc_buffers(void) ...@@ -2203,5 +2202,4 @@ __init static int tracer_alloc_buffers(void)
} }
return ret; return ret;
} }
fs_initcall(tracer_alloc_buffers); fs_initcall(tracer_alloc_buffers);
...@@ -56,6 +56,7 @@ struct trace_array_cpu { ...@@ -56,6 +56,7 @@ struct trace_array_cpu {
struct list_head trace_pages; struct list_head trace_pages;
atomic_t disabled; atomic_t disabled;
spinlock_t lock; spinlock_t lock;
struct lock_class_key lock_key;
cycle_t time_offset; cycle_t time_offset;
/* these fields get copied into max-trace: */ /* these fields get copied into max-trace: */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment