gpt4 book ai didi

linux-kernel - Linux 设备驱动程序能否在 device_remove() 函数中等待 DMA 终止?

转载 作者:行者123 更新时间:2023-12-04 04:44:12 25 4
gpt4 key购买 nike

我已经为 PCI 设备编写了一个 Linux 设备驱动程序。该设备执行 DMA 操作。当程序在运行 DMA 操作时崩溃时会出现问题。

确实,当崩溃时,系统会调用device_remove() 函数(就像调用close() 一样)。此函数对 PCI 设备使用的内存区域进行清理,正确释放分配的内存。我的意思是它在正常情况下可以正常工作。

但是如果 DMA 正在运行,当它实际终止时,它将无法执行 DMA 清理,因为它无法再访问已释放的设备数据。一个简单的解决方案是在 close() 函数中等待。 (这是我的理解,但也许 DMA 函数的最后一部分从未执行过?)

让 DMA 在设备驱动程序的 device_remove()(又名 close())函数中实际终止是个好主意吗?还有其他方法可以解决这个问题吗?

最佳答案

是的,等待应该可以,但是:

除非您正在尝试测试 PCI 设备的意外删除行为,否则我认为当您有 DMA 进出设备时,对 remove() 的调用应该会失败。另外,我认为 close() 不能像 remove() 一样对待。后者将从内存中完全删除所有与设备相关的数据结构(例如:参见其中一个网络设备驱动程序)。所以,换句话说,我想说的是:close() 上的 wait() 但 remove() 上的 fail()

另外,根据您的情况,您可能还想看看 reference counting用于释放设备相关资源。

关于linux-kernel - Linux 设备驱动程序能否在 device_remove() 函数中等待 DMA 终止?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2817685/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com