Il 30/07/2014 15:27, Alexander Graf ha scritto: > Now that we have properly split load/store instruction emulation and generic > instruction emulation, we can move the generic one from kvm.ko to kvm-pr.ko > on book3s_64. > > This reduces the attack surface and amount of code loaded on HV KVM kernels. Can emulation races happen on HV KVM like you can have on x86? Basically one CPU writes to MMIO while the other patches instructions so that basically anything can end up in the hands of the emulator? On PPC it may even happen simply because of a missing icache invalidation, I think, since it doesn't support self-modifying code without explicit invalidation. Paolo > Signed-off-by: Alexander Graf <agraf@xxxxxxx> > --- > arch/powerpc/kvm/Makefile | 2 +- > arch/powerpc/kvm/trace_pr.h | 20 ++++++++++++++++++++ > 2 files changed, 21 insertions(+), 1 deletion(-) > > diff --git a/arch/powerpc/kvm/Makefile b/arch/powerpc/kvm/Makefile > index 1ccd7a1..2d590de 100644 > --- a/arch/powerpc/kvm/Makefile > +++ b/arch/powerpc/kvm/Makefile > @@ -48,6 +48,7 @@ kvm-book3s_64-builtin-objs-$(CONFIG_KVM_BOOK3S_64_HANDLER) := \ > > kvm-pr-y := \ > fpu.o \ > + emulate.o \ > book3s_paired_singles.o \ > book3s_pr.o \ > book3s_pr_papr.o \ > @@ -91,7 +92,6 @@ kvm-book3s_64-module-objs += \ > $(KVM)/kvm_main.o \ > $(KVM)/eventfd.o \ > powerpc.o \ > - emulate.o \ > emulate_loadstore.o \ > book3s.o \ > book3s_64_vio.o \ > diff --git a/arch/powerpc/kvm/trace_pr.h b/arch/powerpc/kvm/trace_pr.h > index e1357cd..a674f09 100644 > --- a/arch/powerpc/kvm/trace_pr.h > +++ b/arch/powerpc/kvm/trace_pr.h > @@ -291,6 +291,26 @@ TRACE_EVENT(kvm_unmap_hva, > TP_printk("unmap hva 0x%lx\n", __entry->hva) > ); > > +TRACE_EVENT(kvm_ppc_instr, > + TP_PROTO(unsigned int inst, unsigned long _pc, unsigned int emulate), > + TP_ARGS(inst, _pc, emulate), > + > + TP_STRUCT__entry( > + __field( unsigned int, inst ) > + __field( unsigned long, pc ) > + __field( unsigned int, emulate ) > + ), > + > + TP_fast_assign( > + __entry->inst = inst; > + __entry->pc = _pc; > + __entry->emulate = emulate; > + ), > + > + TP_printk("inst %u pc 0x%lx emulate %u\n", > + __entry->inst, __entry->pc, __entry->emulate) > +); > + > #endif /* _TRACE_KVM_H */ > > /* This part must be outside protection */ > -- 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