工具/软件:Linux
尊敬的团队,
我长时间运行 GateMP 示例。该示例使用 A15和 DSP 之间的 GateMP 来保护共享存储器,、但有时它无法保护。
我遵循 Linux 代码 GateHWSpinlock.c
在 GateHWSpinlock_start 中
----------------------------------------
/*如果不支持 hwspinlock_user 驱动程序,则返回/dev/mem */
MOD->FD =打开("/dev/hwspinlock、O_RDWR);
if (Mod->FD < 0){
MOD->FD =打开("/dev/mem、O_RDWR | O_SYNC);
}
否则{
MOD->HwuseLockDrv = true;
}
----------------------------------------
/dev/dictionary 没有 spinclock 设备,请使用/dev/mem?
我看到 spruhz7f.pdf 的第5421页。 它说:"只能在禁用中断的情况下保持自旋锁。"
但在函数 GateHWSpinlock_enter 中
----------------------------------------
IArgh GateHWSpinlock_enter (GateHWSpinlock_Object *。obj)
{
volatile uint32 *baseAddr = Mod->baseAddr;
struct hwspinlock_user_lock data ={
.id = obj->lockNum、
.timeout = 10、
};
IArg 键;
bool 锁定;
key = IGateProvider_enter (obj->localGate);
/*如果已输入 GATE,只需使用当前键返回*/
obj->nested++;
if (obj->nested > 1){
RETURN (KEY);
}
/*输入自旋锁*/
while (1){
if (Mod->useHwlockDrv){
Locked =!ioctl (Mod->FD、HWSPINLOCK_USER_LOCK、&data);
}
否则{
/*读取自旋锁,当我们得到它时返回非零值*/
Locked =(baseAddr[obj->lockNum]=0);
}
如果(已锁定){
中断;
}
obj->nested--;
IGateProvider_leave (obj->localGate、key);
key = IGateProvider_enter (obj->localGate);
obj->nested++;//重新嵌套栅极*/
}
返回(键);
}
----------------------------------------
函数 IGateProvider_enter 使用 pthread_mutex_lock。
我找不到 禁用 中断的操作。
代码是否确实确保了 hwspinlock 正常工作?
这是我的错误日志。
-->主要:
CMEM_init 成功
->Main_main:
->GateMPApp_create:
GateMPApp_create:主机已就绪
-- GateMPApp_create:
--> GateMPApp_exec:
GateMPApp_exec:使用主机创建的门
GateMPApp_exec:使用从器件创建的门
GateMPApp_exec:意外的变量 value.Test 失败。
GateMPApp_exec:以前的值:518、c[ 3647.514352] omap_hwmod:mu1_dsp1:_wait_target_disable 失败
当前值= 1
-- GateMPApp_exec:-268435456
<-- Main_main:
[3647.527235] omap_hwmod:mu0_dsp1:_wait_target_disable 失败
<--主要: