flash申请内存失败,导致老化问题解决

背景

  1. 在闪光灯初始化阶段客制化了一个buffer,下发到kernel的闪光灯驱动中用于保存读取闪光灯寄存器的值。
  2. 功能测试都是正常的,但是一旦开始批量跑产线老化测试会有1/4500左右概率的后主摄拍照卡住。
  3. 定位根因是闪光灯初始化失败,进一步原因就是客制化的buffer申请失败。

具体流程

camxsensornode.cpp: ProcessingNodeFinalizeInitialization()
camxsensornode.cpp -> camxsensornode.cpp: m_pThreadManager->RegisterJobFamily();\n线程回调函数
camxsensornode.cpp -> camxsensornode.cpp: SensorThreadJobCallback()
camxsensornode.cpp -> camxsensornode.cpp: case SensorPostJobCommand::InitializeSensor:
camxsensornode.cpp -> camxsensornode.cpp: case SensorPostJobCommand::SubModulesCreate:
camxsensornode.cpp -> camxsensornode.cpp: SensorNode::CreateSensorSubmodules()
camxsensornode.cpp -> camxsensornode.cpp: SensorNode::CreateFlashResources()
camxsensornode.cpp -> camxnode.cpp:  CreateCmdBufferManager() x n
camxnode.cpp -> camxcmdbuffermanager.cpp : CmdBufferManager::Create()
camxcmdbuffermanager.cpp -> camxcmdbuffermanager.cpp: pCmdBufferManager->\nInitialize(pBufferManagerName, pParams);
camxcmdbuffermanager.cpp -> camxcmdbuffermanager.cpp: InitializePool();
camxcmdbuffermanager.cpp -> camxcslhw.cpp: CSLAlloc()
note right of camxcslhw.cpp: CSLAllocHW()...
camxcmdbuffermanager.cpp <-- camxcslhw.cpp
camxnode.cpp <-- camxcmdbuffermanager.cpp
camxsensornode.cpp <-- camxnode.cpp:
camxsensornode.cpp -> camxflash.cpp: Flash::Create(&createData)
camxflash.cpp -> camxflash.cpp: pCreateData->pFlash->Initialize(pCreateData)
camxflash.cpp -> camxflash.cpp: CreateInitializePacket()
camxflash.cpp -> camxcmdbuffermanager.cpp: m_pPacketManager->GetBuffer(&pResource)
camxcmdbuffermanager.cpp --> camxflash.cpp
camxflash.cpp -> camxflash.cpp: PopulateImageBuffer()
camxflash.cpp -> camximagebuffermanager.cpp: ImageBufferManager::Create(\n"FlashRegisterRead",&createData,\npFlashImageBufferManager)
camximagebuffermanager.cpp -> camximagebuffermanager.cpp: pImageBufferManager->Initialize();
camximagebuffermanager.cpp -> camxmempoolmgr.cpp: MemPoolMgr::RegisterBufferManager();
camxmempoolmgr.cpp -> camxmempoolmgr.cpp: pMemPoolMgr->RegisterNewMemPoolGroup();
camxmempoolmgr.cpp -> camxmempoolgroup.cpp: pMemPoolGroup->Initialize()
camxmempoolgroup.cpp --> camxmempoolmgr.cpp
camxmempoolmgr.cpp -> camxmempoolgroup.cpp: pMemPoolGroup->RegisterBufferManager();
camxmempoolgroup.cpp --> camxmempoolmgr.cpp
camxmempoolmgr.cpp --> camximagebuffermanager.cpp
note left of camxmempoolmgr.cpp: ------------先注册内存池组,再进行初始化内存,通过FLAG来管理----------
camximagebuffermanager.cpp -> camximagebuffermanager.cpp: pImageBufferManager->InitializeBuffers();
camximagebuffermanager.cpp -> camximagebuffer.cpp: pBuffer->Allocate();
camximagebuffer.cpp -> camxmempoolmgr.cpp: MemPoolMgr::GetBufferFromPool();
camxmempoolmgr.cpp -> camxmempoolgroup.cpp: pMemPoolGroup->GetBufferFromPool()
camxmempoolgroup.cpp -> camxmempoolgroup.cpp: ActivateBufferManager();
camxmempoolgroup.cpp -> camxmempoolgroup.cpp: UpdateMemPoolGroupBufferCounts();
camxmempoolgroup.cpp -> camxmempoolgroup.cpp: AllocateBuffers(1);
camxmempoolgroup.cpp -> camxcsl.cpp: CSLAlloc(pBuffer->name,...)
camxcsl.cpp --> camxflash.cpp: 正确的分配完内存,可顺利打开相机拍照。FlashRegisterRead申请的内存池组的flag,有概率被异步的TFE修改会导致分配内存失败。可以通过添加标志位bNeedDedicatedBuffers=TRUE,来设置专属内存组
note right of camxsensornode.cpp: 开启新的线程
camxsensornode.cpp -> camxsensornode.cpp:SensorPostJobCommand::ConfigureSensor:
camxsensornode.cpp -> camxsensornode.cpp:SensorPostJobCommand::ReadRequest:...

在这里插入图片描述正确的分配完内存,可顺利打开相机拍照。FlashRegisterRead申请的内存池组的flag,有概率被异步的TFE修改会导致分配内存失败。可以通过添加标志位bNeedDedicatedBuffers=TRUE,来设置专属内存组

If self shrinking is disabled or heap type is EGL for this group, its better to have it as a dedicated
group for this Buffer Manager set m_bDedicatedGroup to TRUE in such case, so that IsMatchingGroup for
this group would fail for any future Buffer Manager registers

翻译如下:

  • 9
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值