Re: [PATCH] KVM: PPC: HV: Remove generic instruction emulation

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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




[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux