工具/软件:Linux
函数 keyston_Rio maint_read 和 keyston_Rio maint_write
发出两个可能睡眠的调用:kzalloc
tbuf = kzalloc (align_len、GFP_NOFS | GFP_DMA);
如果(!tbuf)
return -ENOMEM;
和 mutex_lock
mutex_lock (&Krio_priv->LSU_lock_maint);
(内联函数 keyston_Rio maint_request 中的后者)。
这意味着必须使用 KeySton_Rio_maint_read 和 keyston_Rio_maint_write
不能从中断上下文调用、也不能在保持自旋锁时调用。
函数 RIO_MPORT_READ_CONFIG_32 (RIO-ACCESS.c)将锁定
RIO_CONFIG_LOCK、然后通过指针调用 keyston_RIO_maint_read
mport->ops->cread。 这是不安全的、可能会使内核死锁。
RapidIO 枚举机制结束调用
RIO_MPORT_READ_CONFIG_32、因此我们无法在不生成的情况下进行枚举
错误。
[29.486937] Rio:枚举主端口0、RIO0 mport
[29.493231]错误:从/home/MITLL/CH22073/ojm/keystoneii/processor-sdk-linux/kernel/locking/mutex.c:620的无效上下文调用的睡眠函数
[29.50649] in_at原 子():1、IRQs_disabled():128、pid:612、name:modprobe
[29.513398] 2个由 modprobe 保持的锁/612:
[29.517417]#0:(Rio_mport_list_lock){++.+}、位于:[ ] RIO_INIT_MPORTS+0x34/0x2a4
[29.525923]#1:(RIO_CONFIG_LOCK){…… },位于:[ ] RIO_MPORT_READ_CONFIG_32+0x40/0xa0
[29.534770] IRQ 事件戳:18684
[29.538179] Hardirqs 上次启用时间:(18683):[ ]_raW_spin_unlock_irqrestore+0x6c/0x74
[29.547093] Hardirqs last disabledat (18684):[ ]_raW_spin_lock_irqsave+0x1c/0x58
[29.555569]上次启用的软件地址为(16960):[ ]__do_softirq+0x234/0x2b0
[29.563346]最后禁用的软通道数(16937):[] ] IRQ_EXIT+0xd8/0x114
[29.570687]在以下位置禁用抢占:[<(null)>](null)
[29.576019]
[29.577513] CPU:0 PID:612 Comm:modprobe proged: G W 4.4.3.32-W1CMC-g1c11a44-mis脏#53
[29.586679]硬件名称:KeyStone
[29.590183][ ](展开回扫)从[ ](show_stack+0x10/0x14)
[29.597957][ ](show_stack)从[ ](dump_stack+0x98/0xc4)
[29.605208][ ](dump_stack)从[ ](mutex_lock_nested_0x30/0x4b4)
[29.613157][ ](mutex_lock_nested)从[ ](KeySton_Rio_maint_read+0x12c/0x400)
[29.622326][ ](KeySton_Rio_maint_read)、来自[ ](keyston_Rio_config_read+0x34/0x3c)
[29.631931][ ](keyston_Rio_config_read)、来自[ ](RIO_MPORT_READ_CONFIG_32+0x74/0xa0)
[29.641623][ ](RIO_MPORT_READ_CONFIG_32)、来自[ ](RIO_MPORT_CHK_DEV_ACCESS_0x44/0x74)
[29.651322][ ](RIO_mport_chk_dev_access)、来自[ ](RIO_ENUM_PEER +0x34/0x76c [RIO_SCAN])
[29.661111][ ](RIO_ENUM_PEER [RIO_SCAN])、从[ ](RIO_ENUM_MPORT+0x134/0x2b8 [RIO_SCAN])
[29.671071][ ](RIO_ENUM_Mport [RIO_SCAN])、从[ ](RIO_INIT_MPORTS+0x9C/0x2a4)
[29.680157][ ](RIO_INIT_Mports)、来自[ ](RIO_BASIC ATT+0x34/0x40 [RIO_SCAN])
[29.689332][ ](RIO_BASE_Attach [RIO_SCAN])、从[ ](do_One_initcall+bc/0x204)
[29.698590][ ](多个_initcall)、来自[ ](DO_INIT_MODULE+0x60/0x3a4)
[29.706713][ ](DO_INIT_MODULE)从[ ](load_module+0x1dc8/0x2370)
[29.714748][ ](LOAD_MODULE)从[ ](SYS_FINIT_MODULE+0x8c/0xc8)
[29.722609][ ](sys_finIT_module)从[ ](RET_FAST_SYSCALL+0x0/0x1c)