qcacmn: Add qdf_thread_run and qdf_thread_join APIs

For cases where you want to create and immediately start a thread, the
Linux kernel has the kthread_run() API. Create a QDF wrapper for
kthread_run() as well as companion APIs for waiting for a thread to exit
and one to check if the current thread should exit.

Change-Id: Ia4e107010fc400f764661a9b36aceea970841ade
CRs-Fixed: 2270827
This commit is contained in:
Dustin Brown
2018-06-29 16:54:06 -07:00
committed by nshrivas
parent d6c3b87fcd
commit 352de8a613
2 changed files with 73 additions and 1 deletions

View File

@@ -1,5 +1,5 @@
/*
* Copyright (c) 2014-2017 The Linux Foundation. All rights reserved.
* Copyright (c) 2014-2018 The Linux Foundation. All rights reserved.
*
* Permission to use, copy, modify, and/or distribute this software for
* any purpose with or without fee is hereby granted, provided that the
@@ -28,6 +28,7 @@
#include "i_qdf_threads.h"
typedef __qdf_thread_t qdf_thread_t;
typedef QDF_STATUS (*qdf_thread_func)(void *context);
/* Function declarations and documenation */
@@ -56,6 +57,38 @@ void qdf_set_user_nice(qdf_thread_t *thread, long nice);
qdf_thread_t *qdf_create_thread(int (*thread_handler)(void *data), void *data,
const char thread_name[]);
/**
* qdf_thread_run() - run the given function in a new thread
*
* You must call qdf_thread_join() to avoid a reasource leak!
*
* For more flexibility, use qdf_create_thread() instead.
*
* Return: a new qdf_thread pointer
*/
qdf_thread_t *qdf_thread_run(qdf_thread_func callback, void *context);
/**
* qdf_thread_join() - signal and wait for a thread to stop
*
* This sets a flag that the given thread can check to see if it should exit.
* The thread can check to see if this flag has been set by calling
* qdf_thread_should_stop().
*
* Return: QDF_STATUS - the return value from the thread function
*/
QDF_STATUS qdf_thread_join(qdf_thread_t *thread);
/**
* qdf_thread_should_stop() - true if the current thread was signalled to stop
*
* If qdf_thread_join() has been called on the current thread, this API returns
* true. Otherwise, this returns false.
*
* Return: true if the current thread should stop
*/
bool qdf_thread_should_stop(void);
/**
* qdf_wake_up_process() - wake up given thread
* @thread: pointer to thread which needs to be woken up