On 02/08/2018 11:19 PM, Benjamin Herrenschmidt wrote: > On Thu, 2018-02-08 at 17:03 +0100, Cédric Le Goater wrote: >> >> +/* >> + * Stolen from virt/kvm/kvm_main.c >> + */ > > Just export it. It's annoying that we can't just ues hva_to_pfn() ... yes. I might add a kvm_ prefix. I will check to see what is the best pratice. [ ... ] >> @@ -402,8 +450,15 @@ int kvmppc_book3s_radix_page_fault(struct kvm_run *run, struct kvm_vcpu *vcpu, >> vma = find_vma(current->mm, hva); >> if (vma && vma->vm_start <= hva && hva < vma->vm_end && >> (vma->vm_flags & VM_PFNMAP)) { >> - pfn = vma->vm_pgoff + >> - ((hva - vma->vm_start) >> PAGE_SHIFT); >> + if (vma->vm_flags & (VM_IO | VM_PFNMAP)) { >> + ret = hva_to_pfn_remapped(vma, hva, writing, >> + &pfn); >> + if (ret == -EAGAIN) >> + return RESUME_GUEST; >> + } else { >> + pfn = vma->vm_pgoff + >> + ((hva - vma->vm_start) >> PAGE_SHIFT); >> + } > > I don't think the else case is useful. If fact you are checking > VM_PFNMAP twice... yes. I am not sure what the VM_PFNMAP case does. The code comes from kvmppc_book3s_hv_page_fault() I suppose. Thanks, C.