首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >内核空间:.probe可以同时/并发调用吗?

内核空间:.probe可以同时/并发调用吗?
EN

Stack Overflow用户
提问于 2022-01-17 14:56:46
回答 1查看 352关注 0票数 0

我有一个简单的内核模块,用于与.compatible相关联的基于ARM的嵌入式系统。如我们所知,在一个设备树中可以出现多个".compatibles",并且将为每个匹配的节点调用.probe

我找不到.probe函数是否可以由内核(!)同时调用的准确信息。如果在设备树中出现多个适当的.compatible,则不会出现。阅读内核驱动程序的任何源代码都让我确信它不能(同时被调用),尽管我还没有在.probes中看到锁。

我从https://www.kernel.org/doc/Documentation/driver-model/design-patterns.txt上读到:

内核包含一些设备驱动程序,这些驱动程序假设它们只在某个系统(单例)上被探测()一次,但自定义假设驱动程序绑定的设备将在几个实例中出现。这意味着探测()函数和所有回调都需要重入。

但是这看起来与热插拔或类似的东西有关(如果我错了,请纠正我),而我的问题只是关于节点的处理。

我已经发现了platform_driver.driver,中的.probe_type,它可以设置为,但不确定它是否是关于我所需要的(如果我错了,请纠正我)。

如果可以同步/并发地调用.probe,则必须实现一些锁定,并最终使这个例程重新进入。

请有人告诉我链接/文档/章节,在那里我可以读到.probe机制是如何实现的,或者给我一个确切的答案。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-04-21 08:31:08

我的案子的答案很简单:

.probe_type = PROBE_FORCE_SYNCHRONOUS

将使内核在每个发现的.probes上逐个调用of_node。

.probe_type = PROBE_PREFER_ASYNCHRONOUS

将使内核同时调用.probes

我是怎么做到的。我在文档或博客/论坛上找不到这些信息。因此,我的.probe函数延迟了一秒钟,在DT中添加了两个带有of_nodes的.compatible,并通过测量加载模块所需的时间(PROBE_FORCE_SYNCHRONOUS和PROBE_PREFER_ASYNCHRONOUS)对其进行了测试。

这些测试的结果看起来很清楚: PROBE_FORCE_SYNCHRONOUS需要2秒来加载模块,而PROBE_PREFER_ASYNCHRONOUS则需要1秒。

因此,答案是:是的,可以同时调用.probes,但是我们有控制它的机制。

顺便说一句,谢谢你的答复

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70743354

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档