TI中文支持网
TI专业的中文技术问题搜集分享网站

TDA4VM: 关于tiovx状态互斥的问题

Part Number:TDA4VM

hi, TI experts

我阅读了tiovx里面的framework/vx_target.c文件,第573行和第234行,关于node_desc_obj->flags的读写问题.

分别对应了两个函数:tivxTargetNodeDescNodeMarkComplete和tivxTargetNodeDescCanNodeExecute。

第573行执行了这条代码:tivxFlagBitSet(&node_obj_desc->flags, TIVX_NODE_FLAG_IS_EXECUTED)

第234行执行了这条代码:tivxFlagIsBitSet(prev_node_obj_desc->flags, TIVX_NODE_FLAG_IS_EXECUTED)

假如有NodeA和NodeB,它俩分别在DSP0和DSP1,有这样的情况:

NodeA完成了之后,自己需要将node_desc_obj->flags置成TIVX_NODE_FLAG_IS_EXECUTED。

NodeB在DSP1上,要检查NodeA的node_desc_obj->flags,这个时候应该读取NodeA的这个flags。

我认为这两个在不同的CPU上,这俩关于同一目标内存的读写应该需要同步,比如用TI提供的全局的spin_lock进行互斥。

但是,我不明白为什么这两个地方没有去做这个互斥?

node_desc_obj全是uncache的share_mem,所以就不需要加锁互斥了,是这样的吗?

或者说出于别的什么考虑,就不需要互斥了?

希望TI的专家能够帮忙解释一下。

补充一下,vx_target.c第573行(在tivxTargetNodeDescNodeMarkComplete里面)附近的代码如下:

static void tivxTargetNodeDescNodeMarkComplete(tivx_obj_desc_node_t *node_obj_desc, uint16_t *blocked_node_id)
{/* check if any node is blocked on this node to get unblocked and complete execution* This will be a node from next pipeline instance*/*blocked_node_id = node_obj_desc->blocked_node_id;node_obj_desc->blocked_node_id = (vx_enum)TIVX_OBJ_DESC_INVALID;node_obj_desc->state = TIVX_NODE_OBJ_DESC_STATE_IDLE;tivxFlagBitSet(&node_obj_desc->flags, TIVX_NODE_FLAG_IS_EXECUTED); //my confused code
}

vx_target.c第234行(在tivxTargetNodeDescCanNodeExecute里面)附近的代码如下:

static vx_bool tivxTargetNodeDescCanNodeExecute(const tivx_obj_desc_node_t *node_obj_desc)
{tivx_obj_desc_node_t *prev_node_obj_desc;uint16_t prev_node_obj_desc_id;uint16_t i;vx_bool can_execute = (vx_bool)vx_true_e;for(i=0; i<node_obj_desc->num_in_nodes; i++){prev_node_obj_desc_id = node_obj_desc->in_node_id[i];prev_node_obj_desc = (tivx_obj_desc_node_t*)tivxObjDescGet(prev_node_obj_desc_id);if( tivxObjDescIsValidType( (tivx_obj_desc_t*)prev_node_obj_desc, TIVX_OBJ_DESC_NODE) != 0){if( tivxFlagIsBitSet(prev_node_obj_desc->flags,TIVX_NODE_FLAG_IS_EXECUTED) == (vx_bool)vx_false_e)  //my confused{can_execute = (vx_bool)vx_false_e;}}}return can_execute;
}

Cherry Zhou:

您好,您的问题我们需要升级到英文论坛看下,链接如下。由于国外假期,给到答复的时间可能会有所延迟,敬请谅解:

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1244102/tda4vm-tiovx-state-mutex-issue

,

霄 吴:

非常感谢支持呀,

还有一个要求,我看了您在英文论坛发的提问,有这么一句话:“such as mutexes with global SPI_lock. But there's no mutex here”

能不能改一下?应该是global spin_lock, 而不是global SPI_lock,这两个的意思应该差很远的。

在TI内部,是用SPI_lock简写"SPIN_lock"的吗?如果是的话,那就算我多操心了。

,

Cherry Zhou:

您好,请看以下答复:

同一节点会执行函数 tivxTargetNodeDescNodeMarkComplete 和 tivxTargetNodeDescCanNodeExecute。 只有在调用第一个函数后,才会调用第二个函数。 在这里,它们是由同一个节点调用的。 例如,node A 调用 tivxTargetNodeDescNodeMarkComplete,然后node A 本身调用 tivxTargetNodeDescCandodeExecute(),即从node A 的对象描述符中提取下一个节点信息。 只有在这之后,node B 才会被触发。

TIOVX framework 已经过多次测试,有些客户已经使用该框架投入生产。所以此处并不会有问题。

详情请见英文论坛答复。

,

霄 吴:

hi,cherry

前天我在英文论坛直接回复了,你们的同事似乎没看到,

能帮忙问一下进展吗?

,

Cherry Zhou:

好的我们来问下看。

赞(0)
未经允许不得转载:TI中文支持网 » TDA4VM: 关于tiovx状态互斥的问题
分享到: 更多 (0)