Commit 165da802 authored by Namhyung Kim's avatar Namhyung Kim Committed by Arnaldo Carvalho de Melo

perf sched: Factor out destroy_tasks()

Add destroy_tasks() as a counterpart of create_tasks() and put the
thread safety notations there.  After join, it destroys semaphores too.
Signed-off-by: default avatarNamhyung Kim <namhyung@kernel.org>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Ian Rogers <irogers@google.com>
Cc: Ingo Molnar <mingo@kernel.org>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Link: https://lore.kernel.org/r/20220908225448.4105056-1-namhyung@kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
parent c7202d20
......@@ -690,6 +690,27 @@ static void create_tasks(struct perf_sched *sched)
}
}
static void destroy_tasks(struct perf_sched *sched)
UNLOCK_FUNCTION(sched->start_work_mutex)
UNLOCK_FUNCTION(sched->work_done_wait_mutex)
{
struct task_desc *task;
unsigned long i;
int err;
mutex_unlock(&sched->start_work_mutex);
mutex_unlock(&sched->work_done_wait_mutex);
/* Get rid of threads so they won't be upset by mutex destrunction */
for (i = 0; i < sched->nr_tasks; i++) {
task = sched->tasks[i];
err = pthread_join(task->thread, NULL);
BUG_ON(err);
sem_destroy(&task->sleep_sem);
sem_destroy(&task->ready_for_work);
sem_destroy(&task->work_done_sem);
}
}
static void wait_for_tasks(struct perf_sched *sched)
EXCLUSIVE_LOCKS_REQUIRED(sched->work_done_wait_mutex)
EXCLUSIVE_LOCKS_REQUIRED(sched->start_work_mutex)
......@@ -3324,8 +3345,7 @@ static int perf_sched__replay(struct perf_sched *sched)
run_one_test(sched);
sched->thread_funcs_exit = true;
mutex_unlock(&sched->start_work_mutex);
mutex_unlock(&sched->work_done_wait_mutex);
destroy_tasks(sched);
return 0;
}
......
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