--- a/src/include/drv_dsl_cpe_pm_core.h +++ b/src/include/drv_dsl_cpe_pm_core.h @@ -1510,9 +1510,9 @@ typedef struct /** Common PM module mutex*/ DSL_DRV_Mutex_t pmMutex; /** PM module direction Near-End mutex*/ - DSL_DRV_Mutex_t pmNeMutex; + struct semaphore pmNeMutex; /** PM module direction Far-End mutex*/ - DSL_DRV_Mutex_t pmFeMutex; + struct semaphore pmFeMutex; /** PM module Near-End access mutex*/ DSL_DRV_Mutex_t pmNeAccessMutex; /** PM module Far-End access mutex*/ --- a/src/pm/drv_dsl_cpe_api_pm.c +++ b/src/pm/drv_dsl_cpe_api_pm.c @@ -220,9 +220,9 @@ DSL_Error_t DSL_DRV_PM_Start( /* init PM module common mutex */ DSL_DRV_MUTEX_INIT(DSL_DRV_PM_CONTEXT(pContext)->pmMutex); /* init PM module direction Near-End mutex */ - DSL_DRV_MUTEX_INIT(DSL_DRV_PM_CONTEXT(pContext)->pmNeMutex); + sema_init(&(DSL_DRV_PM_CONTEXT(pContext)->pmNeMutex),1); /* init PM module direction Far-End mutex */ - DSL_DRV_MUTEX_INIT(DSL_DRV_PM_CONTEXT(pContext)->pmFeMutex); + sema_init(&(DSL_DRV_PM_CONTEXT(pContext)->pmFeMutex),1); /* init PM module Near-End access mutex */ DSL_DRV_MUTEX_INIT(DSL_DRV_PM_CONTEXT(pContext)->pmNeAccessMutex); /* init PM module Far-End access mutex */ @@ -592,7 +592,7 @@ DSL_Error_t DSL_DRV_PM_Stop( if( DSL_DRV_PM_CONTEXT(pContext)->pmThreadFe.bRun != DSL_TRUE ) { DSL_DEBUG(DSL_DBG_WRN, - (pContext, SYS_DBG_WRN"DSL[%02d]: PM module Near-End thread already stopped" + (pContext, SYS_DBG_WRN"DSL[%02d]: PM module Far-End thread already stopped" DSL_DRV_CRLF, DSL_DEV_NUM(pContext))); } else --- a/src/pm/drv_dsl_cpe_pm_core.c +++ b/src/pm/drv_dsl_cpe_pm_core.c @@ -1022,7 +1022,7 @@ DSL_Error_t DSL_DRV_PM_DirectionMutexCon { if( bLock ) { - if( DSL_DRV_MUTEX_LOCK(DSL_DRV_PM_CONTEXT(pContext)->pmNeMutex) ) + if(down_interruptible(&(DSL_DRV_PM_CONTEXT(pContext)->pmNeMutex))) { DSL_DEBUG( DSL_DBG_ERR, (pContext, SYS_DBG_ERR"DSL[%02d]: ERROR - Couldn't lock PM NE mutex!" @@ -1034,14 +1034,14 @@ DSL_Error_t DSL_DRV_PM_DirectionMutexCon else { /* Unlock PM module NE Mutex*/ - DSL_DRV_MUTEX_UNLOCK(DSL_DRV_PM_CONTEXT(pContext)->pmNeMutex); + up(&(DSL_DRV_PM_CONTEXT(pContext)->pmNeMutex)); } } else { if( bLock ) { - if( DSL_DRV_MUTEX_LOCK(DSL_DRV_PM_CONTEXT(pContext)->pmFeMutex) ) + if(down_interruptible(&(DSL_DRV_PM_CONTEXT(pContext)->pmFeMutex))) { DSL_DEBUG( DSL_DBG_ERR, (pContext, SYS_DBG_ERR"DSL[%02d]: ERROR - Couldn't lock PM FE mutex!" @@ -1053,7 +1053,7 @@ DSL_Error_t DSL_DRV_PM_DirectionMutexCon else { /* Unlock PM module FE Mutex*/ - DSL_DRV_MUTEX_UNLOCK(DSL_DRV_PM_CONTEXT(pContext)->pmFeMutex); + up(&(DSL_DRV_PM_CONTEXT(pContext)->pmFeMutex)); } } @@ -1139,7 +1139,7 @@ DSL_Error_t DSL_DRV_PM_Lock(DSL_Context_ if( !(DSL_DRV_PM_CONTEXT(pContext)->bPmLock) ) { /* Lock PM module Near-End Mutex*/ - if( DSL_DRV_MUTEX_LOCK(DSL_DRV_PM_CONTEXT(pContext)->pmNeMutex) ) + if(down_interruptible(&(DSL_DRV_PM_CONTEXT(pContext)->pmNeMutex))) { DSL_DEBUG( DSL_DBG_ERR, (pContext, SYS_DBG_ERR"DSL[%02d]: ERROR - Couldn't lock PM NE mutex!" @@ -1148,8 +1148,8 @@ DSL_Error_t DSL_DRV_PM_Lock(DSL_Context_ return DSL_ERR_SEMAPHORE_GET; } - /* Lock PM module Near-End Mutex*/ - if( DSL_DRV_MUTEX_LOCK(DSL_DRV_PM_CONTEXT(pContext)->pmFeMutex) ) + /* Lock PM module Far-End Mutex*/ + if( down_interruptible(&(DSL_DRV_PM_CONTEXT(pContext)->pmFeMutex)) ) { DSL_DEBUG( DSL_DBG_ERR, (pContext, SYS_DBG_ERR"DSL[%02d]: ERROR - Couldn't lock PM FE mutex!" @@ -1193,10 +1193,10 @@ DSL_Error_t DSL_DRV_PM_UnLock(DSL_Contex if( DSL_DRV_PM_CONTEXT(pContext)->bPmLock ) { /* Unlock PM module NE Mutex*/ - DSL_DRV_MUTEX_UNLOCK(DSL_DRV_PM_CONTEXT(pContext)->pmNeMutex); + up(&(DSL_DRV_PM_CONTEXT(pContext)->pmNeMutex)); /* Unlock PM module FE Mutex*/ - DSL_DRV_MUTEX_UNLOCK(DSL_DRV_PM_CONTEXT(pContext)->pmFeMutex); + up(&(DSL_DRV_PM_CONTEXT(pContext)->pmFeMutex)); /* Clear bPmLock flag*/ DSL_DRV_PM_CONTEXT(pContext)->bPmLock = DSL_FALSE;