The function kvm_arch_vcpu_fault can handle architecture-specific case, so move pio-data fault case into it for x86. Signed-off-by: Hou Wenlong <houwenlong93@xxxxxxxxxxxxxxxxx> --- arch/x86/kvm/x86.c | 8 ++++++++ virt/kvm/kvm_main.c | 4 ---- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c index e5d5c5ed7dd4..30b0706eced8 100644 --- a/arch/x86/kvm/x86.c +++ b/arch/x86/kvm/x86.c @@ -5348,6 +5348,14 @@ long kvm_arch_vcpu_ioctl(struct file *filp, vm_fault_t kvm_arch_vcpu_fault(struct kvm_vcpu *vcpu, struct vm_fault *vmf) { + if (vmf->pgoff == KVM_PIO_PAGE_OFFSET) { + struct page *page = virt_to_page(vcpu->arch.pio_data); + + get_page(page); + vmf->page = page; + return 0; + } + return VM_FAULT_SIGBUS; } diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c index b50dbe269f4b..084fba09eca0 100644 --- a/virt/kvm/kvm_main.c +++ b/virt/kvm/kvm_main.c @@ -3370,10 +3370,6 @@ static vm_fault_t kvm_vcpu_fault(struct vm_fault *vmf) if (vmf->pgoff == 0) page = virt_to_page(vcpu->run); -#ifdef CONFIG_X86 - else if (vmf->pgoff == KVM_PIO_PAGE_OFFSET) - page = virt_to_page(vcpu->arch.pio_data); -#endif #ifdef CONFIG_KVM_MMIO else if (vmf->pgoff == KVM_COALESCED_MMIO_PAGE_OFFSET) page = virt_to_page(vcpu->kvm->coalesced_mmio_ring); -- 2.31.1