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.

[参考译文] Linux/AM5728:在多线程应用程序中使用 EGL 上下文时出错

Guru**** 2604225 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/651138/linux-am5728-error-using-egl-context-in-multi-thread-application

大家好、Manisha、

感谢您的支持。
我已经测试了几天您的固定 um 二进制文件、我注意到了一些问题。

1)当我使用多个 EGL 上下文(非共享上下文)时、下面会出现一些错误消息。 我附加了源文件"kmscube.c"
1.1)使用 OMAP-BO_NEW
PVR:(错误):[ 1158->1161]< CreateBuffer():873|error>不能 mmap 缓冲区:权限被拒绝[0、]
PVR:(错误):[ 1158->1161]< CreateDrawable():948|ERROR>错误映射0缓冲区[0、]
1.2)使用 CMEM_LOCAT2
[75.270136] CMEMK 错误:无法在0x1a01a0000释放内存
CMEM 错误:FREE:无法释放 bb32db000
[80.973983]无法处理虚拟地址 b30cf000处的内核分页请求
[80.981461] PgD = d27f8440
[80.984177][B30cf000]* PgD=9080f003,* PMD=fe08e003
[80.989093]内部错误:Oops:2A07 [#1]抢占 SMP ARM
[80.994686]模块链接于: bc_example (O) SHA512_generic SHA512_arm sha256_generic SHA1_generic SHA1_arm_neon sha1_arm MD5 CBC xfrm_user xfrm4_tunnel ipcomp xfrm_ipcomp prm_ipcomp pr4 ahf_key xfrm_algo bluetooth_plat_hxfrm_hxhxhxhxhxhxhxhclus_ti clus_pru_pru_pru_mcot_pru_pru_pru_pru_pru_prue_mcot_pru_pru_pru_pru_vap_pru_vap_pru_pru_vap_pru_vap_pru_vap_pru_vap_pru_vap_pru_vap_pru_vap_pru_vap_pru_vi vap_pru_vap_pru_vap_or_pru_vap_pru_vap_msps extcon_Palmas crypto_engine extcon_core mt9t11x RTC_Palmas omap_remoteproc virtio_rpmsg_bus rpmsg_core remoteproc sch_FQ_cdel uio_module_drv (O) uio gdbserverproxy (O) memtodev (O) ck (O)
[81.058898] CPU:0 PID:1163 Comm:kmscube 被污染:G O 4.9.28-geed43d1050 #6
[81.067195]硬件名称:通用 DRA74X (平展器件树)
[81.073312]任务:d0930000 task.stack:d0aee000
[81.077869] PC 位于 v7_dma_inV_range+0x30/0x48 [cmemk]
[81.083120] LR 位于 ioctl+0x1350/0x158c [cmemk]
[81.087755] PC:[ ] LR:[ ] PSR:80070013
[81.087755] sp:d0aefe88 IP:d0aefdc8 FP:d0aefc.
[81.099279] R10:b678edd8 R9:d331a300 R8:d3360188
[81.104524] r7:00000000 R6:a01e000 R5:d3360180 R4:0004fe03
[81.111078] r3:0000003f r2:00000040 r1:b3176000 r0:b30cf000
[81.117632]标志:模式 SVC_32 ISA ARM 段用户上 FIQ 上的 Nzcv IRQ
[81.124794]控制:30c5387d 表:927f8440 DAC:fffffffd
[81.130562]处理 kmscube (pid:1163、栈限制= 0xd0aee210)
[81.136678]堆栈:(0xd0aefe88至0xd0af0000)

2) 2)尽管将实际应用程序设置为具有单个 EGL 上下文会在8~10小时内导致相同的内核紧急错误(使用 CMEM)、但我无法使用独立应用程序复制此问题。 因此、我将详细了解这个问题。

此致

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

    您好、Aupers、

    我们将对此进行研究并返回。

    此致、

    Manisha

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

    我们最终无法运行此应用程序 您能否共享 OMAP-bo 版本而不是用于缓冲区分配的 CMEM?

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

    您好、Aupers、

    请查看以下链接。 多线程环境中的 EGL 资源访问受到限制。 希望这对您有所帮助。  

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

    以下是您可能会发现有用的另一个链接-

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

    大家好、Manisha、

    感谢您的支持。

    1) 1)首先、要使用'OMAP-BO'分配缓冲区、只需在源代码中定义"use_omap"而不是"use_cmem"。  您还可以通过修改"MAX_THREAD"来更改 EGL 上下文的数量。

    2) 2)我检查了您在回复中提供的 URL。
    我的真实应用程序会创建多个 EGL 上下文并同时在三个显示屏上呈现它们。
    此外、如果我只进行常规 GL 函数调用或不重复创建和发布 EGLImage、我不会收到错误、显示正常。

    3) 3)如果我在源代码中取消定义'USE_EGLIMAGE'(添加'#UNDEF USE_EGLIMAGE')并注释掉我上传的示例代码(kmscube.c)中的 GBM_bo 器件(GBM_BO_IMPORT ()、GBM_BO_SAWE ())、则不会出现错误。
    总之、问题似乎是重复分配和销毁多个 EGL 上下文中的外部存储器时出现内存泄漏。

    此致。

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

    您好、Aupers、我们正在调查您共享的应用程序的问题。 当我们能够找出问题的根源时、我会回来。