【问题标题】:Why there is no devm_vmalloc() in kernel?为什么内核中没有 devm_vmalloc()?
【发布时间】:2016-03-18 12:05:01
【问题描述】:

最近的 linux 内核提供了设备管理的资源分配,例如 devm_get_free_pages()devm_kmalloc()devm_ioremap()。它允许我们在模块退出时调用所有释放时简化代码。

虽然我可以自己实现,但我想知道为什么还没有devm_vmalloc()

【问题讨论】:

  • 为什么这个问题被否决了?
  • 或许答案很简单:要么提交补丁,要么承认不需要此功能。
  • 我可以提交补丁,但我不明白为什么在实现 devm 对另一种分配方法的支持时省略了 vmalloc。
  • 我相信这个问题被否决了,因为答案可能是基于意见的(不过我认为情况并非如此)。这个问题本身很好,但我怀疑你会在这里得到答案,很难猜出这个决定背后的动机。我建议您在linux-kernel 邮件列表上提出这个问题。还将所有出现在this 补丁中的人(都在“抄送:”和“签名人:”字段中)添加到邮件中的“抄送”列表中。

标签: memory-management linux-kernel


【解决方案1】:

使用 kmalloc 分配的内存在 ram 中是连续的,因此可以映射到用户(例如,在内核和用户之间创建共享内存) devm_* 函数的使用是向使用 sysfs 的用户报告内核中发生的事情,用户可以使用它来做某事 例如在 android(基于 linux 内核)中,可以使用 ION 将物理地址映射给用户,因此如果一台设备(例如相机)正在报告地址,其他设备(例如 GPU)可以使用它,但可以完成仅用于连续的物理内存。 vmalloc 分配不是连续的,这就是为什么用户与它无关,因为它无法访问内核内存并且 mmap 不起作用

【讨论】:

  • 对不起,这个答案是错误的。 devm与sysfs无关,kmalloc不需要连续等。
  • 我只是想给出我的想法,因为没有 devm_vmalloc 存在。您错了!! kmalloc 分配连续的物理块,这就是您可以将其映射到用户的原因。 devm_* 函数的主要思想是用于资源管理,但也可以通过 sys 提供数据,因此在用户空间中我可以读取它并使用其他设备驱动程序(例如 ION)映射它
猜你喜欢
  • 2020-07-03
  • 2022-01-15
  • 1970-01-01
  • 2019-11-06
  • 2020-02-27
  • 2012-08-16
  • 2015-05-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多