Пример #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_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_UINT32 IMM_RbIsrInit(VOS_UINT32 ulPid, VOS_UINT32 ulIntLevel,
                            VOIDFUNCPTR pfuncRecvIsr)
{
    VOS_INT32  lIntRet;


    /* 挂接中断 */
    /*Add by y45445 for PS FUSION PC ST 20120109 begin*/
#ifndef WTTF_PS_FUSION_PC_ST
    lIntRet = IMM_MEM_CONNECT_IPC_MEMFREE_INT(((IPC_INT_LEV_E)ulIntLevel), ((VOIDFUNCPTR)pfuncRecvIsr), VOS_NULL);
#else
    lIntRet = VHW_IPC_IntConnect(ulPid,((IPC_INT_LEV_E)ulIntLevel), ((VOIDFUNCPTR)pfuncRecvIsr), VOS_NULL);
#endif
    /*Add by y45445 for PS FUSION PC ST 20120109 end*/

    if (lIntRet != VOS_OK)
    {
        IMM_LOG1(ulPid, IMM_PRINT_ERROR, "IMM_RbIsrInit connect %d ISR fail", (VOS_INT32)ulIntLevel);
        return IMM_FAIL;
    }

    /* 使能通知中断 */
    /*Add by y45445 for PS FUSION PC ST 20120109 begin*/
#ifndef WTTF_PS_FUSION_PC_ST
    IMM_MEM_ENABLE_IPC_INT((IPC_INT_LEV_E)ulIntLevel);
#else
    VHW_IPC_IntEnable(ulPid,ulIntLevel);
#endif
    /*Add by y45445 for PS FUSION PC ST 20120109 end*/

    return IMM_SUCC;
}/* IMM_RbIsrInit */
Пример #4
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 */
Пример #5
0
VOS_UINT32  IMM_MntnCheckPoolLeak(VOS_UINT8 ucPoolId)
{
    IMM_MEM_POOL_STRU              *pstImmMemPool;
    VOS_UINT32                      ulDrvRsvMemCnt;


    if ( IMM_MEM_POOL_ID_BUTT <= ucPoolId )
    {
        IMM_LOG1(UEPS_PID_IMM_RB_FREE, IMM_PRINT_ERROR, "IMM_MemCheckPoolLeak,Poolid %d is invalid! \n", ucPoolId);
        return VOS_FALSE;
    }

    /* 获取内存池 */
    pstImmMemPool = IMM_MEM_GET_POOL(ucPoolId);

    /* 检查内存池是否使用 */
    if ( IMM_TRUE != pstImmMemPool->ucUsedFlag )
    {
        IMM_LOG1(UEPS_PID_IMM_RB_FREE, IMM_PRINT_WARNING, "IMM_MemCheckPoolLeak,Pool %d is not used! \n", ucPoolId);
        return VOS_FALSE;
    }

    /* 获取驱动保留Mem数量 */
    ulDrvRsvMemCnt = DRV_GET_PREMALLOC_SKB_NUM();

    /*检查内存是否泄露 */
    if ( ulDrvRsvMemCnt >= pstImmMemPool->usImmMemUsedCnt )
    {
        return VOS_FALSE;
    }

    IMM_LOG1(UEPS_PID_IMM_RB_FREE, IMM_PRINT_WARNING, "IMM_MEM_BLK Is Leak, UsedCnt %d ! \n",
        pstImmMemPool->usImmMemUsedCnt);

    /* 向SDT上报内存泄露事件 */
    IMM_MntnMemUsedInfoEventRpt(ucPoolId, IMM_MEM_TRIG_TYPE_LEAK);

    return VOS_TRUE;
} /* IMM_MntnCheckPoolLeak */
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 */
Пример #7
0
VOS_VOID  IMM_MntnCheckPoolOverTimeOccupancy(VOS_VOID)
{
    IMM_MEM_POOL_STRU              *pstImmMemPool;


    pstImmMemPool = IMM_MEM_GET_POOL(IMM_MEM_POOL_ID_SHARE);

    if ( IMM_TRUE != pstImmMemPool->ucUsedFlag )
    {
        IMM_LOG1(UEPS_PID_IMM_RB_FREE, IMM_PRINT_WARNING, "IMM_MntnCheckPoolOverTimeOccupancy ,Pool %d is not used! \n", IMM_MEM_POOL_ID_SHARE);
        return ;
    }

    /* 上报内存超时事件 */
    IMM_MntnMemOverTimeInfoRpt();

    return ;
} /* IMM_MntnCheckPoolOverTimeOccupancy */
Пример #8
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 */
Пример #9
0
VOS_VOID IMM_MntnCheckMemPoolLeak(VOS_UINT8 ucCheckType)
{
    switch(ucCheckType)
    {
        case IMM_MNTN_CHECK_POOL_LEAK_TYPE_USDCNT:
        IMM_MntnCheckLeak();
        break;

#if (FEATURE_ON == FEATURE_IMM_MEM_DEBUG)
        case IMM_MNTN_CHECK_POOL_LEAK_TYPE_OVERTIME:
        IMM_MntnCheckPoolOverTimeOccupancy();
        break;
#endif
        default:
        IMM_LOG1(UEPS_PID_IMM_RB_FREE, IMM_PRINT_WARNING, "IMM_MntnCheckMemPoolLeak Invalid type %d \n", ucCheckType);
        break;
    }

    return;
}/* IMM_MntnCheckMemPoolLeak */
Пример #10
0
VOS_VOID IMM_MntnMemTraceInfoRptSaveMemData
(
    VOS_UINT8  ucPoolId,
    IMM_BLK_MEM_TRACE_INFO_STRU *pstBlkMemTraceInfo,
    IMM_MEM_STRU *pMem
)
{

    if ( ucPoolId != pMem->enPoolId )
    {
        IMM_LOG2(UEPS_PID_IMM_RB_FREE, IMM_PRINT_ERROR, "IMM_MntnMemTraceInfoRptSaveMemData, ucPoolId %d, pMem->enPoolId %d Mismatch! \n", ucPoolId, pMem->enPoolId);
        return;
    }

    if ( IMM_MEM_POOL_ID_SHARE == ucPoolId )
    {
        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];
        }
        else
        {
            VOS_MemSet(pstBlkMemTraceInfo->aucMemData, 0, 4);
            IMM_LOG1(UEPS_PID_IMM_RB_FREE, IMM_PRINT_ERROR, "IMM_MntnMemTraceInfoRptSaveMemData, ucPoolId %d Mem Ptr is Null! \n", ucPoolId);
        }

        return;
    }

    if ( IMM_MEM_POOL_ID_EXT == ucPoolId )
    {
        *((VOS_UINT32 *)pstBlkMemTraceInfo->aucMemData) = (VOS_UINT32)pMem->pstMemBlk;
    }

    return;
}/* IMM_MntnMemTraceInfoRptSaveMemData */
VOS_VOID IMM_RbMemPrintIsrCnt( VOS_VOID )
{
    IMM_LOG1(UEPS_PID_IMM_RB_FREE, IMM_PRINT_NORMAL, "IPF中断次数: %d \n" , (VOS_INT32)g_stImmMemRbMntnEntity.ulImmMemRbReceiveIntCnt);
    return;
}/* IMM_RbMemPrintIsrCnt */
Пример #12
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 */