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/PROCESSOR-SDK-AM335X:在 I/O 期间移除 SDCard 时进行内核软锁定

Guru**** 2539500 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/570404/linux-processor-sdk-am335x-kernel-soft-lockup-whe-removing-sdcard-during-i-o

器件型号:PROCESSOR-SDK-AM335X

工具/软件:Linux

您好!

我们注意到一个问题、它会导致 mmcqd 线程在不间断状态下挂起、从而使其他线程处于饥饿状态。 如果我们在 I/O 操作期间从其插槽中卸下 SD 卡、则会发生这种情况。

检查内核时、我们注意到 MMC 层正确检测到与目标通信期间出现超时、并告知上层中止、但该线程一直尝试启动新的申请(MMC_START_REQ)、最终挂起。 OMAP-hsmmc 还标识超时、表示已传输0个字节。

虽然我知道在出现假超时的情况下应该重新尝试几次操作、但我不能找到它只是在经过合理的尝试后没有放弃的原因。

考虑到这一点、我有两个问题:

1 -是否有任何方法向 mmcqd 发出等待数据时应放弃的信号?

2 -如果我想实施一种机制来强制完成 mmcqd 线程、最好的方法是什么?

我们使用的是3.2内核、更新它不是问题。 我们的 MMC 插槽也没有用于卡检测的引脚。

此致、

吉列尔梅

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

    对延迟答复表示歉意。

    这是定制板吗? 或任何参考 TI 设计、我可以在这些参考设计上重现此情况?

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

    它是定制板。 正如我提到过的、我们使用3.2内核、并且我们的 MMC 插槽上没有卡检测引脚。 我已通过使用 MMC_CAP_Needs 轮询启用卡检测、但问题仍然存在。

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

    找出解决方案!

    我怀疑问题是,即使在取走该卡后,该组仍会发出冻结申请。 该错误已在德州内核存储库中的 commit a8ad82cc1b22d04916d9cdb1dc75052e80ac803c 中修复:

    提交 a8ad82cc1b22d04916d9cdb1dc75052e80ac803c
    作者:Sujit Reddy Thumma 
    日期:星期四12月8日14:05:50 2011 +0530
    
    MMC:卡:如果卡被移除、则终止块请求
    
    当主机意识到卡是时终止块请求
    从插槽中移除、并确保后续请求
    肯定会失败。 以静默方式执行此操作、以便块
    不会输出不必要的错误消息。
    
    签字人:Sujit Reddy Thumma 
    被:Adrian Hunter 
    签字人:Chris Ball 
    

    提交中的关键是将返回 BLKPREP_Kill 添加到 MMC_PREP_Request()中,此外还进行了一些小调整,为错误处理添加了一些“粒度”,并为移除卡的情况添加了特定代码。