From: tip-bot for Vaibhav Nagarnaik <vnagarnaik@google.com>
To: linux-tip-commits@vger.kernel.org
Cc: linux-kernel@vger.kernel.org, vnagarnaik@google.com,
hpa@zytor.com, mingo@kernel.org, dhsharp@google.com,
rostedt@goodmis.org, chavey@google.com, tglx@linutronix.de,
teravest@google.com
Subject: [tip:perf/core] ring-buffer: Merge separate resize loops
Date: Mon, 21 May 2012 02:44:52 -0700 [thread overview]
Message-ID: <tip-05fdd70d2fe1e34d8b80ec56d6e3272d9293653e@git.kernel.org> (raw)
In-Reply-To: <1337372991-14783-1-git-send-email-vnagarnaik@google.com>
Commit-ID: 05fdd70d2fe1e34d8b80ec56d6e3272d9293653e
Gitweb: http://git.kernel.org/tip/05fdd70d2fe1e34d8b80ec56d6e3272d9293653e
Author: Vaibhav Nagarnaik <vnagarnaik@google.com>
AuthorDate: Fri, 18 May 2012 13:29:51 -0700
Committer: Steven Rostedt <rostedt@goodmis.org>
CommitDate: Sat, 19 May 2012 08:28:50 -0400
ring-buffer: Merge separate resize loops
There are 2 separate loops to resize cpu buffers that are online and
offline. Merge them to make the code look better.
Also change the name from update_completion to update_done to allow
shorter lines.
Link: http://lkml.kernel.org/r/1337372991-14783-1-git-send-email-vnagarnaik@google.com
Cc: Laurent Chavey <chavey@google.com>
Cc: Justin Teravest <teravest@google.com>
Cc: David Sharp <dhsharp@google.com>
Signed-off-by: Vaibhav Nagarnaik <vnagarnaik@google.com>
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
---
kernel/trace/ring_buffer.c | 41 +++++++++++++++--------------------------
1 files changed, 15 insertions(+), 26 deletions(-)
diff --git a/kernel/trace/ring_buffer.c b/kernel/trace/ring_buffer.c
index 68388f8..6420cda 100644
--- a/kernel/trace/ring_buffer.c
+++ b/kernel/trace/ring_buffer.c
@@ -473,7 +473,7 @@ struct ring_buffer_per_cpu {
int nr_pages_to_update;
struct list_head new_pages; /* new pages to add */
struct work_struct update_pages_work;
- struct completion update_completion;
+ struct completion update_done;
};
struct ring_buffer {
@@ -1058,7 +1058,7 @@ rb_allocate_cpu_buffer(struct ring_buffer *buffer, int nr_pages, int cpu)
lockdep_set_class(&cpu_buffer->reader_lock, buffer->reader_lock_key);
cpu_buffer->lock = (arch_spinlock_t)__ARCH_SPIN_LOCK_UNLOCKED;
INIT_WORK(&cpu_buffer->update_pages_work, update_pages_handler);
- init_completion(&cpu_buffer->update_completion);
+ init_completion(&cpu_buffer->update_done);
bpage = kzalloc_node(ALIGN(sizeof(*bpage), cache_line_size()),
GFP_KERNEL, cpu_to_node(cpu));
@@ -1461,7 +1461,7 @@ static void update_pages_handler(struct work_struct *work)
struct ring_buffer_per_cpu *cpu_buffer = container_of(work,
struct ring_buffer_per_cpu, update_pages_work);
rb_update_pages(cpu_buffer);
- complete(&cpu_buffer->update_completion);
+ complete(&cpu_buffer->update_done);
}
/**
@@ -1534,39 +1534,29 @@ int ring_buffer_resize(struct ring_buffer *buffer, unsigned long size,
get_online_cpus();
/*
* Fire off all the required work handlers
- * Look out for offline CPUs
- */
- for_each_buffer_cpu(buffer, cpu) {
- cpu_buffer = buffer->buffers[cpu];
- if (!cpu_buffer->nr_pages_to_update ||
- !cpu_online(cpu))
- continue;
-
- schedule_work_on(cpu, &cpu_buffer->update_pages_work);
- }
- /*
- * This loop is for the CPUs that are not online.
- * We can't schedule anything on them, but it's not necessary
+ * We can't schedule on offline CPUs, but it's not necessary
* since we can change their buffer sizes without any race.
*/
for_each_buffer_cpu(buffer, cpu) {
cpu_buffer = buffer->buffers[cpu];
- if (!cpu_buffer->nr_pages_to_update ||
- cpu_online(cpu))
+ if (!cpu_buffer->nr_pages_to_update)
continue;
- rb_update_pages(cpu_buffer);
+ if (cpu_online(cpu))
+ schedule_work_on(cpu,
+ &cpu_buffer->update_pages_work);
+ else
+ rb_update_pages(cpu_buffer);
}
/* wait for all the updates to complete */
for_each_buffer_cpu(buffer, cpu) {
cpu_buffer = buffer->buffers[cpu];
- if (!cpu_buffer->nr_pages_to_update ||
- !cpu_online(cpu))
+ if (!cpu_buffer->nr_pages_to_update)
continue;
- wait_for_completion(&cpu_buffer->update_completion);
- /* reset this value */
+ if (cpu_online(cpu))
+ wait_for_completion(&cpu_buffer->update_done);
cpu_buffer->nr_pages_to_update = 0;
}
@@ -1593,13 +1583,12 @@ int ring_buffer_resize(struct ring_buffer *buffer, unsigned long size,
if (cpu_online(cpu_id)) {
schedule_work_on(cpu_id,
&cpu_buffer->update_pages_work);
- wait_for_completion(&cpu_buffer->update_completion);
+ wait_for_completion(&cpu_buffer->update_done);
} else
rb_update_pages(cpu_buffer);
- put_online_cpus();
- /* reset this value */
cpu_buffer->nr_pages_to_update = 0;
+ put_online_cpus();
}
out:
prev parent reply other threads:[~2012-05-21 9:45 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-05-18 20:29 [PATCH] tracing: Merge separate resize loops Vaibhav Nagarnaik
2012-05-19 1:56 ` Steven Rostedt
2012-05-19 3:00 ` Vaibhav Nagarnaik
2012-05-19 3:19 ` Steven Rostedt
2012-05-19 4:57 ` Vaibhav Nagarnaik
2012-05-21 9:44 ` tip-bot for Vaibhav Nagarnaik [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=tip-05fdd70d2fe1e34d8b80ec56d6e3272d9293653e@git.kernel.org \
--to=vnagarnaik@google.com \
--cc=chavey@google.com \
--cc=dhsharp@google.com \
--cc=hpa@zytor.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-tip-commits@vger.kernel.org \
--cc=mingo@kernel.org \
--cc=rostedt@goodmis.org \
--cc=teravest@google.com \
--cc=tglx@linutronix.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox