Status: ok Move MlmeHandle processing into a thread This avoids problems with del_timer_sync being called from within the timer routine. Signed-off-by: Neil Brown ### Diffstat output ./Module/mlme.c | 8 ++++++++ ./Module/rtmp.h | 4 ++++ ./Module/rtmp_init.c | 6 ++++++ 3 files changed, 18 insertions(+) diff ./Module/mlme.c~current~ ./Module/mlme.c --- ./Module/mlme.c~current~ 2006-04-18 12:43:15.000000000 +1000 +++ ./Module/mlme.c 2006-04-18 12:53:10.000000000 +1000 @@ -353,6 +353,14 @@ NDIS_STATUS MlmeInit( VOID MlmeHandler( IN PRTMP_ADAPTER pAd) { +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)) + schedule_work(&pAd->mlme_work); +} + +VOID MlmeWork(void *vpAd) +{ + PRTMP_ADAPTER pAd = vpAd; +#endif MLME_QUEUE_ELEM *Elem = NULL; unsigned long flags; int loops = 0; diff ./Module/rtmp.h~current~ ./Module/rtmp.h --- ./Module/rtmp.h~current~ 2006-04-18 12:43:15.000000000 +1000 +++ ./Module/rtmp.h 2006-04-18 12:52:54.000000000 +1000 @@ -1037,6 +1037,10 @@ typedef struct _RTMP_ADAPTER #ifdef RALINK_ATE ATE_INFO ate; #endif //#ifdef RALINK_ATE + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)) + struct work_struct mlme_work; +#endif } RTMP_ADAPTER, *PRTMP_ADAPTER; // diff ./Module/rtmp_init.c~current~ ./Module/rtmp_init.c --- ./Module/rtmp_init.c~current~ 2006-04-18 12:43:15.000000000 +1000 +++ ./Module/rtmp_init.c 2006-04-18 12:53:56.000000000 +1000 @@ -897,6 +897,8 @@ VOID NICInitAsicFromEEPROM( DBGPRINT(RT_DEBUG_TRACE, "<-- NICInitAsicFromEEPROM\n"); } +extern VOID MlmeWork(void *vpAd); + void NICInitializeAdapter(IN PRTMP_ADAPTER pAdapter) { TXCSR2_STRUC TxCSR2; @@ -953,6 +955,10 @@ void NICInitializeAdapter(IN PRTMP_AD // Initialze ASIC for TX & Rx operation NICInitializeAsic(pAdapter); +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)) + INIT_WORK(&pAdapter->mlme_work, MlmeWork, (void*)pAdapter); +#endif + DBGPRINT(RT_DEBUG_TRACE, "<-- NICInitializeAdapter\n"); }