|
@@ -1649,10 +1649,14 @@ EXPORT_SYMBOL(vm_insert_pfn_prot);
|
|
|
int vm_insert_mixed(struct vm_area_struct *vma, unsigned long addr,
|
|
|
pfn_t pfn)
|
|
|
{
|
|
|
+ pgprot_t pgprot = vma->vm_page_prot;
|
|
|
+
|
|
|
BUG_ON(!(vma->vm_flags & VM_MIXEDMAP));
|
|
|
|
|
|
if (addr < vma->vm_start || addr >= vma->vm_end)
|
|
|
return -EFAULT;
|
|
|
+ if (track_pfn_insert(vma, &pgprot, pfn))
|
|
|
+ return -EINVAL;
|
|
|
|
|
|
/*
|
|
|
* If we don't have pte special, then we have to use the pfn_valid()
|
|
@@ -1670,9 +1674,9 @@ int vm_insert_mixed(struct vm_area_struct *vma, unsigned long addr,
|
|
|
* result in pfn_t_has_page() == false.
|
|
|
*/
|
|
|
page = pfn_to_page(pfn_t_to_pfn(pfn));
|
|
|
- return insert_page(vma, addr, page, vma->vm_page_prot);
|
|
|
+ return insert_page(vma, addr, page, pgprot);
|
|
|
}
|
|
|
- return insert_pfn(vma, addr, pfn, vma->vm_page_prot);
|
|
|
+ return insert_pfn(vma, addr, pfn, pgprot);
|
|
|
}
|
|
|
EXPORT_SYMBOL(vm_insert_mixed);
|
|
|
|