Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

KVM: PPC: Support eventfd

In order to support the generic eventfd infrastructure on PPC, we need
to call into the generic KVM in-kernel device mmio code.

Signed-off-by: Alexander Graf <agraf@suse.de>

+20 -2
+1
arch/powerpc/kvm/Kconfig
··· 20 20 bool 21 21 select PREEMPT_NOTIFIERS 22 22 select ANON_INODES 23 + select HAVE_KVM_EVENTFD 23 24 24 25 config KVM_BOOK3S_HANDLER 25 26 bool
+3 -1
arch/powerpc/kvm/Makefile
··· 6 6 7 7 ccflags-y := -Ivirt/kvm -Iarch/powerpc/kvm 8 8 9 - common-objs-y = $(addprefix ../../../virt/kvm/, kvm_main.o coalesced_mmio.o) 9 + common-objs-y = $(addprefix ../../../virt/kvm/, kvm_main.o coalesced_mmio.o \ 10 + eventfd.o) 10 11 11 12 CFLAGS_44x_tlb.o := -I. 12 13 CFLAGS_e500_tlb.o := -I. ··· 77 76 78 77 kvm-book3s_64-module-objs := \ 79 78 ../../../virt/kvm/kvm_main.o \ 79 + ../../../virt/kvm/eventfd.o \ 80 80 powerpc.o \ 81 81 emulate.o \ 82 82 book3s.o \
+16 -1
arch/powerpc/kvm/powerpc.c
··· 314 314 case KVM_CAP_PPC_IRQ_LEVEL: 315 315 case KVM_CAP_ENABLE_CAP: 316 316 case KVM_CAP_ONE_REG: 317 + case KVM_CAP_IOEVENTFD: 317 318 r = 1; 318 319 break; 319 320 #ifndef CONFIG_KVM_BOOK3S_64_HV ··· 619 618 vcpu->mmio_is_write = 0; 620 619 vcpu->arch.mmio_sign_extend = 0; 621 620 621 + if (!kvm_io_bus_read(vcpu->kvm, KVM_MMIO_BUS, run->mmio.phys_addr, 622 + bytes, &run->mmio.data)) { 623 + kvmppc_complete_mmio_load(vcpu, run); 624 + vcpu->mmio_needed = 0; 625 + return EMULATE_DONE; 626 + } 627 + 622 628 return EMULATE_DO_MMIO; 623 629 } 624 630 ··· 635 627 { 636 628 int r; 637 629 638 - r = kvmppc_handle_load(run, vcpu, rt, bytes, is_bigendian); 639 630 vcpu->arch.mmio_sign_extend = 1; 631 + r = kvmppc_handle_load(run, vcpu, rt, bytes, is_bigendian); 640 632 641 633 return r; 642 634 } ··· 672 664 case 2: st_le16(data, val); break; 673 665 case 1: *(u8 *)data = val; break; 674 666 } 667 + } 668 + 669 + if (!kvm_io_bus_write(vcpu->kvm, KVM_MMIO_BUS, run->mmio.phys_addr, 670 + bytes, &run->mmio.data)) { 671 + kvmppc_complete_mmio_load(vcpu, run); 672 + vcpu->mmio_needed = 0; 673 + return EMULATE_DONE; 675 674 } 676 675 677 676 return EMULATE_DO_MMIO;