结束linux块设备驱动程序中的I / O上下文

时间:2015-05-06 18:44:43

标签: linux kernel driver block device

我正在为一些自定义硬件编写Linux块设备驱动程序。

我是否来回 make_request()界面或 request_fn()界面,在任何一种情况下我都无法找到明确的答案或者不需要在请求数据的线程上下文中解析所请求的数据。

例如,内核请求我的驱动程序的一些数据,我的make_request()回调被调用。我是否要求在我从该回调返回之前传递该数据(例如使用bio_endio()),或者我可能在另一个线程/任务中调用该bio_endio()(例如,如果我在等待来自DMA的IRQ告诉我数据是本地可用的,我可以在BH中返回。)

在我的测试中,如果我在回调范围结束之前调用bio_endio(),内核和调用进程会挂起,如预期的那样 - 但他们最终会感到恐慌。 ..这会让我相信a)恐慌更多是警告司机开发人员他应该在“合理”的时间内返回 SOMETHING (无论线程背景如何)或在没有提供数据或错误代码的情况下,我根本不应该返回。

1 个答案:

答案 0 :(得分:0)

请阅读“2014年Linux内核设计的艺术”页面:58; - 项目“初始化I块设备的请求结构。

ATT