Commit 6309727e authored by Andreas Gruenbacher's avatar Andreas Gruenbacher Committed by Andrew Morton
Browse files

kthread: add kthread_stop_put

Add a kthread_stop_put() helper that stops a thread and puts its task
struct.  Use it to replace the various instances of kthread_stop()
followed by put_task_struct().

Remove the kthread_stop_put() macro in usbip that is similar but doesn't
return the result of kthread_stop().

[agruenba@redhat.com: fix kerneldoc comment]
  Link: https://lkml.kernel.org/r/20230911111730.2565537-1-agruenba@redhat.com
[akpm@linux-foundation.org: document kthread_stop_put()'s argument]
Link: https://lkml.kernel.org/r/20230907234048.2499820-1-agruenba@redhat.com


Signed-off-by: default avatarAndreas Gruenbacher <agruenba@redhat.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
parent ed5378a3
Loading
Loading
Loading
Loading
+1 −2
Original line number Diff line number Diff line
@@ -618,6 +618,5 @@ int ivpu_job_done_thread_init(struct ivpu_device *vdev)

void ivpu_job_done_thread_fini(struct ivpu_device *vdev)
{
	kthread_stop(vdev->job_done_thread);
	put_task_struct(vdev->job_done_thread);
	kthread_stop_put(vdev->job_done_thread);
}
+4 −8
Original line number Diff line number Diff line
@@ -476,10 +476,9 @@ static int find_race(void *arg)
	for (i = 0; i < ncpus; i++) {
		int ret;

		ret = kthread_stop(threads[i]);
		ret = kthread_stop_put(threads[i]);
		if (ret && !err)
			err = ret;
		put_task_struct(threads[i]);
	}
	kfree(threads);

@@ -591,8 +590,7 @@ static int wait_forward(void *arg)
	for (i = 0; i < fc.chain_length; i++)
		dma_fence_signal(fc.fences[i]);

	err = kthread_stop(tsk);
	put_task_struct(tsk);
	err = kthread_stop_put(tsk);

err:
	fence_chains_fini(&fc);
@@ -621,8 +619,7 @@ static int wait_backward(void *arg)
	for (i = fc.chain_length; i--; )
		dma_fence_signal(fc.fences[i]);

	err = kthread_stop(tsk);
	put_task_struct(tsk);
	err = kthread_stop_put(tsk);

err:
	fence_chains_fini(&fc);
@@ -669,8 +666,7 @@ static int wait_random(void *arg)
	for (i = 0; i < fc.chain_length; i++)
		dma_fence_signal(fc.fences[i]);

	err = kthread_stop(tsk);
	put_task_struct(tsk);
	err = kthread_stop_put(tsk);

err:
	fence_chains_fini(&fc);
+1 −3
Original line number Diff line number Diff line
@@ -548,11 +548,9 @@ static int race_signal_callback(void *arg)
		for (i = 0; i < ARRAY_SIZE(t); i++) {
			int err;

			err = kthread_stop(t[i].task);
			err = kthread_stop_put(t[i].task);
			if (err && !ret)
				ret = err;

			put_task_struct(t[i].task);
		}
	}

+1 −3
Original line number Diff line number Diff line
@@ -719,11 +719,9 @@ static int threaded_migrate(struct intel_migrate *migrate,
		if (IS_ERR_OR_NULL(tsk))
			continue;

		status = kthread_stop(tsk);
		status = kthread_stop_put(tsk);
		if (status && !err)
			err = status;

		put_task_struct(tsk);
	}

	kfree(thread);
+1 −2
Original line number Diff line number Diff line
@@ -672,8 +672,7 @@ int xenvif_connect_ctrl(struct xenvif *vif, grant_ref_t ring_ref,
static void xenvif_disconnect_queue(struct xenvif_queue *queue)
{
	if (queue->task) {
		kthread_stop(queue->task);
		put_task_struct(queue->task);
		kthread_stop_put(queue->task);
		queue->task = NULL;
	}

Loading