- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我将多个物理上不连续的内存缓冲区映射到单个线性用户空间地址。我使用 vm_insert_page() 和 get_page()。我需要在所有分配的页面上使用 get_page() 因为只有给定缓冲区的第一页的引用计数 > 0 并且 vm_insert_page() 需要引用计数 > 0。
据说(根据网上的一些帖子)如果不再需要,我必须通过调用 get_page() 来“释放”我增加引用计数的页面。但是,我不太确定如何“释放”页面。我是否需要跟踪 get_page() 返回的每个页面结构,然后在取消映射期间调用相应的 API 以释放页面?看起来操作系统不会自动为我做这件事。也就是说,在用户进程存在后,页面上的引用计数保持不变,并在用户空间的下一个 mmap 上再次增加。
我的伪代码是这样的:
使用对 pci_alloc_consistent() 的调用分配多个 phys 非连续内存缓冲区
对于上面分配的所有缓冲区中的所有 4K block
使用 virt_to_page(phys_chunk_addr) 创建一个页面结构
//这是必需的,因为只有 phys 缓冲区的第一页
//将有 vm_insert_page() 需要的引用计数 > 0!
通过调用 get_page() 增加页面引用计数
使用 vm_insert_page() 将页面放入 vma
感谢您的任何建议/指示。
担。
最佳答案
DMA 一致性内存可能需要特定于体系结构的缓存标志,因此您不能简单地将其映射到用户空间。pci_alloc_consistent
已弃用。
要映射单个连续内存块,请使用 dma_alloc_coherent
和 dma_mmap_coherent
.
如果你不太关心便携性,你可以避免使用 dma_alloc_coherent
完全使用单个页面代替:
alloc_page
分配一堆页面(对于 PCI,您通常需要 GFP_DMA32
); dma_map_page
获取每个页面的 DMA 地址; vm_insert_page
将它们映射到用户空间. dma_sync_
* 在适当的时候发挥作用。
drivers/firewire/core-iso.c
,
core-cdev.c
.
dma_mmap_coherent
,所以你必须以艰难的方式做到这一点:
dma_alloc_coherent
根据您的需要经常使用; mmap
实现,只需设置 vm_area_struct->vm_ops
; vm_operations_struct.fault
, 调用 virt_to_page
, 调用 get_page
,并设置 vm_fault->page
到页面。 sound/core/pcm_native.c
.
关于linux-kernel - 如何通过 get_page() 为 mmap 手动引用 'free' 页?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17746331/
我的主题是做单页设计,我必须以嵌套的方式输出子页面。所以我想我可以像这样使用 get_pages() 两次: 'menu_order', 'parent' => 0, ));
我对 wordpress 很陌生,想知道是否有人可以对这段代码有所了解。 我正在尝试在其父页面上列出所有子页面,这是删除了一些 html 的代码: $post->ID ) ); foreach( $
我的问题完全出在 Paginator get_page() 方法上。这是我的查看代码: @login_required def photo_index_default_album(request):
我将多个物理上不连续的内存缓冲区映射到单个线性用户空间地址。我使用 vm_insert_page() 和 get_page()。我需要在所有分配的页面上使用 get_page() 因为只有给定缓冲区的
我正在使用 Koala gem:https://github.com/arsduo/koala从 facebook 图形 API 检索结果页面。 [编辑] 我按如下方式构造@graph 对象: @fa
我是一名优秀的程序员,十分优秀!