use vm_insert_page() if 'struct page' exists
This commit is contained in:
@ -405,6 +405,19 @@ static int rus_vm_fault(struct vm_area_struct *vma, struct vm_fault *vmf)
|
|||||||
pfn = phys >> PAGE_SHIFT;
|
pfn = phys >> PAGE_SHIFT;
|
||||||
#if USE_VM_INSERT_PFN
|
#if USE_VM_INSERT_PFN
|
||||||
for (pix = 0; pix < (pgsize / PAGE_SIZE); ++pix) {
|
for (pix = 0; pix < (pgsize / PAGE_SIZE); ++pix) {
|
||||||
|
struct page *page;
|
||||||
|
|
||||||
|
if (pfn_valid(pfn+pix)) {
|
||||||
|
page = pfn_to_page(pfn+pix);
|
||||||
|
if (!page_count(page)) {
|
||||||
|
get_page(page);
|
||||||
|
}
|
||||||
|
error = vm_insert_page(vma, rva+(pix*PAGE_SIZE), page);
|
||||||
|
if (error) {
|
||||||
|
printk("vm_insert_page: %d\n", error);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
error = vm_insert_pfn(vma, rva+(pix*PAGE_SIZE), pfn+pix);
|
error = vm_insert_pfn(vma, rva+(pix*PAGE_SIZE), pfn+pix);
|
||||||
if (error) {
|
if (error) {
|
||||||
break;
|
break;
|
||||||
|
|||||||
Reference in New Issue
Block a user