使用CAAM写入文件系统时使用`t k (密码块链接(aes)) `进行文件系统加密时出现以下错误。
caam_jr 30902000.jr:4000141c:DECO: desc idx 20:DECO看门狗定时器超时错误
这种情况只是偶尔发生,但在启用所有内核运行时似乎更为普遍。
很抱歉延迟回复。
我们使用的是 Phytec 公司的 `linux-imx_5.15.71_2.2.2-phy5`,并打上了https://github.com/Freescale/linux-fslc/tree/5.15-2.2.x-imx至 5.15.183 的补丁。 不幸的是,这个问题只是偶尔出现(在跨多个单元的 CI 测试中,每 500 小时左右才会出现不到 1 个实例),而且我还无法创建一个简单的重现器。
最初尝试启用 “CONFIG_CRYPTO_DEV_FSL_CAAM_DEBUG” 会阻止我们的设备启动,因为我们正在使用 CAAM 加密根文件系统和各种数据分区,这会生成过多的日志记录。
我正在考虑将日志信息添加到循环缓冲区中,并在错误发生时发出。 由于这只会导致最后 1000 条左右的记录被发出,我想知道是否有任何设置信息是我们应该始终记录的,以支持分析。
谢谢!
丹尼尔
你能否分享一下你正在使用的电路板支持包 版本以及出现问题时的步骤和日志?
此致
哈维
不幸的是,我无法使用其他工具进行重现
我已经添加了最后 2048 条 CAAM 故障日志信息的记录,现在我们正在等待故障在 CI 中再次发生。 我收到日志后会尽快发送给您。
看门狗超时错误是由 DECO 暂停时触发信号的,但是有多种情况可以让 DECO 暂停,例如输入/输出缓冲区地址、长度等。
你能用 "dd" 或 "fio" 工具进行压力测试来重现这个错误吗?
如果问题能够稳定重现,就能帮助我们找到根本原因。
此致
哈维
最后,记录失败。 这应包括 CAAM 子系统的最后 2048 条日志记录。 与标准日志记录的唯一区别是不包括 `src` 和 `dst` 缓冲区数据。
请注意,出于省电的考虑,我们降低了 CPU 和 DDR 的运行速度,这可能会对结果产生影响。
不,我无法用 dd 或 fio 进行重现。 在我捕获之前的日志的系统上,它只会偶尔发生(到目前为止每 2 个月一次)。
在另一个代码略有不同的系统上,这种情况每天至少发生一次。 我们认为这是在启动过程中加载大量共享库时造成的(在我获取日志的系统中并没有使用这些共享库)。 遗憾的是,我们无法轻易收集该版本的日志,但我们可以相对快速地测试补丁,看看问题是否得到解决。
以前的日志是否包含足够的调查信息? 如果没有,还需要什么?
简单查看我的日志后发现,在故障发生时,8 个队列请求中的第 8 个请求是产生 DECO 看门狗超时错误的原因。 在日志的早期部分,即使在处理其他偏移量序列时,似乎也很少有排队等待的请求(有时可能只有一个? 这是线索吗?
在此之前排队的 7 个请求似乎都能正确完成,因此可能是以下原因之一...
谢谢!
丹尼尔
拿到日志后,我决定亲自深入研究。 当系统处于高内存负载但 DDR 仍以 400MT/s 的速度运行时(在我们的情况下有时为 100MT/s),CAAM 有时会产生看门狗错误。
eMMC 驱动程序会强制 DDR 达到 3000MT/s 的速度,但对于写入而言,这并不一定要等到加密完成后才会发生。
我们已经为我们的用例修复了这个问题,在 `caam_jr_enqueue () `中请求` BUS_FREQ_HIGH `,然后通过计划工作从 `caam_jr_dequeue () `再次将其释放。
这解决了文件系统访问问题,但在从网络堆栈调用时(例如通过 xfrm)会产生问题,因为 `request_bus_freq()` 最终会在原子上下文中被调用(从更高的网络堆栈调用),而且 `request_bus_freq()` 和 `clk_xxx()` 调用都使用了 mutex
我们已经解决了这个问题,在除文件系统之外的所有系统中禁用了 CAAM,但如果向上游推广,还需要更好的解决方案。