This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] SK-AM69:dma_alloc_attrs ()分配的存储器上的存储器损坏。

Guru**** 2337880 points
Other Parts Discussed in Thread: SK-AM69, AM69
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1497267/sk-am69-memory-corruption-on-dma_alloc_attrs-allocated-memories

器件型号:SK-AM69
Thread 中讨论的其他器件: AM69

工具/软件:

您好、

我正在处理需要为 DMA 分配内存的项目。
在处理过程中、似乎分配的存储器上存在存储器损坏。

我们做了一些程序来测试它。

dma_bridge.tar.gz

每个程序的运行方式如下

-内核模块

1.在给定 ioctl (dma_bridge_alLOC)时分配存储器。
2.给出 ioctl 时打印内存。

-用户空间应用程序

1、使用 ioctl (dma_bridge_alLOC)请求分配至内核模块。
2.通过 mmap()函数将魔术值(0xbeef0000)写入分配的内存中。
3.在用户空间上打印内存并 使用 ioctl (dma_bridge_data_dump_in_kernel)请求内核模块转储。

执行结果和问题描述如下。

问题1 -设备驱动程序上的内存转储显示为全零。 这应该是幻数。
问题2 -用户空间上的内存转储有时显示为零。 这应该是幻数。

这个问题仅出现在 SK-AM69上。
我已经在其他 ARM 板和 x86计算机上测试了此代码。

如果我使用 dma_alloc_相干()进行分配,结果是相同的。

此致、

Minsoo

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好:  

    您还能告诉我们哪个 SDK 版本以及 DMA 使用的最终用例是什么?

    此致、

    Keerthy  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Keerthy。

    我当前使用的是  PROCESSOR-SDK-LINUX AM69-10.00.07.06  

    此致、

    Minsoo

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、  

    我将在内部进行检查、并在明天恢复。

    此致、

    Keerthy  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、

    您是否还能将任何内核/用户空间日志与您添加的测试代码共享?
    我们将尝试在我们结束时重现

    - Keerthy

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    请尝试将缓冲区设置为非 DMA 相干  

    在您的模块中的下面一行进行注释。  

    // device->DMA_Coherent = true;  

    如果有所帮助、请告诉我们  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    是的、这会提供预期的结果。

    这是否意味着 AM69无法分配 DMA 相干存储器?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好、 孙敏洙 

    >这是否意味着 AM69无法分配 DMA 相干存储器?

    您的用例是什么、例如1)在 DMA 和 CPU 之间传输数据、或者2)您希望仅在用户空间和内核空间之间进行同步  

    如果第一个是用例,那么一致性可以通过 asel 值实现,其中使用了 DMA 请参见  

    https://git.ti.com/cgit/ti-linux-kernel/ti-linux-kernel/tree/drivers/dma/ti/k3-udma-common.c?h=ti-linux-6.12.y#n55 

    此致

    Udit

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好 Udit Kumar

    可以看到、DMA 驱动程序和硬件本身支持一致性。

    问题是、使用分配在内核空间中的缓冲区在dma_alloc_coherent()通过访问用户空间时显示不同的内容mmap()。 内核和用户空间之间的数据看起来不一致、即使它们应该共享相同的内存区域也是如此。  如问题中所述、该问题仅发生在 SK-AM69上。

    此致

    Minsoo

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好:

    分配给此查询的专家离开办公室、但将于4月21日返回、因此请预计会延迟回复。

    谢谢。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    / device->dma_oclative = true

    到目前为止、您是否可以使用上述解决方法。 我们需要一些时间才能在 EVM 上重现和调试上述问题。

    可能是数据仍在高速缓存中、而不是刷新到 DDR。

    此致、

    Keerthy  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好:

    我想知道这个问题是否有任何更新。

    谢谢。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好:

    我将与我们的内部团队核实、下周初回来。 同时、请使用避免此问题的解决方法。

    - Keerthy

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好、孙敏洙、

    我创建了一个内部 TT。 这将在未来的版本中研究。 现在、请使用解决方法。

    关闭此票证、因为问题修复将在后续 SDK 版本中进行。

    谢谢、
    Keerthy

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好:

    我可以询问下一个 SDK 版本何时发布吗?
    回答这个问题后、我会结束这个问题。

    谢谢。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好、Minsoo、

    下一个 SDK 11.1大约将在8月左右。 发行说明将记录已修复的问题。 一定要注意这个。

    关闭此 TT。

    - Keerthy