|
@@ -1511,6 +1511,7 @@ int vm_insert_pfn(struct vm_area_struct *vma, unsigned long addr,
|
|
|
unsigned long pfn)
|
|
|
{
|
|
|
int ret;
|
|
|
+ pgprot_t pgprot = vma->vm_page_prot;
|
|
|
/*
|
|
|
* Technically, architectures with pte_special can avoid all these
|
|
|
* restrictions (same for remap_pfn_range). However we would like
|
|
@@ -1525,10 +1526,10 @@ int vm_insert_pfn(struct vm_area_struct *vma, unsigned long addr,
|
|
|
|
|
|
if (addr < vma->vm_start || addr >= vma->vm_end)
|
|
|
return -EFAULT;
|
|
|
- if (track_pfn_vma_new(vma, vma->vm_page_prot, pfn, PAGE_SIZE))
|
|
|
+ if (track_pfn_vma_new(vma, &pgprot, pfn, PAGE_SIZE))
|
|
|
return -EINVAL;
|
|
|
|
|
|
- ret = insert_pfn(vma, addr, pfn, vma->vm_page_prot);
|
|
|
+ ret = insert_pfn(vma, addr, pfn, pgprot);
|
|
|
|
|
|
if (ret)
|
|
|
untrack_pfn_vma(vma, pfn, PAGE_SIZE);
|
|
@@ -1671,7 +1672,7 @@ int remap_pfn_range(struct vm_area_struct *vma, unsigned long addr,
|
|
|
|
|
|
vma->vm_flags |= VM_IO | VM_RESERVED | VM_PFNMAP;
|
|
|
|
|
|
- err = track_pfn_vma_new(vma, prot, pfn, PAGE_ALIGN(size));
|
|
|
+ err = track_pfn_vma_new(vma, &prot, pfn, PAGE_ALIGN(size));
|
|
|
if (err) {
|
|
|
/*
|
|
|
* To indicate that track_pfn related cleanup is not
|