aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/events/core.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/events/core.c')
-rw-r--r--kernel/events/core.c14
1 files changed, 7 insertions, 7 deletions
diff --git a/kernel/events/core.c b/kernel/events/core.c
index 9e0773d5d110..f2003b97ddc9 100644
--- a/kernel/events/core.c
+++ b/kernel/events/core.c
@@ -4331,20 +4331,20 @@ static void ring_buffer_attach(struct perf_event *event,
4331 WARN_ON_ONCE(event->rcu_pending); 4331 WARN_ON_ONCE(event->rcu_pending);
4332 4332
4333 old_rb = event->rb; 4333 old_rb = event->rb;
4334 event->rcu_batches = get_state_synchronize_rcu();
4335 event->rcu_pending = 1;
4336
4337 spin_lock_irqsave(&old_rb->event_lock, flags); 4334 spin_lock_irqsave(&old_rb->event_lock, flags);
4338 list_del_rcu(&event->rb_entry); 4335 list_del_rcu(&event->rb_entry);
4339 spin_unlock_irqrestore(&old_rb->event_lock, flags); 4336 spin_unlock_irqrestore(&old_rb->event_lock, flags);
4340 }
4341 4337
4342 if (event->rcu_pending && rb) { 4338 event->rcu_batches = get_state_synchronize_rcu();
4343 cond_synchronize_rcu(event->rcu_batches); 4339 event->rcu_pending = 1;
4344 event->rcu_pending = 0;
4345 } 4340 }
4346 4341
4347 if (rb) { 4342 if (rb) {
4343 if (event->rcu_pending) {
4344 cond_synchronize_rcu(event->rcu_batches);
4345 event->rcu_pending = 0;
4346 }
4347
4348 spin_lock_irqsave(&rb->event_lock, flags); 4348 spin_lock_irqsave(&rb->event_lock, flags);
4349 list_add_rcu(&event->rb_entry, &rb->event_list); 4349 list_add_rcu(&event->rb_entry, &rb->event_list);
4350 spin_unlock_irqrestore(&rb->event_lock, flags); 4350 spin_unlock_irqrestore(&rb->event_lock, flags);