Commit ee458aa7 authored by Steven Rostedt (VMware)'s avatar Steven Rostedt (VMware) Committed by Greg Kroah-Hartman

tracing: Clean up the hwlat binding code

[ Upstream commit f447c196 ]

Instead of initializing the affinity of the hwlat kthread in the thread
itself, simply set up the initial affinity at thread creation. This
simplifies the code.
Signed-off-by: default avatarSteven Rostedt (VMware) <rostedt@goodmis.org>
Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
parent b907dd1d
......@@ -268,24 +268,13 @@ static int get_sample(void)
static struct cpumask save_cpumask;
static bool disable_migrate;
static void move_to_next_cpu(bool initmask)
static void move_to_next_cpu(void)
{
static struct cpumask *current_mask;
struct cpumask *current_mask = &save_cpumask;
int next_cpu;
if (disable_migrate)
return;
/* Just pick the first CPU on first iteration */
if (initmask) {
current_mask = &save_cpumask;
get_online_cpus();
cpumask_and(current_mask, cpu_online_mask, tracing_buffer_mask);
put_online_cpus();
next_cpu = cpumask_first(current_mask);
goto set_affinity;
}
/*
* If for some reason the user modifies the CPU affinity
* of this thread, than stop migrating for the duration
......@@ -302,7 +291,6 @@ static void move_to_next_cpu(bool initmask)
if (next_cpu >= nr_cpu_ids)
next_cpu = cpumask_first(current_mask);
set_affinity:
if (next_cpu >= nr_cpu_ids) /* Shouldn't happen! */
goto disable;
......@@ -332,12 +320,10 @@ static void move_to_next_cpu(bool initmask)
static int kthread_fn(void *data)
{
u64 interval;
bool initmask = true;
while (!kthread_should_stop()) {
move_to_next_cpu(initmask);
initmask = false;
move_to_next_cpu();
local_irq_disable();
get_sample();
......@@ -368,13 +354,27 @@ static int kthread_fn(void *data)
*/
static int start_kthread(struct trace_array *tr)
{
struct cpumask *current_mask = &save_cpumask;
struct task_struct *kthread;
int next_cpu;
/* Just pick the first CPU on first iteration */
current_mask = &save_cpumask;
get_online_cpus();
cpumask_and(current_mask, cpu_online_mask, tracing_buffer_mask);
put_online_cpus();
next_cpu = cpumask_first(current_mask);
kthread = kthread_create(kthread_fn, NULL, "hwlatd");
if (IS_ERR(kthread)) {
pr_err(BANNER "could not start sampling thread\n");
return -ENOMEM;
}
cpumask_clear(current_mask);
cpumask_set_cpu(next_cpu, current_mask);
sched_setaffinity(kthread->pid, current_mask);
hwlat_kthread = kthread;
wake_up_process(kthread);
......
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