当前位置:  开发笔记 > 运维 > 正文

如何获得C中的"mm信号量"?

如何解决《如何获得C中的"mm信号量"?》经验,为你挑选了1个好方法。

如果要remap_pfn_range在实现mmap的自定义内核驱动程序中使用该函数,您就知道必须获取'mm信号量'.但目前尚不清楚如何通过我公开发现的例子来做到这一点.我认为编辑可用的示例会对社区有所帮助,我愿意这样做,但我不知道从哪里开始.

根据文档:只有在调用时保持mm信号量,这才是安全的.



1> Craig Estey..:

它有助于查看[for remap_pfn_range] 的实际来源.那是在mm子目录中,特别是在mm/memory.c

在那里,你会看到struct mm_struct *mm = vma->vm_mm;这样这就是mm你想要的.注意也是[可能]current->mm

如果你再浏览一些文件[显然mm/mmap.c],你会看到down_write(&mm->mmap_sem)up_write(&mm->mmap_sem)[这是内核的信号量原语].请注意,如果您只需要从该区域读取,则有down_readup_read

所以,把它们放在一起:

void
myfnc(...)
{
    struct vm_area_struct *vma = ...;
    struct mm_struct *mm = vma->vm_mm;

    ...

    down_write(&mm->mmap_sem);
    remap_pfn_range(vma,...);
    up_write(&mm->mmap_sem);

    ...
}

除了文档之外,找到这些东西的最好方法之一就是查看源代码本身.我已经写了20多年的Linux内核/驱动程序代码了,当我需要找到一些我不知道的东西时,我就是这么做的.

推荐阅读
郑谊099_448
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有