Skip to content

Commit

Permalink
ring-buffer: Remove redundant update of page timestamp
Browse files Browse the repository at this point in the history
The first commit of a buffer page updates the timestamp of that page. No
need to have the update to the next page add the timestamp too. It will only
be replaced by the first commit on that page anyway.

Only update to a page if it contains an event.

Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
  • Loading branch information
Steven Rostedt (Red Hat) committed Nov 24, 2015
1 parent 8573636 commit 7000498
Showing 1 changed file with 8 additions and 24 deletions.
32 changes: 8 additions & 24 deletions kernel/trace/ring_buffer.c
Original file line number Diff line number Diff line change
Expand Up @@ -1001,17 +1001,13 @@ static int rb_head_page_replace(struct buffer_page *old,

/*
* rb_tail_page_update - move the tail page forward
*
* Returns 1 if moved tail page, 0 if someone else did.
*/
static int rb_tail_page_update(struct ring_buffer_per_cpu *cpu_buffer,
static void rb_tail_page_update(struct ring_buffer_per_cpu *cpu_buffer,
struct buffer_page *tail_page,
struct buffer_page *next_page)
{
struct buffer_page *old_tail;
unsigned long old_entries;
unsigned long old_write;
int ret = 0;

/*
* The tail page now needs to be moved forward.
Expand Down Expand Up @@ -1061,14 +1057,9 @@ static int rb_tail_page_update(struct ring_buffer_per_cpu *cpu_buffer,
*/
local_set(&next_page->page->commit, 0);

old_tail = cmpxchg(&cpu_buffer->tail_page,
tail_page, next_page);

if (old_tail == tail_page)
ret = 1;
/* Again, either we update tail_page or an interrupt does */
(void)cmpxchg(&cpu_buffer->tail_page, tail_page, next_page);
}

return ret;
}

static int rb_check_bpage(struct ring_buffer_per_cpu *cpu_buffer,
Expand Down Expand Up @@ -2150,7 +2141,6 @@ rb_move_tail(struct ring_buffer_per_cpu *cpu_buffer,
struct ring_buffer *buffer = cpu_buffer->buffer;
struct buffer_page *next_page;
int ret;
u64 ts;

next_page = tail_page;

Expand Down Expand Up @@ -2224,15 +2214,7 @@ rb_move_tail(struct ring_buffer_per_cpu *cpu_buffer,
}
}

ret = rb_tail_page_update(cpu_buffer, tail_page, next_page);
if (ret) {
/*
* Nested commits always have zero deltas, so
* just reread the time stamp
*/
ts = rb_time_stamp(buffer);
next_page->page->time_stamp = ts;
}
rb_tail_page_update(cpu_buffer, tail_page, next_page);

out_again:

Expand Down Expand Up @@ -2422,8 +2404,10 @@ rb_set_commit_to_write(struct ring_buffer_per_cpu *cpu_buffer)
local_set(&cpu_buffer->commit_page->page->commit,
rb_page_write(cpu_buffer->commit_page));
rb_inc_page(cpu_buffer, &cpu_buffer->commit_page);
cpu_buffer->write_stamp =
cpu_buffer->commit_page->page->time_stamp;
/* Only update the write stamp if the page has an event */
if (rb_page_write(cpu_buffer->commit_page))
cpu_buffer->write_stamp =
cpu_buffer->commit_page->page->time_stamp;
/* add barrier to keep gcc from optimizing too much */
barrier();
}
Expand Down

0 comments on commit 7000498

Please sign in to comment.