更改内核空间中的页面顺序



我有一个内核模块,它处理的数据是:

  • 由内核分配
  • 页面对齐
  • 数据";映射";是任意的

我用kvmalloc()在内核空间中分配内存。对于用户空间表示,我使用vm_insert_page()来创建正确的有序表示。但我找不到一种方法,我可以";插入";或";重映射";或";重新排序";内核空间内的页面映射。对于核空间映射,是否有与vm_insert_page()相同的方法?

好吧,这似乎有效:

static int __init test_init_fs(void)
{
int rv = 0;
size_t size = 5*1024*1024; /* 5 MiB*/
void* mem = vzalloc(size);
struct page **pages = kcalloc(5, sizeof(struct page *), GFP_KERNEL);
pr_info("allocedn");

pages[0] = vmalloc_to_page(mem + 0 * PAGE_SIZE);
pages[1] = vmalloc_to_page(mem + 6 * PAGE_SIZE);
pages[2] = vmalloc_to_page(mem + 2 * PAGE_SIZE);
pages[3] = vmalloc_to_page(mem + 1 * PAGE_SIZE);
pages[4] = vmalloc_to_page(mem + 8 * PAGE_SIZE);
pr_info("got all pagesn");
void* new_mapping = vmap(pages,5, VM_MAP, PAGE_KERNEL);
pr_info("new mapping createdn");
void* buffer = vzalloc(5*PAGE_SIZE);
memcpy(buffer,new_mapping,5*PAGE_SIZE);
vunmap(new_mapping);

pr_info("unmappedn");
vfree(mem);
return rv;
}

相关内容

  • 没有找到相关文章

最新更新