kvm_follow_pfn() is able to work with NULL in the .map_writable field of the homonymous struct. But __kvm_faultin_pfn() rejects the combo despite KVM for e500 trying to use it. Indeed .map_writable is not particularly useful if the flags include FOLL_WRITE and readonly guest memory is not supported, so add support to __kvm_faultin_pfn() for this case. Fixes: 1c7b627e9306 ("KVM: Add kvm_faultin_pfn() to specifically service guest page faults") Reported-by: Christian Zigotzky <chzigotzky@xxxxxxxxxxx> Tested-by: Christian Zigotzky <chzigotzky@xxxxxxxxxxx> Cc: linuxppc-dev@xxxxxxxxxxxxxxxx Cc: regressions@xxxxxxxxxxxxxxx Signed-off-by: Paolo Bonzini <pbonzini@xxxxxxxxxx> --- virt/kvm/kvm_main.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c index de2c11dae231..5177e56fdbd5 100644 --- a/virt/kvm/kvm_main.c +++ b/virt/kvm/kvm_main.c @@ -2975,10 +2975,11 @@ kvm_pfn_t __kvm_faultin_pfn(const struct kvm_memory_slot *slot, gfn_t gfn, .refcounted_page = refcounted_page, }; - if (WARN_ON_ONCE(!writable || !refcounted_page)) + if (WARN_ON_ONCE(!refcounted_page)) return KVM_PFN_ERR_FAULT; - *writable = false; + if (writable) + *writable = false; *refcounted_page = NULL; return kvm_follow_pfn(&kfp); -- 2.43.5