All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] perf sched: Factor out destroy_tasks()
@ 2022-09-08 22:54 Namhyung Kim
  2022-09-09 13:22 ` Arnaldo Carvalho de Melo
  0 siblings, 1 reply; 2+ messages in thread
From: Namhyung Kim @ 2022-09-08 22:54 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo, Jiri Olsa
  Cc: Ingo Molnar, Peter Zijlstra, LKML, Ian Rogers, Adrian Hunter,
	linux-perf-users

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: Namhyung Kim <namhyung@kernel.org>
---
 tools/perf/builtin-sched.c | 24 ++++++++++++++++++++++--
 1 file changed, 22 insertions(+), 2 deletions(-)

diff --git a/tools/perf/builtin-sched.c b/tools/perf/builtin-sched.c
index a92610eac4bf..f93737eef07b 100644
--- a/tools/perf/builtin-sched.c
+++ b/tools/perf/builtin-sched.c
@@ -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;
 }
 
-- 
2.37.2.789.g6183377224-goog


^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: [PATCH] perf sched: Factor out destroy_tasks()
  2022-09-08 22:54 [PATCH] perf sched: Factor out destroy_tasks() Namhyung Kim
@ 2022-09-09 13:22 ` Arnaldo Carvalho de Melo
  0 siblings, 0 replies; 2+ messages in thread
From: Arnaldo Carvalho de Melo @ 2022-09-09 13:22 UTC (permalink / raw)
  To: Namhyung Kim
  Cc: Jiri Olsa, Ingo Molnar, Peter Zijlstra, LKML, Ian Rogers,
	Adrian Hunter, linux-perf-users

Em Thu, Sep 08, 2022 at 03:54:48PM -0700, Namhyung Kim escreveu:
> Add destroy_tasks() as a counterpart of create_tasks() and put the
> thread safety notations there.  After join, it destroys semaphores too.

Thanks, applied.

- Arnaldo

 
> Signed-off-by: Namhyung Kim <namhyung@kernel.org>
> ---
>  tools/perf/builtin-sched.c | 24 ++++++++++++++++++++++--
>  1 file changed, 22 insertions(+), 2 deletions(-)
> 
> diff --git a/tools/perf/builtin-sched.c b/tools/perf/builtin-sched.c
> index a92610eac4bf..f93737eef07b 100644
> --- a/tools/perf/builtin-sched.c
> +++ b/tools/perf/builtin-sched.c
> @@ -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;
>  }
>  
> -- 
> 2.37.2.789.g6183377224-goog

-- 

- Arnaldo

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2022-09-09 13:23 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-09-08 22:54 [PATCH] perf sched: Factor out destroy_tasks() Namhyung Kim
2022-09-09 13:22 ` Arnaldo Carvalho de Melo

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.