--- 2008_0718_RT2870_Linux_STA_v1.3.1.0/common/2870_rtmp_init.c 2008-05-06 16:17:24.000000000 +1000 +++ 2008_0718_RT2870_Linux_STA_v1.3.1.0/common/2870_rtmp_init.c 2008-09-06 11:20:56.559015479 +1000 @@ -727,8 +727,8 @@ NDIS_STATUS AdapterBlockAllocateMemory( usb_dev = pObj->pUsb_Dev; - pObj->MLMEThr_pid = -1; - pObj->RTUSBCmdThr_pid = -1; + pObj->MLMEThr_pid = NULL; + pObj->RTUSBCmdThr_pid = NULL; *ppAd = (PVOID)vmalloc(sizeof(RTMP_ADAPTER)); @@ -818,6 +818,8 @@ NDIS_STATUS CreateThreads( { PRTMP_ADAPTER pAd = (PRTMP_ADAPTER) net_dev->priv; POS_COOKIE pObj = (POS_COOKIE) pAd->OS_Cookie; + + pid_t nr; //init_MUTEX(&(pAd->usbdev_semaphore)); @@ -831,33 +833,44 @@ NDIS_STATUS CreateThreads( init_completion (&pAd->TimerQComplete); // Creat MLME Thread - pObj->MLMEThr_pid= -1; - pObj->MLMEThr_pid = kernel_thread(MlmeThread, pAd, CLONE_VM); - if (pObj->MLMEThr_pid < 0) + pObj->MLMEThr_pid= NULL; + nr = kernel_thread(MlmeThread, pAd, CLONE_VM); + + if (nr < 0) { printk (KERN_WARNING "%s: unable to start Mlme thread\n",pAd->net_dev->name); return NDIS_STATUS_FAILURE; } + + pObj->MLMEThr_pid = find_get_pid(nr); + // Wait for the thread to start wait_for_completion(&(pAd->mlmeComplete)); // Creat Command Thread - pObj->RTUSBCmdThr_pid= -1; - pObj->RTUSBCmdThr_pid = kernel_thread(RTUSBCmdThread, pAd, CLONE_VM); - if (pObj->RTUSBCmdThr_pid < 0) - { + pObj->RTUSBCmdThr_pid= NULL; + nr = kernel_thread(RTUSBCmdThread, pAd, CLONE_VM); + + if( nr < 0 ) { printk (KERN_WARNING "%s: unable to start RTUSBCmd thread\n",pAd->net_dev->name); return NDIS_STATUS_FAILURE; - } + } + + pObj->RTUSBCmdThr_pid = find_get_pid(nr); + wait_for_completion(&(pAd->CmdQComplete)); - pObj->TimerQThr_pid= -1; - pObj->TimerQThr_pid = kernel_thread(TimerQThread, pAd, CLONE_VM); - if (pObj->TimerQThr_pid < 0) + pObj->TimerQThr_pid= NULL; + nr = kernel_thread(TimerQThread, pAd, CLONE_VM); + + if (nr < 0) { printk (KERN_WARNING "%s: unable to start TimerQThread\n",pAd->net_dev->name); return NDIS_STATUS_FAILURE; } + + pObj->TimerQThr_pid = find_get_pid(nr); + // Wait for the thread to start wait_for_completion(&(pAd->TimerQComplete)); --- 2008_0718_RT2870_Linux_STA_v1.3.1.0/include/rt_linux.h 2008-07-18 11:51:38.000000000 +1000 +++ 2008_0718_RT2870_Linux_STA_v1.3.1.0/include/rt_linux.h 2008-09-06 11:17:52.079514910 +1000 @@ -63,6 +63,7 @@ #include <linux/if_arp.h> #include <linux/ctype.h> #include <linux/vmalloc.h> +#include <linux/pid.h> #include <linux/wireless.h> @@ -156,9 +157,9 @@ struct os_cookie { #ifdef RT2870 struct usb_device *pUsb_Dev; - pid_t MLMEThr_pid; - pid_t RTUSBCmdThr_pid; - pid_t TimerQThr_pid; + struct pid *MLMEThr_pid; + struct pid *RTUSBCmdThr_pid; + struct pid *TimerQThr_pid; #endif // RT2870 // struct tasklet_struct rx_done_task; --- 2008_0718_RT2870_Linux_STA_v1.3.1.0/os/linux/2870_main_dev.c 2008-05-28 18:12:44.000000000 +1000 +++ 2008_0718_RT2870_Linux_STA_v1.3.1.0/os/linux/2870_main_dev.c 2008-09-06 10:29:23.103014793 +1000 @@ -298,7 +298,7 @@ INT MlmeThread( */ DBGPRINT(RT_DEBUG_TRACE,( "<---%s\n",__FUNCTION__)); - pObj->MLMEThr_pid = -1; + pObj->MLMEThr_pid = NULL; complete_and_exit (&pAd->mlmeComplete, 0); return 0; @@ -404,7 +404,7 @@ INT RTUSBCmdThread( */ DBGPRINT(RT_DEBUG_TRACE,( "<---RTUSBCmdThread\n")); - pObj->RTUSBCmdThr_pid = -1; + pObj->RTUSBCmdThr_pid = NULL; complete_and_exit (&pAd->CmdQComplete, 0); return 0; @@ -497,7 +497,7 @@ INT TimerQThread( */ DBGPRINT(RT_DEBUG_TRACE,( "<---%s\n",__FUNCTION__)); - pObj->TimerQThr_pid = -1; + pObj->TimerQThr_pid = NULL; complete_and_exit(&pAd->TimerQComplete, 0); return 0; @@ -973,68 +973,68 @@ VOID RT28xxThreadTerminate( RTUSBCancelPendingIRPs(pAd); // Terminate Threads - if (pObj->TimerQThr_pid >= 0) + if (pid_nr(pObj->TimerQThr_pid) >= 0) { POS_COOKIE pObj = (POS_COOKIE)pAd->OS_Cookie; - printk("Terminate the TimerQThr_pid=%d!\n", pObj->TimerQThr_pid); + printk("Terminate the TimerQThr_pid=%d!\n", pid_nr(pObj->TimerQThr_pid)); mb(); pAd->TimerFunc_kill = 1; mb(); - ret = kill_proc(pObj->TimerQThr_pid, SIGTERM, 1); + ret = kill_pid(pObj->TimerQThr_pid, SIGTERM, 1); if (ret) { printk(KERN_WARNING "%s: unable to stop TimerQThread, pid=%d, ret=%d!\n", - pAd->net_dev->name, pObj->TimerQThr_pid, ret); + pAd->net_dev->name, pid_nr(pObj->TimerQThr_pid), ret); } else { wait_for_completion(&pAd->TimerQComplete); - pObj->TimerQThr_pid = -1; + pObj->TimerQThr_pid = NULL; } } - if (pObj->MLMEThr_pid >= 0) + if (pid_nr(pObj->MLMEThr_pid) >= 0) { - printk("Terminate the MLMEThr_pid=%d!\n", pObj->MLMEThr_pid); + printk("Terminate the MLMEThr_pid=%d!\n", pid_nr(pObj->MLMEThr_pid)); mb(); pAd->mlme_kill = 1; //RT28XX_MLME_HANDLER(pAd); mb(); - ret = kill_proc (pObj->MLMEThr_pid, SIGTERM, 1); + ret = kill_pid (pObj->MLMEThr_pid, SIGTERM, 1); if (ret) { printk (KERN_WARNING "%s: unable to Mlme thread, pid=%d, ret=%d!\n", - pAd->net_dev->name, pObj->MLMEThr_pid, ret); + pAd->net_dev->name, pid_nr(pObj->MLMEThr_pid), ret); } else { //wait_for_completion (&pAd->notify); wait_for_completion (&pAd->mlmeComplete); - pObj->MLMEThr_pid = -1; + pObj->MLMEThr_pid = NULL; } } - if (pObj->RTUSBCmdThr_pid >= 0) + if (pid_nr(pObj->RTUSBCmdThr_pid) >= 0) { - printk("Terminate the RTUSBCmdThr_pid=%d!\n", pObj->RTUSBCmdThr_pid); + printk("Terminate the RTUSBCmdThr_pid=%d!\n", pid_nr(pObj->RTUSBCmdThr_pid)); mb(); NdisAcquireSpinLock(&pAd->CmdQLock); pAd->CmdQ.CmdQState = RT2870_THREAD_STOPED; NdisReleaseSpinLock(&pAd->CmdQLock); mb(); //RTUSBCMDUp(pAd); - ret = kill_proc(pObj->RTUSBCmdThr_pid, SIGTERM, 1); + ret = kill_pid(pObj->RTUSBCmdThr_pid, SIGTERM, 1); if (ret) { printk(KERN_WARNING "%s: unable to RTUSBCmd thread, pid=%d, ret=%d!\n", - pAd->net_dev->name, pObj->RTUSBCmdThr_pid, ret); + pAd->net_dev->name, pid_nr(pObj->RTUSBCmdThr_pid), ret); } else { //wait_for_completion (&pAd->notify); wait_for_completion (&pAd->CmdQComplete); - pObj->RTUSBCmdThr_pid = -1; + pObj->RTUSBCmdThr_pid = NULL; } } --- 2008_0718_RT2870_Linux_STA_v1.3.1.0/os/linux/rt_ate.c 2008-05-28 18:13:08.000000000 +1000 +++ 2008_0718_RT2870_Linux_STA_v1.3.1.0/os/linux/rt_ate.c 2008-09-06 01:56:35.341266116 +1000 @@ -4176,7 +4176,7 @@ VOID RtmpDoAte( // We must kill ATE daemon first before setting ATESTOP, // or Microsoft will report sth. wrong. #ifndef UCOS - ret = kill_proc(pAdapter->ate.AtePid, SIGTERM, 1); + ret = kill_pid(pAdapter->ate.AtePid, SIGTERM, 1); if (ret) { ATEDBGPRINT(RT_DEBUG_ERROR, ("%s: unable to signal thread\n", pAdapter->net_dev->name));