Пример #1
0
VOS_VOID IMM_MemGetAllocFailCnt(VOS_VOID)
{
    VOS_UINT16                          usLoop;


    IMM_LOG(UEPS_PID_IMM_RB_FREE, IMM_PRINT_NORMAL, "IMM_MemGetAllocFailCnt Start: \n");

    IMM_LOG1(UEPS_PID_IMM_RB_FREE, IMM_PRINT_NORMAL, "IMM_MemGetAllocFailCnt Threshold: %d \n", g_usImmAllocFailCntThreshold);

#if ( FEATURE_ON == FEATURE_SKB_EXP )
    /* 打印 SKB 控制结点申请失败次数 */
    skb_get_fail_cnt();
#endif

    for( usLoop = 0; usLoop < IMM_MEM_POOL_ID_BUTT; ++usLoop )
    {
        IMM_LOG1(UEPS_PID_IMM_RB_FREE, IMM_PRINT_NORMAL, "IMM Mem Pool ID: %d \n", usLoop);
        IMM_LOG3(UEPS_PID_IMM_RB_FREE, IMM_PRINT_NORMAL, "IMM Mem Alloc Fail Cnt: %d * %d + %d \n",
                    *g_apusImmExcThresholdCnt[usLoop], g_usImmAllocFailCntThreshold, *g_apusImmAllocFailCnt[usLoop]);
    }

    IMM_LOG(UEPS_PID_IMM_RB_FREE, IMM_PRINT_NORMAL, "IMM_MemGetAllocFailCnt End. \n");

    return;
}/* IMM_MemGetAllocFailCnt */
VOS_VOID IMM_RbRemoteFreeMem(VOS_VOID *pucAddr)
{
    VOS_UINT32                          ulResult;
    VOS_UINT32                          ulNum;
    VOS_INT32                           lIsrRet;    /* 中断操作返回值 */
    VOS_ULONG                           ulFlags = 0UL;

    if ( VOS_NULL_PTR == pucAddr )
    {
        VOS_SpinLockIntLock(&g_stImmRbSpinLock, ulFlags);
        g_stImmMemFreeMntnEntity.ulImmMemExtFreeFailCnt++;
        VOS_SpinUnlockIntUnlock(&g_stImmRbSpinLock, ulFlags);
        IMM_LOG(UEPS_PID_IMM_RB_FREE, IMM_PRINT_WARNING, "IMM_RB, IMM_RbRemoteFreeMem, pucAddr is Null!\n");
        return;
    }

    VOS_SpinLockIntLock (&g_stImmRbSpinLock, ulFlags);

    /* 将TTF_MEM地址放入释放队列 */
    ulResult    = LUP_EnSharedQueAcpu(g_pstAcpuTTFMemFreeQue, pucAddr);
    g_stImmMemRbMntnEntity.ulImmMemRbEnQTotalCnt++;
    ulNum       = LUP_QueCnt(g_pstAcpuTTFMemFreeQue);
    VOS_SpinUnlockIntUnlock(&g_stImmRbSpinLock, ulFlags);

    if (PS_SUCC != ulResult)
    {
        VOS_SpinLockIntLock (&g_stImmRbSpinLock, ulFlags);
        g_stImmMemRbMntnEntity.ulImmMemRbEnQFailCnt++;
        VOS_SpinUnlockIntUnlock(&g_stImmRbSpinLock, ulFlags);
        IMM_LOG(UEPS_PID_IMM_RB_FREE, IMM_PRINT_ERROR, "ERROR:IMM_RbRemoteFreeMem: LUP_EnSharedQueAcpu fail!\n");
    }

#ifndef WTTF_PS_FUSION_PC_ST
    if ( 0 == (ulNum & g_ulFreeIMMMemBlkNoticNum))
    {
        /* 触发IPC中断 */
        lIsrRet = IMM_MEM_TRIG_IPC_MEMRB_INT(IPC_CORE_COMARM, IMM_IPC_MEM_RECYCLE_INT);
        VOS_SpinLockIntLock (&g_stImmRbSpinLock, ulFlags);
        g_stImmMemRbMntnEntity.ulImmMemRbSendIntCnt++;
        VOS_SpinUnlockIntUnlock(&g_stImmRbSpinLock, ulFlags);
        if (lIsrRet != VOS_OK)
        {
            IMM_LOG(UEPS_PID_IMM_RB_FREE, IMM_PRINT_ERROR, "ERROR:IMM_RbRemoteFreeMem: mdrv_ipc_int_send fail!\n");
        }
    }
#else
    lIsrRet = VHW_IPC_IntSend((IPC_INT_CORE_E)IPC_CORE_COMARM, (IPC_INT_LEV_E)IPC_INT_DICC_RELDATA);
    g_stImmMemRbMntnEntity.ulImmMemRbSendIntCnt++;

    if (lIsrRet != VOS_OK)
    {
        IMM_LOG(UEPS_PID_IMM_RB_FREE, IMM_PRINT_ERROR, "ERROR:IMM_RbRemoteFreeMem: mdrv_ipc_int_send fail!\n");
    }
#endif
    return;
}/*IMM_RbRemoteFreeMem*/
Пример #3
0
VOS_VOID IMM_MntnMemUseBlkCntRpt
(
    VOS_UINT8                               ucPoolId,
    IMM_MEM_USED_INFO_TRIG_TYPE_ENUM_UINT8  enTrigType
)
{
    VOS_UINT32                              ulTotalCnt;
    VOS_UINT32                              ulLength;
    VOS_UINT32                              ulDataLen;
    PS_OM_EVENT_IND_STRU                   *pstImmOmEventInd;
    IMM_MEM_POOL_STRU                      *pstPoolInfo;
    IMM_OM_EVENT_BLK_MEM_USED_INFO_STRU    *pstImmOmEventBlkMemUsedInfo;


    pstPoolInfo     = IMM_MEM_GET_POOL(ucPoolId);

    ulDataLen = offsetof(IMM_OM_EVENT_BLK_MEM_USED_INFO_STRU, astBlkMemTraceInfo);

    /*消息总长度*/
    ulLength  = offsetof(PS_OM_EVENT_IND_STRU, aucData) + ulDataLen;

    /*申请消息内存*/
    pstImmOmEventInd    = (PS_OM_EVENT_IND_STRU *)PS_MEM_ALLOC(UEPS_PID_IMM_RB_FREE, ulLength);

    if (VOS_NULL_PTR == pstImmOmEventInd )
    {
        IMM_LOG(UEPS_PID_IMM_RB_FREE, IMM_PRINT_ERROR, "IMM_BlkMemUsedInfoEventRpt: MemAlloc Fail!\n");
        return;
    }

    ulTotalCnt      = pstPoolInfo->usImmMemUsedCnt;

    /*填写消息内容*/
    pstImmOmEventInd->ulLength      = ulLength - offsetof( PS_OM_EVENT_IND_STRU, usEventId);
    pstImmOmEventInd->usEventId     = IMM_EVENT_BLK_MEM_USED_INFO;
    pstImmOmEventInd->ulModuleId    = UEPS_PID_IMM_RB_FREE;

    pstImmOmEventBlkMemUsedInfo     = (IMM_OM_EVENT_BLK_MEM_USED_INFO_STRU *)pstImmOmEventInd->aucData;
    pstImmOmEventBlkMemUsedInfo->ucPoolId       = ucPoolId;
    pstImmOmEventBlkMemUsedInfo->enTrigType     = enTrigType;
    pstImmOmEventBlkMemUsedInfo->ucNo           = 1;
    pstImmOmEventBlkMemUsedInfo->usRptCnt       = 0;
    pstImmOmEventBlkMemUsedInfo->ulTotalUsedCnt = ulTotalCnt;

    /*调用OM的事件上报接口*/
    if ( PS_SUCC != OM_AcpuEvent((PS_OM_EVENT_IND_STRU*)pstImmOmEventInd))
    {
        IMM_LOG(UEPS_PID_IMM_RB_FREE, IMM_PRINT_ERROR, "IMM_BlkMemUsedInfoEventRpt: OM Send Event Fail! \n");
    }
    /*释放申请的内存*/
    PS_MEM_FREE(UEPS_PID_IMM_RB_FREE, pstImmOmEventInd);

    return;
}/* IMM_MntnMemUseBlkCntRpt */
Пример #4
0
/*****************************************************************************
 函 数 名  : IMM_ZcDataTransformImmZc_Debug
 功能描述  : 数据块的挂接到IMM_ZC_STRU上。
 输入参数  : unsigned char *pucData    数据块内存地址
             unsigned long ulLen      数据块长度
             void *pstTtfMem   数据块控制节点指针
 输出参数  : 无
 返 回 值  : skbuf 指针
 调用函数  :
 被调函数  :

 修改历史      :
  1.日    期   : 2011年12月2日
    修改内容   : Created
*****************************************************************************/
IMM_ZC_STRU * IMM_ZcDataTransformImmZc_Debug(unsigned short usFileID,
        unsigned short usLineNum, const unsigned char *pucData, unsigned long ulLen, void *pstTtfMem)
{
    IMM_ZC_STRU                        *pstSkb             = NULL;


    /* MBB形态, 将数据块的挂接到IMM_ZC_STRU上 */
    unsigned long                       ulDataReservedHead;
    unsigned long                       ulDataReservedTail = 0;
    unsigned long                       ulDataAllign       = 32;

    IMM_DEBUG_TRACE_FUNC_ENTER();

    if ( NULL == pstTtfMem )
    {
        IMM_LOG(UEPS_PID_IMM_RB_RECYCLE, IMM_PRINT_ERROR, "IMM_DataTranferImmZc pstTtfMem ptr is null! \n");
        return NULL;
    }

    if ( NULL == pucData )
    {
        IMM_LOG(UEPS_PID_IMM_RB_RECYCLE, IMM_PRINT_ERROR, "IMM_DataTranferImmZc pucData ptr is null! \n");
        IMM_RbRemoteFreeMem(pstTtfMem);
        return NULL;
    }

    ulDataReservedHead  = IMM_MAC_HEADER_RES_LEN;
#if((FEATURE_LTE == FEATURE_OFF) && (FEATURE_WIFI == FEATURE_ON ))
    ulDataReservedTail  = DRV_WIFI_DATA_RESERVED_TAIL(IMM_MAC_HEADER_RES_LEN + ulLen);
#else
    ulDataReservedTail  = ((IMM_MAC_HEADER_RES_LEN + ulLen + (ulDataAllign - 1))&(~(ulDataAllign - 1)))
                                - (ulLen+IMM_MAC_HEADER_RES_LEN);
#endif

    pstSkb = dev_alloc_skb_ext(ulLen, (unsigned char *)pucData, ulDataReservedHead, ulDataReservedTail);


    if ( NULL == pstSkb )
    {
        IMM_RbRemoteFreeMem(pstTtfMem);
        IMM_LOG(UEPS_PID_IMM_RB_RECYCLE, IMM_PRINT_ERROR, "IMM_DataTranferImmZc dev_alloc_skb_ext fail! \n");
        return NULL;
    }

    ((IMM_MEM_STRU *)pstSkb->private_mem.pMem)->pstMemBlk = (void *)pstTtfMem;

    IMM_DEBUG_TRACE_FUNC_LEAVE();


    return pstSkb;
}/* IMM_ZcDataTransformImmZc_Debug */
VOS_VOID IMM_RbRxFreeMemTask(VOS_VOID)
{

    /* 解决UT死循环问题 */
#ifdef __UT_CENTER__
    VOS_UINT32                          ulLoop;
#endif

    IMM_RbRxFreeMemTaskInit();

#ifndef __UT_CENTER__
    for ( ; ; )
#else
    for (ulLoop = 0; ulLoop < 1; ulLoop++)
#endif
    {
        /* semphore take g_stImcLinuxManageEntity.ulRatRxRelSkBuffSem */
        if(VOS_OK != VOS_SmP(g_ulImmMemRbFreeSem, 0))
        {
            IMM_LOG(UEPS_PID_IMM_RB_FREE, IMM_PRINT_ERROR, "IMM_RB, IMM_RbRxFreeMemTask : ERROR : VOS_SmP Failed!\n");
            continue;
        }

        /* 释放 */
        IMM_RbMemFreeFromQue();

#if ( FEATURE_ON == FEATURE_IMM_MEM_DEBUG )
    IMM_MntnRptPoolLeakInfo();
#endif
    }

}/* IMM_RbRxFreeMemTask */
Пример #6
0
/*****************************************************************************
 函 数 名  : IMM_ZcRemoveMacHead
 功能描述  : 移除零拷贝结构MAC头
 输入参数  : IMM_ZC_STRU *pstImmZc
 输出参数  : 无
 返 回 值  : VOS_OK 添加成功
             VOS_ERR 添加失败
 调用函数  :
 被调函数  :

 修改历史      :
  1.日    期   : 2011年12月2日
    修改内容   : Created
*****************************************************************************/
unsigned long IMM_ZcRemoveMacHead(IMM_ZC_STRU *pstImmZc)
{
    IMM_DEBUG_TRACE_FUNC_ENTER();

    if ( NULL == pstImmZc )
    {
        IMM_LOG(UEPS_PID_IMM_RB_RECYCLE, IMM_PRINT_ERROR, "IMM_ZcRemoveMacHead pstImmZc ptr is null! \n");
        return VOS_ERR;
    }

    if ( IMM_MAC_HEADER_RES_LEN > (pstImmZc->tail - pstImmZc->data) )
    {
        IMM_LOG2(UEPS_PID_IMM_RB_RECYCLE, IMM_PRINT_ERROR, "IMM_ZcRemoveMacHead invalid data Len! tail = 0x%x, data = 0x%x \n",
                    (VOS_INT32)pstImmZc->tail, (VOS_INT32)pstImmZc->data);

        return VOS_ERR;
    }

    IMM_ZcPull(pstImmZc, IMM_MAC_HEADER_RES_LEN);

    IMM_DEBUG_TRACE_FUNC_LEAVE();


    return VOS_OK;
}
VOS_UINT32 IMM_RbMemFreeFidInit ( enum VOS_INIT_PHASE_DEFINE ip )
{
    VOS_UINT32                          ulRslt;
    VOS_UINT32                          ulReturnCode;

    switch( ip )
    {
        case   VOS_IP_LOAD_CONFIG:

            /* IMM_RB 模块注册PID */
            ulRslt = VOS_RegisterPIDInfo(UEPS_PID_IMM_RB_FREE,
                                (Init_Fun_Type)IMM_RbMemFreePidInit,
                                (Msg_Fun_Type)IMM_RbMemRelMsgProc);

            if( VOS_OK != ulRslt )
            {
                IMM_LOG1(UEPS_PID_IMM_RB_FREE, IMM_PRINT_ERROR, "reg IMM_RbMemFreeFidInit VOS_RegisterPIDInfo FAIL! ulRslt: %d\n", (VOS_INT32)ulRslt);
                return (VOS_UINT32)VOS_ERROR;
            }

            ulRslt = VOS_RegisterTaskPrio(UEPS_FID_IMM_RB_FREE, IMM_RB_FREE_TASK_PRI_LINUX);
            if( VOS_OK != ulRslt )
            {
                IMM_LOG1(UEPS_PID_IMM_RB_FREE, IMM_PRINT_ERROR, "reg MEMRECYLE task priority register FAIL ulRslt : %d !\n", (VOS_INT32)ulRslt);
                return (VOS_UINT32)VOS_ERROR;
            }

            /* IMM_RbRxFreeMemTask自处理任务注册 */
            ulReturnCode = VOS_RegisterSelfTask(UEPS_FID_IMM_RB_FREE,
            (VOS_TASK_ENTRY_TYPE)IMM_RbRxFreeMemTask, VOS_PRIORITY_P5, (VOS_UINT32)IMM_RB_RX_MEM_FREE_TASK_STACK_SIZE_LINUX);

            if ( VOS_NULL_BYTE == ulReturnCode )
            {
                IMM_LOG(UEPS_PID_IMM_RB_FREE, IMM_PRINT_ERROR, "IMM_RB, IMM_RbMemFreeFidInit, ERROR, Fail regist IMM_RxFreeMemTask \n" );

                return VOS_ERR;
            }

            break;

        case   VOS_IP_FARMALLOC:
        case   VOS_IP_INITIAL:
        case   VOS_IP_ENROLLMENT:
        case   VOS_IP_LOAD_DATA:
        case   VOS_IP_FETCH_DATA:
        case   VOS_IP_STARTUP:
        case   VOS_IP_RIVAL:
        case   VOS_IP_KICKOFF:
        case   VOS_IP_STANDBY:
        case   VOS_IP_BROADCAST_STATE:
        case   VOS_IP_RESTART:
            break;

        default:
            break;
    }

    return VOS_OK;
}/* IMM_RbMemFreeFidInit */
VOS_VOID IMM_MemRbShowMntnInfo( VOS_VOID )
{
    IMM_LOG(UEPS_PID_IMM_RB_FREE, PS_PRINT_NORMAL, "==========================================\n" );
    IMM_LOG(UEPS_PID_IMM_RB_FREE, PS_PRINT_NORMAL, "IMM MEM RB 可维可测信息 :\n" );
    IMM_LOG1(UEPS_PID_IMM_RB_FREE, PS_PRINT_NORMAL, "C2A 核间释放队列中节点个数  : %d \n", (VOS_INT32)LUP_QueCnt(g_pstAcpuIMMMemFreeQue));
    IMM_LOG1(UEPS_PID_IMM_RB_FREE, PS_PRINT_NORMAL, "A2C 核间释放队列中节点个数  : %d \n", (VOS_INT32)LUP_QueCnt(g_pstAcpuTTFMemFreeQue));
    IMM_LOG1(UEPS_PID_IMM_RB_FREE, PS_PRINT_NORMAL, "ImmMemRb 出队失败次数       : %d \n", (VOS_INT32)g_stImmMemRbMntnEntity.ulImmMemRbDeQFailCnt);
    IMM_LOG1(UEPS_PID_IMM_RB_FREE, PS_PRINT_NORMAL, "ImmMemRb 出队总次数         : %d \n", (VOS_INT32)g_stImmMemRbMntnEntity.ulImmMemRbDeQTotalCnt);
    IMM_LOG1(UEPS_PID_IMM_RB_FREE, PS_PRINT_NORMAL, "ImmMemRb 入队失败次数       : %d \n", (VOS_INT32)g_stImmMemRbMntnEntity.ulImmMemRbEnQFailCnt);
    IMM_LOG1(UEPS_PID_IMM_RB_FREE, PS_PRINT_NORMAL, "ImmMemRb 入队总次数         : %d \n", (VOS_INT32)g_stImmMemRbMntnEntity.ulImmMemRbEnQTotalCnt);
    IMM_LOG1(UEPS_PID_IMM_RB_FREE, PS_PRINT_NORMAL, "ImmMemRb 收到IPF中断次数    : %d \n", (VOS_INT32)g_stImmMemRbMntnEntity.ulImmMemRbReceiveIntCnt);
    IMM_LOG1(UEPS_PID_IMM_RB_FREE, PS_PRINT_NORMAL, "ImmMemRb 向IPF发送中断次数  : %d \n", (VOS_INT32)g_stImmMemRbMntnEntity.ulImmMemRbSendIntCnt);


    return;

}/* IMM_MemMntnInfo */
Пример #9
0
/*****************************************************************************
 函 数 名  : IMM_ZcMapToImmMem
 功能描述  : 把IMM_Zc零拷贝控制节点转换成IMM_Mem控制节点
 输入参数  : IMM_ZC_STRU *pstImmZc
 输出参数  : 无
 返 回 值  : 成功:指向IMM_MEM_STRU的指针;失败:NULL。
 调用函数  :
 被调函数  :

 修改历史      :
  1.日    期   : 2011年12月1日
    修改内容   : 新生成函数

*****************************************************************************/
IMM_MEM_STRU *IMM_ZcMapToImmMem_Debug(unsigned short usFileID,
        unsigned short usLineNum, IMM_ZC_STRU *pstImmZc)
{
    IMM_MEM_STRU                       *pstImm = NULL;


    IMM_DEBUG_TRACE_FUNC_ENTER();

    if ( NULL == pstImmZc )
    {
        IMM_LOG(UEPS_PID_IMM_RB_RECYCLE, IMM_PRINT_ERROR, "IMM_ZcMapToImmMem pstImmZc ptr is null! \n");
        return NULL;
    }


    if ( MEM_TYPE_USER_DEFINED != pstImmZc->private_mem.enType )
    {
        IMM_LOG1(UEPS_PID_IMM_RB_RECYCLE, IMM_PRINT_ERROR, "IMM_ZcMapToImmMem Mem type %d invalid! \n", pstImmZc->private_mem.enType);
        return NULL;
    }

    if ( NULL == pstImmZc->private_mem.pMem )
    {
        IMM_LOG(UEPS_PID_IMM_RB_RECYCLE, IMM_PRINT_ERROR, "IMM_ZcMapToImmMem stPrivateMem Mem ptr is null! \n");
        return NULL;
    }

    if ( NULL == pstImmZc->head )
    {
        IMM_LOG(UEPS_PID_IMM_RB_RECYCLE, IMM_PRINT_ERROR, "IMM_ZcMapToImmMem skbuf Mem ptr is null! \n");
        return NULL;
    }

    /* 将数据挂接到IMM_MEM控制节点 */
    pstImm = pstImmZc->private_mem.pMem;
    pstImmZc->private_mem.pMem = NULL;

    IMM_DEBUG_TRACE_FUNC_LEAVE();


    return pstImm;
} /* IMM_ZcMapToImmMem */
Пример #10
0
/*****************************************************************************
 函 数 名  : IMM_ZcGetUsedLen
 功能描述  : 获取零拷贝结构中数据块的使用长度
 输入参数  : IMM_ZC_STRU *pstImmZc
 输出参数  : 无
 返 回 值  : 成功:返回的使用的数据长度;失败:返回IMM_INVALID_VALUE.
 调用函数  :
 被调函数  :

 修改历史      :
  1.日    期   : 2011年12月2日
    修改内容   : Created
*****************************************************************************/
unsigned long IMM_ZcGetUsedLen (const IMM_ZC_STRU *pstImmZc)
{
    IMM_DEBUG_TRACE_FUNC_ENTER();

    if ( NULL == pstImmZc )
    {
        IMM_LOG(UEPS_PID_IMM_RB_RECYCLE, IMM_PRINT_ERROR, "IMM_ZcGetUsedLen pstImmZc ptr is null! \n");
        return IMM_INVALID_VALUE;
    }

    IMM_DEBUG_TRACE_FUNC_LEAVE();


    return pstImmZc->len;
}
Пример #11
0
/*****************************************************************************
 函 数 名  : IMM_ZcAddMacHead
 功能描述  : 给IMM_ZC_STRU 零拷贝结构添加MAC头
 输入参数  : IMM_ZC_STRU *pstImmZc
             unsigned char* pucAddData
             VOS_UINT16 usLen
 输出参数  : 无
 返 回 值  : VOS_OK 添加成功
             VOS_ERR 添加失败
 调用函数  :
 被调函数  :

 修改历史      :
  1.日    期   : 2011年12月2日
    修改内容   : Created
*****************************************************************************/
unsigned long IMM_ZcAddMacHead (IMM_ZC_STRU *pstImmZc, const unsigned char* pucAddData)
{
    unsigned char                      *pucDestAddr;


    IMM_DEBUG_TRACE_FUNC_ENTER();

    if ( NULL == pstImmZc )
    {
        IMM_LOG(UEPS_PID_IMM_RB_RECYCLE, IMM_PRINT_ERROR, "IMM_ZcAddMacHead pstImmZc ptr is null! \n");
        return VOS_ERR;
    }

    if ( NULL == pucAddData )
    {
        IMM_LOG(UEPS_PID_IMM_RB_RECYCLE, IMM_PRINT_ERROR, "IMM_ZcAddMacHead pucData ptr is null! \n");
        return VOS_ERR;
    }


    if( IMM_MAC_HEADER_RES_LEN > (pstImmZc->data - pstImmZc->head) )
    {
        IMM_LOG2(UEPS_PID_IMM_RB_RECYCLE, IMM_PRINT_ERROR, "IMM_ZcAddMacHead invalid data Len! data = 0x%x, head = 0x%x \n",
                    (VOS_INT32)pstImmZc->data, (VOS_INT32)pstImmZc->head);

        return VOS_ERR;
    }

    pucDestAddr = IMM_ZcPush(pstImmZc,IMM_MAC_HEADER_RES_LEN);
    memcpy(pucDestAddr,pucAddData,IMM_MAC_HEADER_RES_LEN);

    IMM_DEBUG_TRACE_FUNC_LEAVE();


    return VOS_OK;
}
Пример #12
0
/*****************************************************************************
 函 数 名  : IMM_ZcSetUserApp
 功能描述  : 设置UserApp。
 输入参数  : pstImmZc - 指向IMM_ZC_STRU的指针
             usApp - 用户自定义
 输出参数  : 无
 返 回 值  : 无
 调用函数  :
 被调函数  :

 修改历史      :
  1.日    期   : 2011年12月1日
    修改内容   : 新生成函数

*****************************************************************************/
void IMM_ZcSetUserApp (IMM_ZC_STRU *pstImmZc, unsigned short usApp)
{
    IMM_DEBUG_TRACE_FUNC_ENTER();

    if ( NULL == pstImmZc )
    {
        IMM_LOG(UEPS_PID_IMM_RB_RECYCLE, IMM_PRINT_ERROR, "IMM_ZcSetUserApp pstImmZc ptr is null! \n");
        return;
    }

    pstImmZc->private_mem.usApp = usApp;

    IMM_DEBUG_TRACE_FUNC_LEAVE();


    return;
}
Пример #13
0
VOS_VOID IMM_MntnShowUsedBlkMemInfo(VOS_VOID)
{
    IMM_MEM_POOL_STRU                  *pstImmMemPoolInfo;
    VOS_UINT8                           ucPoolId;


    IMM_LOG(UEPS_PID_IMM_RB_FREE, IMM_PRINT_NORMAL, "IMM_ShowUsedBlkMemInfo:Begin.\r\n");

    for (ucPoolId = 0; ucPoolId < IMM_MEM_POOL_ID_BUTT; ucPoolId++)
    {
        pstImmMemPoolInfo = IMM_MemPoolGet(ucPoolId);

        IMM_LOG1(UEPS_PID_IMM_RB_FREE, IMM_PRINT_NORMAL, "IMM_ShowUsedBlkMemInfo print pool %d info begin: \n", ucPoolId );
        IMM_MntnPrintBlkMemPoolUsedInfo(pstImmMemPoolInfo);
        IMM_LOG1(UEPS_PID_IMM_RB_FREE, IMM_PRINT_NORMAL, "IMM_ShowUsedBlkMemInfo print pool %d info end! \n", ucPoolId);
    }

    return ;
}/*IMM_MntnShowUsedBlkMemInfo */
VOS_VOID IMM_RbRxFreeMemTaskInit( VOS_VOID )
{
    /* 初始化 IMM MEM RB 可维可测实体 */
    PS_MEM_SET(&g_stImmMemRbMntnEntity, 0x0, sizeof(IMM_MEM_RB_MNTN_INFO_STRU));

    /* 初始化信号量 */
    if ( VOS_OK != VOS_SmBCreate("g_ulImmMemRbFreeSem", 0, VOS_SEMA4_FIFO, (VOS_SEM *)&g_ulImmMemRbFreeSem ) )
    {
        IMM_LOG(UEPS_PID_IMM_RB_FREE, IMM_PRINT_ERROR, "IMM_RB, IMM_RbRxFreeMemTaskInit, ERROR, Create g_ulImmMemRbFreeSem fail!\n");
        return;
    }

    VOS_SpinLockInit(&g_stImmRbSpinLock);
    IMM_RbMemFreeQueInit();
    IMM_RbIsrInit(UEPS_PID_IMM_RB_FREE, IMM_IPC_MEM_FREE_INT, (VOIDFUNCPTR)IMM_RbMemRelDataIsr);
    IMM_MemRegExtFreeCallBack(IMM_RbRemoteFreeMem);
    IMM_MntnInit();


    return ;
}/* IMM_RbRxFreeMemTaskInit */
Пример #15
0
VOS_VOID IMM_MntnPrintBlkMemPoolUsedInfo( IMM_MEM_POOL_STRU  *pstImmMemPoolInfo )
{
#if (FEATURE_ON == FEATURE_IMM_MEM_DEBUG)
    VOS_UINT16                          usImmMemNum;
    IMM_BLK_MEM_DEBUG_STRU             *pstImmMemDebugInfo;
#endif
    IMM_MEM_STRU                       *pMem;


    if (VOS_NULL_PTR == pstImmMemPoolInfo)
    {
       IMM_LOG(UEPS_PID_IMM_RB_FREE, IMM_PRINT_WARNING, "pstImmMemPoolInfo is NULL ! \n");
       return ;
    }


    if (IMM_TRUE != pstImmMemPoolInfo->ucUsedFlag)
    {
       IMM_LOG(UEPS_PID_IMM_RB_FREE, IMM_PRINT_WARNING, "POOL not uesed ! \n");

       return ;
    }

    pMem = pstImmMemPoolInfo->pstImmMemStStartAddr;

    IMM_LOG2(UEPS_PID_IMM_RB_FREE, IMM_PRINT_NORMAL, "Pool ID %u Blk Mem used %u  \n", pMem->enPoolId, pstImmMemPoolInfo->usImmMemUsedCnt);

    if( IMM_FALSE == g_ucPrintDetail )
    {
        return;
    }

#if (FEATURE_ON == FEATURE_IMM_MEM_DEBUG)
    for (usImmMemNum = 0;
            usImmMemNum < pstImmMemPoolInfo->usImmMemTotalCnt;
            usImmMemNum ++)
    {
        pMem = pstImmMemPoolInfo->pstImmMemStStartAddr + usImmMemNum;
        pstImmMemDebugInfo = &pMem->stDbgInfo;

        if ( MEM_BLK_STATE_FREE != pstImmMemDebugInfo->enMemStateFlag)
        {
            IMM_LOG4(UEPS_PID_IMM_RB_FREE, IMM_PRINT_NORMAL, "Alloc: File %4d L %5d T %11u, Blk Mem Level: %4u, ",
                (VOS_INT32)pstImmMemDebugInfo->usAllocFileID,
                (VOS_INT32)pstImmMemDebugInfo->usAllocLineNum,
                (VOS_INT32)pstImmMemDebugInfo->ulAllocTick,
                usImmMemNum);
/*lint -e713*/
            IMM_LOG4(UEPS_PID_IMM_RB_FREE, IMM_PRINT_NORMAL, "Status: %d, Status: %d, TraceFile:%4d, TraceLine:%5d, TraceTick:%11d, \n",
                pstImmMemDebugInfo->enMemStateFlag,
                (VOS_INT32)pstImmMemDebugInfo->usTraceFileID,
                (VOS_INT32)pstImmMemDebugInfo->usTraceLineNum,
                (VOS_INT32)pstImmMemDebugInfo->ulTraceTick);
/*lint +e713*/

            /* 打印PDU内容 */
            IMM_LOG1(UEPS_PID_IMM_RB_FREE, IMM_PRINT_NORMAL, "Data ptr: 0x%x\n ", (VOS_INT32)pMem->pstMemBlk);
        }
    }
#endif

}/* IMM_MntnPrintBlkMemPoolUsedInfo */
Пример #16
0
VOS_VOID IMM_MemHelp( VOS_VOID )
{
    IMM_LOG(UEPS_PID_IMM_RB_FREE, IMM_PRINT_NORMAL, "********************IMM_MEM软调信息************************\n");
    IMM_LOG(UEPS_PID_IMM_RB_FREE, IMM_PRINT_NORMAL, "IMM_MntnCheckPoolLeak(ulPoolId):            检查IMM_MEM内存泄露,其中ulPoolId:\n");
    IMM_LOG(UEPS_PID_IMM_RB_FREE, IMM_PRINT_NORMAL, "                                            0--SHARE; 1--EXT;\n");
    IMM_LOG(UEPS_PID_IMM_RB_FREE, IMM_PRINT_NORMAL, "IMM_MntnShowUsedBlkMemInfo(VOS_VOID)        查看内存的使用信息(g_ucPrintDetail =1时打印出详细信息)。\n");
    IMM_LOG(UEPS_PID_IMM_RB_FREE, IMM_PRINT_NORMAL, "IMM_MemSetTraceFunc(ucChoice)               配置函数跟踪轨迹打印,ucChoice = 0 关闭轨迹打印。\n");
    IMM_LOG(UEPS_PID_IMM_RB_FREE, IMM_PRINT_NORMAL, "IMM_MemPrintDetail(ucChoice)                控制在使用IMM_MntnShowUsedBlkMemInfo时,是否开启使用信息打印。\n");
    IMM_LOG(UEPS_PID_IMM_RB_FREE, IMM_PRINT_NORMAL, "IMM_MemGetAllocFailCnt(VOS_VOID)            获取内存申请失败次数信息。\n");
    IMM_LOG(UEPS_PID_IMM_RB_FREE, IMM_PRINT_NORMAL, "IMM_MemSetAllocFailThreshold(usThreshold)   配置内存申请失败上报门限。\n");
    IMM_LOG(UEPS_PID_IMM_RB_FREE, IMM_PRINT_NORMAL, "IMM_MemReSetAllocFailStatus(VOS_VOID)       重置内存申请失败统计信息。\n");
    IMM_LOG(UEPS_PID_IMM_RB_FREE, IMM_PRINT_NORMAL, "IMM_MemShowMntnInfo(VOS_VOID)               获取IMM 内存可维可测信息。\n");
    IMM_LOG(UEPS_PID_IMM_RB_FREE, IMM_PRINT_NORMAL, "IMM_MemClearMntnInfo(VOS_VOID)              清除IMM 内存可维可测信息。\n");
    IMM_LOG(UEPS_PID_IMM_RB_FREE, IMM_PRINT_NORMAL, "IMM_MemGetFreeMntnEntityAddr(VOS_VOID)      获取 IMM FREE 内存可维可测实体地址。\n");
    IMM_LOG(UEPS_PID_IMM_RB_FREE, IMM_PRINT_NORMAL, "IMM_MemGetRbMntnEntityAddr(VOS_VOID)        获取 IMM RB 内存可维可测实体地址。\n");
    IMM_LOG(UEPS_PID_IMM_RB_FREE, IMM_PRINT_NORMAL, "IMM_RbMemPrintIsrCnt(VOS_VOID)              A核收到IPF中断次数。\n");

    return;
}
Пример #17
0
VOS_VOID IMM_MntnMemUsedBlkTraceInfoRpt
(
    VOS_UINT8  ucPoolId,
    IMM_MEM_USED_INFO_TRIG_TYPE_ENUM_UINT8 enTrigType
)
{
    VOS_UINT32                              ulTotalCnt;
    VOS_UINT32                              ulLength;
    VOS_UINT32                              ulDataLen;
    PS_OM_EVENT_IND_STRU                   *pstImmOmEventInd;
    IMM_MEM_POOL_STRU                      *pstPoolInfo;
    IMM_OM_EVENT_BLK_MEM_USED_INFO_STRU    *pstImmOmEventBlkMemUsedInfo;
    IMM_BLK_MEM_TRACE_INFO_STRU            *pstBlkMemTraceInfo;
    VOS_UINT32                              ulBlkMemNum;
    IMM_MEM_STRU                           *pMem;
    IMM_BLK_MEM_DEBUG_STRU                 *pstImmMemDebugInfo;
    VOS_UINT32                              ulOffset;
    VOS_UINT8                               ucRptNo = 0;
    VOS_UINT16                              usRptCnt = 0;
    VOS_UINT16                              usRptEventCnt = 0;


    pstPoolInfo = IMM_MEM_GET_POOL(ucPoolId);

    ulTotalCnt  = pstPoolInfo->usImmMemUsedCnt;

    /* 上报内存跟踪信息 */
    ulDataLen           = offsetof(IMM_OM_EVENT_BLK_MEM_USED_INFO_STRU, astBlkMemTraceInfo) + ( EVENT_BLK_MEM_USED_INFO_CNT_PER_MSG * sizeof(IMM_BLK_MEM_TRACE_INFO_STRU));

    /*消息总长度*/
    ulLength            = offsetof(PS_OM_EVENT_IND_STRU,aucData) + ulDataLen;

    /*申请消息内存*/
    pstImmOmEventInd    = (PS_OM_EVENT_IND_STRU *)PS_MEM_ALLOC(UEPS_PID_IMM_RB_FREE, ulLength);

    if ( VOS_NULL_PTR == pstImmOmEventInd )
    {
        IMM_LOG(UEPS_PID_IMM_RB_FREE, IMM_PRINT_ERROR, "IMM_BlkMemUsedInfoEventRpt: MemAlloc Fail!");
        return;
    }

    if ( IMM_TRUE == pstPoolInfo->ucUsedFlag )
    {
        for (ulBlkMemNum = 0; ulBlkMemNum < pstPoolInfo->usImmMemTotalCnt; ulBlkMemNum ++)
        {
            pMem = pstPoolInfo->pstImmMemStStartAddr + ulBlkMemNum;
            pstImmMemDebugInfo = &pMem->stDbgInfo;

            if (MEM_BLK_STATE_FREE != pstImmMemDebugInfo->enMemStateFlag)
            {
                ulOffset    =  offsetof(IMM_OM_EVENT_BLK_MEM_USED_INFO_STRU, astBlkMemTraceInfo)  + ( usRptCnt * sizeof(IMM_BLK_MEM_TRACE_INFO_STRU) );

                pstBlkMemTraceInfo  = (IMM_BLK_MEM_TRACE_INFO_STRU *)(pstImmOmEventInd->aucData + ulOffset );
                pstBlkMemTraceInfo->ulAllocTick         = pstImmMemDebugInfo->ulAllocTick;
                pstBlkMemTraceInfo->usAllocFileId       = pstImmMemDebugInfo->usAllocFileID;
                pstBlkMemTraceInfo->usAllocLineNum      = pstImmMemDebugInfo->usAllocLineNum;

                pstBlkMemTraceInfo->ulTraceTick         = pstImmMemDebugInfo->ulTraceTick;
                pstBlkMemTraceInfo->usTraceFileId       = (pstImmMemDebugInfo->usTraceFileID);
                pstBlkMemTraceInfo->usTraceLineNum      = (pstImmMemDebugInfo->usTraceLineNum);

                IMM_MntnMemTraceInfoRptSaveMemData(ucPoolId, pstBlkMemTraceInfo, pMem);

                usRptCnt ++;

                if (  EVENT_BLK_MEM_USED_INFO_CNT_PER_MSG == usRptCnt )/* 分批发送,每笔最多发送一千块 */
                {
                    ucRptNo++;
                    usRptCnt = 0;
                    /*填写消息内容*/

                    pstImmOmEventInd->ulLength      = ulLength - offsetof( PS_OM_EVENT_IND_STRU, usEventId);
                    pstImmOmEventInd->usEventId     = IMM_EVENT_BLK_MEM_USED_INFO;
                    pstImmOmEventInd->ulModuleId    = UEPS_PID_IMM_RB_FREE;

                    pstImmOmEventBlkMemUsedInfo     = (IMM_OM_EVENT_BLK_MEM_USED_INFO_STRU *)pstImmOmEventInd->aucData;
                    pstImmOmEventBlkMemUsedInfo->ucPoolId       = ucPoolId;
                    pstImmOmEventBlkMemUsedInfo->enTrigType     = enTrigType;
                    pstImmOmEventBlkMemUsedInfo->ucNo           = ucRptNo;
                    pstImmOmEventBlkMemUsedInfo->usRptCnt       = EVENT_BLK_MEM_USED_INFO_CNT_PER_MSG;
                    pstImmOmEventBlkMemUsedInfo->ulTotalUsedCnt = ulTotalCnt;

                    /*调用OM的事件上报接口*/
                    if ( PS_SUCC != OM_AcpuEvent((PS_OM_EVENT_IND_STRU*)pstImmOmEventInd))
                    {
                        IMM_LOG(UEPS_PID_IMM_RB_FREE, IMM_PRINT_ERROR, "IMM_BlkMemUsedInfoEventRpt: OM Send Event Fail! \n");
                    }

                    ++usRptEventCnt;
                }

                if ( g_ulImmEventRptCntThresholdPerTime < usRptEventCnt )
                {
                    /* 释放申请的内存 */
                    PS_MEM_FREE(UEPS_PID_IMM_RB_FREE, pstImmOmEventInd);
                    return;
                }

            }
        }
    }

    if ( 0 != usRptCnt )/* 最后一笔数据块数不足 EVENT_BLK_MEM_USED_INFO_CNT_PER_MSG */
    {
        ucRptNo++;

        ulDataLen   = ( usRptCnt * sizeof(IMM_BLK_MEM_TRACE_INFO_STRU))  + offsetof(IMM_OM_EVENT_BLK_MEM_USED_INFO_STRU, astBlkMemTraceInfo) ;

        ulLength    = offsetof(PS_OM_EVENT_IND_STRU, aucData) + ulDataLen;

        /*填写消息内容*/
        pstImmOmEventInd->ulLength      = ulLength - offsetof( PS_OM_EVENT_IND_STRU, usEventId);
        pstImmOmEventInd->usEventId     = IMM_EVENT_BLK_MEM_USED_INFO;
        pstImmOmEventInd->ulModuleId    = UEPS_PID_IMM_RB_FREE;

        pstImmOmEventBlkMemUsedInfo     = (IMM_OM_EVENT_BLK_MEM_USED_INFO_STRU *)pstImmOmEventInd->aucData;
        pstImmOmEventBlkMemUsedInfo->ucPoolId       = ucPoolId;
        pstImmOmEventBlkMemUsedInfo->enTrigType     = enTrigType;
        pstImmOmEventBlkMemUsedInfo->ucNo           = ucRptNo;
        pstImmOmEventBlkMemUsedInfo->usRptCnt       = usRptCnt;
        pstImmOmEventBlkMemUsedInfo->ulTotalUsedCnt = ulTotalCnt;

        /*调用OM的事件上报接口*/
        if ( PS_SUCC != OM_AcpuEvent((PS_OM_EVENT_IND_STRU*)pstImmOmEventInd))
        {
            IMM_LOG(UEPS_PID_IMM_RB_FREE, IMM_PRINT_ERROR, "IMM_BlkMemUsedInfoEventRpt: OM Send Event Fail! \n");
        }
    }

    /*释放申请的内存*/
    PS_MEM_FREE(UEPS_PID_IMM_RB_FREE, pstImmOmEventInd);

    return ;

}
Пример #18
0
VOS_VOID IMM_MntnMemOverTimeInfoRpt( VOS_VOID )
{
    VOS_UINT32                              ulTotalCnt;
    VOS_UINT32                              ulLength;
    VOS_UINT32                              ulDataLen;
    PS_OM_EVENT_IND_STRU                   *pstImmOmEventInd;
    IMM_MEM_POOL_STRU                      *pstPoolInfo;
    IMM_OM_EVENT_BLK_MEM_USED_INFO_STRU    *pstImmOmEventBlkMemUsedInfo;
    IMM_BLK_MEM_TRACE_INFO_STRU            *pstBlkMemTraceInfo;
    IMM_BLK_MEM_DEBUG_STRU                 *pstImmMemDebugInfo;
    VOS_UINT32                              ulBlkMemNum;
    IMM_MEM_STRU                           *pMem;
    VOS_UINT32                              ulOffset;
    VOS_UINT8                               ucRptNo = 0;
    VOS_UINT16                              usRptCnt = 0;
    VOS_UINT16                              usNeedRptCnt;
    VOS_UINT32                              ulDrvRsvMemCnt;


    /* 获取内存池 */
    pstPoolInfo = IMM_MEM_GET_POOL(IMM_MEM_POOL_ID_SHARE);

    /* 获取超时的内存块个数 */
    ulTotalCnt  = IMM_MntnGetOverMemBlkCnt(IMM_MEM_POOL_ID_SHARE);

    /* 上报内存跟踪信息 */
    ulDataLen           = offsetof(IMM_OM_EVENT_BLK_MEM_USED_INFO_STRU, astBlkMemTraceInfo) + ( EVENT_BLK_MEM_USED_INFO_CNT_PER_MSG * sizeof(IMM_BLK_MEM_TRACE_INFO_STRU));

    /*消息总长度*/
    ulLength            = offsetof(PS_OM_EVENT_IND_STRU,aucData) + ulDataLen;

    /*申请消息内存*/
    pstImmOmEventInd    = (PS_OM_EVENT_IND_STRU *)PS_MEM_ALLOC(UEPS_PID_IMM_RB_FREE, ulLength);

    if ( VOS_NULL_PTR == pstImmOmEventInd )
    {
        IMM_LOG(UEPS_PID_IMM_RB_FREE, IMM_PRINT_ERROR, "IMM_MntnMemOverTimeInfoRpt: MemAlloc Fail!");
        return;
    }

    ulDrvRsvMemCnt = DRV_GET_PREMALLOC_SKB_NUM();

    /* 驱动会预申请内存,小于驱动预申请内存不算内存泄露 */
    if(ulTotalCnt <= ulDrvRsvMemCnt)
    {
        usNeedRptCnt = 0;
    }
    else if( EVENT_BLK_MEM_USED_INFO_CNT_PER_MSG  < ulTotalCnt )/* 最多发送 EVENT_BLK_MEM_USED_INFO_CNT_PER_MSG 块 */
    {
        usNeedRptCnt = EVENT_BLK_MEM_USED_INFO_CNT_PER_MSG ;
    }
    else
    {
        usNeedRptCnt = (VOS_UINT16)(ulTotalCnt - 1);
    }

    for ( ulBlkMemNum = 0; ulBlkMemNum < pstPoolInfo->usImmMemTotalCnt; ++ulBlkMemNum )
    {
        pMem = pstPoolInfo->pstImmMemStStartAddr + ulBlkMemNum;
        pstImmMemDebugInfo = &pMem->stDbgInfo;

        if ( MEM_BLK_STATE_FREE != pstImmMemDebugInfo->enMemStateFlag )
        {

            if ( g_ulOverTimeSliceThreshold > IMM_MntnTimeDiff(pstImmMemDebugInfo->ulAllocTick, g_ulCurrentTimeSlice))
            {
                continue;
            }

            if( usNeedRptCnt > 0 )
            {
                ulOffset    =  offsetof(IMM_OM_EVENT_BLK_MEM_USED_INFO_STRU, astBlkMemTraceInfo)  + ( usRptCnt * sizeof(IMM_BLK_MEM_TRACE_INFO_STRU) );

                pstBlkMemTraceInfo  = (IMM_BLK_MEM_TRACE_INFO_STRU *)(pstImmOmEventInd->aucData + ulOffset );
                pstBlkMemTraceInfo->ulAllocTick         = pstImmMemDebugInfo->ulAllocTick;
                pstBlkMemTraceInfo->usAllocFileId       = pstImmMemDebugInfo->usAllocFileID;
                pstBlkMemTraceInfo->usAllocLineNum      = pstImmMemDebugInfo->usAllocLineNum;

                pstBlkMemTraceInfo->ulTraceTick         = pstImmMemDebugInfo->ulTraceTick;
                pstBlkMemTraceInfo->usTraceFileId       = (pstImmMemDebugInfo->usTraceFileID);
                pstBlkMemTraceInfo->usTraceLineNum      = (pstImmMemDebugInfo->usTraceLineNum);

                if ( NULL !=pMem->pstMemBlk )
                {
                    pstBlkMemTraceInfo->aucMemData[0]       = pMem->pstMemBlk[0];
                    pstBlkMemTraceInfo->aucMemData[1]       = pMem->pstMemBlk[1];
                    pstBlkMemTraceInfo->aucMemData[2]       = pMem->pstMemBlk[2];
                    pstBlkMemTraceInfo->aucMemData[3]       = pMem->pstMemBlk[3];
                }

                ++usRptCnt;
                usNeedRptCnt --;
            }
        }
    }
    /*填写消息内容*/

    ucRptNo = 1;


    pstImmOmEventInd->ulLength      = ulLength - offsetof( PS_OM_EVENT_IND_STRU, usEventId);
    pstImmOmEventInd->usEventId     = IMM_EVENT_BLK_MEM_USED_INFO;
    pstImmOmEventInd->ulModuleId    = UEPS_PID_IMM_RB_FREE;

    pstImmOmEventBlkMemUsedInfo     = (IMM_OM_EVENT_BLK_MEM_USED_INFO_STRU *)pstImmOmEventInd->aucData;
    pstImmOmEventBlkMemUsedInfo->ucPoolId       = IMM_MEM_POOL_ID_SHARE;
    pstImmOmEventBlkMemUsedInfo->enTrigType     = IMM_MEM_TRIG_TYPE_OVERTIME_OCCUPANCY;
    pstImmOmEventBlkMemUsedInfo->ucNo           = ucRptNo;
    pstImmOmEventBlkMemUsedInfo->usRptCnt       = usRptCnt;

    /* USB需要提前申请一块数据块,因此小于等于1,不是泄露内存*/
    if(ulTotalCnt > ulDrvRsvMemCnt)
    {
        pstImmOmEventBlkMemUsedInfo->ulTotalUsedCnt = ulTotalCnt - 1;
        IMM_MntnReportMemLeakMsg(UEPS_PID_IMM_RB_FREE);
    }
    else
    {
        pstImmOmEventBlkMemUsedInfo->ulTotalUsedCnt = 0;
    }


    /*调用OM的事件上报接口*/
    if ( PS_SUCC != OM_AcpuEvent((PS_OM_EVENT_IND_STRU*)pstImmOmEventInd))
    {
        PS_LOG(UEPS_PID_IMM_RB_FREE, 0, IMM_PRINT_ERROR, "IMM_MntnMemOverTimeInfoRpt: OM Send Event Fail! \n");
    }

    /* 释放申请的内存 */
    PS_MEM_FREE(UEPS_PID_IMM_RB_FREE, pstImmOmEventInd);

    return;
}/* IMM_MntnMemOverTimeInfoRpt */