diff -ruN a/core/rtw_mp.c b/core/rtw_mp.c --- a/core/rtw_mp.c 2012-07-30 12:51:05.000000000 +0000 +++ b/core/rtw_mp.c 2013-03-17 19:00:28.393782000 +0000 @@ -1140,8 +1140,7 @@ _rtw_memset(ptr, payload, pkt_end - ptr); //3 6. start thread - pmp_priv->tx.PktTxThread = kernel_thread(mp_xmit_packet_thread, pmp_priv, CLONE_FS|CLONE_FILES); - if(pmp_priv->tx.PktTxThread < 0) + if(!start_kthread(&pmp_priv->tx.PktTxThread, mp_xmit_packet_thread, pmp_priv, "8192cu-mp-xmit")) DBG_871X("Create PktTx Thread Fail !!!!!\n"); } diff -ruN a/include/osdep_service.h b/include/osdep_service.h --- a/include/osdep_service.h 2012-07-30 12:51:05.000000000 +0000 +++ b/include/osdep_service.h 2013-03-17 17:37:39.105483734 +0000 @@ -100,6 +100,9 @@ #include #endif +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,7,0)) + #include +#endif #ifdef CONFIG_USB_HCI typedef struct urb * PURB; @@ -133,8 +136,12 @@ //typedef u32 _irqL; typedef unsigned long _irqL; typedef struct net_device * _nic_hdl; - + +#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,7,0)) typedef pid_t _thread_hdl_; +#else + typedef struct task_struct * _thread_hdl_; +#endif typedef int thread_return; typedef void* thread_context; @@ -572,7 +579,7 @@ #ifdef PLATFORM_LINUX //struct net_device *pnetdev = (struct net_device *)context; //daemonize("%s", pnetdev->name); - daemonize("%s", "RTKTHREAD"); + //daemonize("%s", "RTKTHREAD"); allow_signal(SIGTERM); #endif } @@ -827,4 +834,8 @@ #endif +#ifdef PLATFORM_LINUX +extern int start_kthread(_thread_hdl_ *t_hdl, int (*threadfn)(void *data), + void *data, const char *name); +#endif diff -ruN a/include/rtw_recv.h b/include/rtw_recv.h --- a/include/rtw_recv.h 2012-07-30 12:51:05.000000000 +0000 +++ b/include/rtw_recv.h 2013-03-17 17:35:36.136873966 +0000 @@ -623,8 +623,9 @@ //from any given member of recv_frame. // rxmem indicates the any member/address in recv_frame - return (union recv_frame*)(((uint)rxmem>>RXFRAME_ALIGN) <>RXFRAME_ALIGN) <> RXFRAME_ALIGN) << RXFRAME_ALIGN); + return (union recv_frame*)(((ulong)rxmem>>RXFRAME_ALIGN) <xmitThread = kernel_thread(rtw_xmit_thread, padapter, CLONE_FS|CLONE_FILES); - if(padapter->xmitThread < 0) + if(!start_kthread(&padapter->xmitThread, rtw_xmit_thread, padapter, "8192cu-xmit")) _status = _FAIL; #endif #ifdef CONFIG_RECV_THREAD_MODE - padapter->recvThread = kernel_thread(recv_thread, padapter, CLONE_FS|CLONE_FILES); - if(padapter->recvThread < 0) + if(!start_kthread(&padapter->recvThread, recv_thread, padapter, "8192cu-recv")) _status = _FAIL; #endif - padapter->cmdThread = kernel_thread(rtw_cmd_thread, padapter, CLONE_FS|CLONE_FILES); - if(padapter->cmdThread < 0) + if(!start_kthread(&padapter->cmdThread, rtw_cmd_thread, padapter, "8192cu-cmd")) _status = _FAIL; else _rtw_down_sema(&padapter->cmdpriv.terminate_cmdthread_sema); //wait for cmd_thread to run - #ifdef CONFIG_EVENT_THREAD_MODE - padapter->evtThread = kernel_thread(event_thread, padapter, CLONE_FS|CLONE_FILES); - if(padapter->evtThread < 0) + if(!start_kthread(&padapter->evtThread, event_thread, padapter, "8192cu-evt")) _status = _FAIL; #endif diff -ruN a/os_dep/osdep_service.c b/os_dep/osdep_service.c --- a/os_dep/osdep_service.c 2012-07-30 12:51:05.000000000 +0000 +++ b/os_dep/osdep_service.c 2013-03-17 19:00:28.393782000 +0000 @@ -1553,3 +1553,19 @@ #endif } +#ifdef PLATFORM_LINUX +int start_kthread(_thread_hdl_ *t_hdl, int (*threadfn)(void *data), + void *data, const char *name) +{ +#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,7,0)) + *t_hdl = kernel_thread(threadfn, data, CLONE_FS|CLONE_FILES); + if(*t_hdl < 0) +#else + *t_hdl = kthread_run(threadfn, data, name); + if(IS_ERR(*t_hdl)) +#endif + return 0; + return -1; +} +#endif +