On Wed 26-10-16 00:36:09, Lorenzo Stoakes wrote: > In hva_to_pfn_slow() we are able to replace __get_user_pages_unlocked() with > get_user_pages_unlocked() since we can now pass gup_flags. > > In async_pf_execute() we need to pass different tsk, mm arguments so > get_user_pages_remote() is the sane replacement here (having added manual > acquisition and release of mmap_sem.) please also add a note about the FOLL_TOUCH reintroduced after it has been dropped by 1e9877902dc7e silently > Since we pass a NULL pages parameter the subsequent call to > __get_user_pages_locked() will have previously bailed any attempt at > VM_FAULT_RETRY, so we do not change this behaviour by using > get_user_pages_remote() which does not invoke VM_FAULT_RETRY logic at all. > > Signed-off-by: Lorenzo Stoakes <lstoakes@xxxxxxxxx> Acked-by: Michal Hocko <mhocko@xxxxxxxx> > --- > virt/kvm/async_pf.c | 7 ++++--- > virt/kvm/kvm_main.c | 5 ++--- > 2 files changed, 6 insertions(+), 6 deletions(-) > > diff --git a/virt/kvm/async_pf.c b/virt/kvm/async_pf.c > index 8035cc1..e8c832c 100644 > --- a/virt/kvm/async_pf.c > +++ b/virt/kvm/async_pf.c > @@ -82,10 +82,11 @@ static void async_pf_execute(struct work_struct *work) > /* > * This work is run asynchromously to the task which owns > * mm and might be done in another context, so we must > - * use FOLL_REMOTE. > + * access remotely. > */ > - __get_user_pages_unlocked(NULL, mm, addr, 1, NULL, > - FOLL_WRITE | FOLL_REMOTE); > + down_read(&mm->mmap_sem); > + get_user_pages_remote(NULL, mm, addr, 1, FOLL_WRITE, NULL, NULL); > + up_read(&mm->mmap_sem); > > kvm_async_page_present_sync(vcpu, apf); > > diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c > index 2907b7b..c45d951 100644 > --- a/virt/kvm/kvm_main.c > +++ b/virt/kvm/kvm_main.c > @@ -1415,13 +1415,12 @@ static int hva_to_pfn_slow(unsigned long addr, bool *async, bool write_fault, > npages = get_user_page_nowait(addr, write_fault, page); > up_read(¤t->mm->mmap_sem); > } else { > - unsigned int flags = FOLL_TOUCH | FOLL_HWPOISON; > + unsigned int flags = FOLL_HWPOISON; > > if (write_fault) > flags |= FOLL_WRITE; > > - npages = __get_user_pages_unlocked(current, current->mm, addr, 1, > - page, flags); > + npages = get_user_pages_unlocked(addr, 1, page, flags); > } > if (npages != 1) > return npages; > -- > 2.10.1 -- Michal Hocko SUSE Labs -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html