From 3793142e6946fe6a6e2d437d223c937356bed2dd Mon Sep 17 00:00:00 2001 From: Vince Weaver Date: Wed, 1 Jun 2011 15:15:36 -0400 Subject: [PATCH] --- yaml --- r: 257058 b: refs/heads/master c: 4ec8363dfc1451f8c8f86825731fe712798ada02 h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/kernel/events/core.c | 6 ++++-- trunk/kernel/events/ring_buffer.c | 16 +++++++++------- 3 files changed, 14 insertions(+), 10 deletions(-) diff --git a/[refs] b/[refs] index 9e2cc92d1c41..fd8f231364a4 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 0f933625e7b6c3d91878ae95e341bf1984db7eaf +refs/heads/master: 4ec8363dfc1451f8c8f86825731fe712798ada02 diff --git a/trunk/kernel/events/core.c b/trunk/kernel/events/core.c index 5e70f62752a2..e4aee519572d 100644 --- a/trunk/kernel/events/core.c +++ b/trunk/kernel/events/core.c @@ -3569,8 +3569,10 @@ static int perf_mmap(struct file *file, struct vm_area_struct *vma) if (vma->vm_flags & VM_WRITE) flags |= RING_BUFFER_WRITABLE; - rb = rb_alloc(nr_pages, event->attr.wakeup_watermark, - event->cpu, flags); + rb = rb_alloc(nr_pages, + event->attr.watermark ? event->attr.wakeup_watermark : 0, + event->cpu, flags); + if (!rb) { ret = -ENOMEM; goto unlock; diff --git a/trunk/kernel/events/ring_buffer.c b/trunk/kernel/events/ring_buffer.c index fde52595d8f7..fc2701c99207 100644 --- a/trunk/kernel/events/ring_buffer.c +++ b/trunk/kernel/events/ring_buffer.c @@ -199,13 +199,15 @@ void perf_output_end(struct perf_output_handle *handle) struct perf_event *event = handle->event; struct ring_buffer *rb = handle->rb; - int wakeup_events = event->attr.wakeup_events; - - if (handle->sample && wakeup_events) { - int events = local_inc_return(&rb->events); - if (events >= wakeup_events) { - local_sub(wakeup_events, &rb->events); - local_inc(&rb->wakeup); + if (handle->sample && !event->attr.watermark) { + int wakeup_events = event->attr.wakeup_events; + + if (wakeup_events) { + int events = local_inc_return(&rb->events); + if (events >= wakeup_events) { + local_sub(wakeup_events, &rb->events); + local_inc(&rb->wakeup); + } } }