diff options
Diffstat (limited to 'mm/hmm.c')
| -rw-r--r-- | mm/hmm.c | 5 | 
1 files changed, 3 insertions, 2 deletions
| @@ -300,7 +300,8 @@ static int hmm_vma_handle_pte(struct mm_walk *walk, unsigned long addr,  	 * Since each architecture defines a struct page for the zero page, just  	 * fall through and treat it like a normal page.  	 */ -	if (pte_special(pte) && !pte_devmap(pte) && +	if (!vm_normal_page(walk->vma, addr, pte) && +	    !pte_devmap(pte) &&  	    !is_zero_pfn(pte_pfn(pte))) {  		if (hmm_pte_need_fault(hmm_vma_walk, pfn_req_flags, 0)) {  			pte_unmap(ptep); @@ -518,7 +519,7 @@ static int hmm_vma_walk_test(unsigned long start, unsigned long end,  	struct hmm_range *range = hmm_vma_walk->range;  	struct vm_area_struct *vma = walk->vma; -	if (!(vma->vm_flags & (VM_IO | VM_PFNMAP | VM_MIXEDMAP)) && +	if (!(vma->vm_flags & (VM_IO | VM_PFNMAP)) &&  	    vma->vm_flags & VM_READ)  		return 0; |