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

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.org


Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
parent c7202d20
Loading
Loading
Loading
Loading
+22 −2
Original line number Diff line number Diff line
@@ -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;
}