免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2197 | 回复: 2
打印 上一主题 下一主题

在驱动层的r/w回调函数中如何进行页数据拷贝 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-09-28 11:04 |只看该作者 |倒序浏览
我需要在读写回调函数(read_end_io/write_end_io)中进行页数据拷贝,而且目标页(topage)是刚刚alloc_page()的。

我们经常看到驱动层对memcpy是这样使用的:
memcpy(kmap(formpage, kmap(topage), len);
kunmap(frompage);
kunmap(topage);
这让我感觉memcpy必须使用映射过的虚地址进行拷贝。但是kunmap不能使用在中断程序中,所以我很困惑在读写回调(read_end_io/write_end_io)中如何使用memcpy进行页数据拷贝。

我的问题是下面两个:
1.在读写回调(read_end_io/write_end_io)中怎样进行页数据拷贝,使用memcpy或者替代方法都可以。(也许可以使用kmap_atomic和kunmap_atomic??)
2.memcpy必须使用映射过的内存虚地址吗,能否解释一下。

对回答者先表示感谢!

//发在内核问题区,一直没有回复,希望内核源码区的xdm能帮忙解答。

论坛徽章:
0
2 [报告]
发表于 2008-09-28 11:36 |只看该作者
原帖由 jjjjffff 于 2008-9-28 11:04 发表
我需要在读写回调函数(read_end_io/write_end_io)中进行页数据拷贝,而且目标页(topage)是刚刚alloc_page()的。

我们经常看到驱动层对memcpy是这样使用的:
memcpy(kmap(formpage, kmap(topage), len);
ku ...

首先你不需要用kmap,其次你最好用kmalloc加GFP_ATOMIC标志分配内存,这样你可以直接用memcpy函数。
是的,必须用虚拟地址

论坛徽章:
0
3 [报告]
发表于 2008-10-06 09:53 |只看该作者

回复 #2 zx_wing 的帖子

因为IO层的page是alloc_page直接分配的,所以才用了kmap。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP