diff options
Diffstat (limited to 'virt/kvm/kvm_main.c')
| -rw-r--r-- | virt/kvm/kvm_main.c | 11 | 
1 files changed, 8 insertions, 3 deletions
diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c index 81dfc73d3df3..28510e72618a 100644 --- a/virt/kvm/kvm_main.c +++ b/virt/kvm/kvm_main.c @@ -1416,10 +1416,15 @@ static int hva_to_pfn_slow(unsigned long addr, bool *async, bool write_fault,  		down_read(¤t->mm->mmap_sem);  		npages = get_user_page_nowait(addr, write_fault, page);  		up_read(¤t->mm->mmap_sem); -	} else +	} else { +		unsigned int flags = FOLL_TOUCH | FOLL_HWPOISON; + +		if (write_fault) +			flags |= FOLL_WRITE; +  		npages = __get_user_pages_unlocked(current, current->mm, addr, 1, -						   write_fault, 0, page, -						   FOLL_TOUCH|FOLL_HWPOISON); +						   page, flags); +	}  	if (npages != 1)  		return npages;  |