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:
@@ -40,6 +40,8 @@
|
||||
|
||||
/* Function declarations and documenation */
|
||||
|
||||
typedef int (*qdf_thread_os_func)(void *data);
|
||||
|
||||
/**
|
||||
* qdf_sleep() - sleep
|
||||
* @ms_interval : Number of milliseconds to suspend the current thread.
|
||||
@@ -117,6 +119,43 @@ qdf_thread_t *qdf_create_thread(int (*thread_handler)(void *data), void *data,
|
||||
}
|
||||
qdf_export_symbol(qdf_create_thread);
|
||||
|
||||
static uint16_t qdf_thread_id;
|
||||
|
||||
qdf_thread_t *qdf_thread_run(qdf_thread_func callback, void *context)
|
||||
{
|
||||
struct task_struct *thread;
|
||||
|
||||
thread = kthread_create((qdf_thread_os_func)callback, context,
|
||||
"qdf %u", qdf_thread_id++);
|
||||
if (IS_ERR(thread))
|
||||
return NULL;
|
||||
|
||||
get_task_struct(thread);
|
||||
wake_up_process(thread);
|
||||
|
||||
return thread;
|
||||
}
|
||||
qdf_export_symbol(qdf_thread_run);
|
||||
|
||||
QDF_STATUS qdf_thread_join(qdf_thread_t *thread)
|
||||
{
|
||||
QDF_STATUS status;
|
||||
|
||||
QDF_BUG(thread);
|
||||
|
||||
status = (QDF_STATUS)kthread_stop(thread);
|
||||
put_task_struct(thread);
|
||||
|
||||
return status;
|
||||
}
|
||||
qdf_export_symbol(qdf_thread_join);
|
||||
|
||||
bool qdf_thread_should_stop(void)
|
||||
{
|
||||
return kthread_should_stop();
|
||||
}
|
||||
qdf_export_symbol(qdf_thread_should_stop);
|
||||
|
||||
int qdf_wake_up_process(qdf_thread_t *thread)
|
||||
{
|
||||
return wake_up_process(thread);
|
||||
|
Reference in New Issue
Block a user