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

@@ -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);