- 论坛徽章:
- 0
|
本帖最后由 mayjojo 于 2010-11-02 16:48 编辑
hi there~
我有一个需求,实现一个memcpy函数,但是在数据拷贝的时候不能经过CPU,以防止数据拷贝时对Cache的污染。- void * memcpy(void * dest, void * src, unsigned int len)
复制代码 我希望通过一个驱动程序实现这样的功能,我在Linux kernel中找到async_memcpy函数可以实现这样的功能,声明在include/linux/Async_tx.h。函数签名如下:
- struct dma_async_tx_descriptor *
- async_memcpy(struct page *dest, struct page *src, unsigned int dest_offset,
- unsigned int src_offset, size_t len,
- struct async_submit_ctl *submit)
复制代码 async_memcpy函数需要struct page结构指针作为参数,我遇到的困难是
1,不知道如何将用户空间的虚拟地址转换成struct page结构
2,page是4K吗?如果是,当len大于4K的时候,我应该使用循环解决,还是有其他方案。
我的环境是Linux Kernel 2.6.35, X86-64平台,内存8GB以上。
PS:
1,如果有第三方库(非商用,开放源码最佳)实现了如此功能,请告知。
2,如果有其他解决方案,请指出。
谢谢。 |
|