Re: [PATCH 4/5] kvm/svm: implement enhanced INVLPG intercept

Avi Kivity
2010-12-07T13:27:33Z

On 12/07/2010 12:59 PM, Andre Przywara wrote:
> When the DecodeAssist feature is available, the linear address
> is provided in the VMCB on INVLPG intercepts. Use it directly to
> avoid any decoding and emulation.
> This is only useful for shadow paging, though.
>
> Signed-off-by: Andre Przywara<andre.przywara@amd.com>
> ---
> arch/x86/kvm/svm.c | 7 ++++++-
> 1 files changed, 6 insertions(+), 1 deletions(-)
>
> diff --git a/arch/x86/kvm/svm.c b/arch/x86/kvm/svm.c
> index 369bd85..3cf2cef 100644
> --- a/arch/x86/kvm/svm.c
> +++ b/arch/x86/kvm/svm.c
> @@ -2586,7 +2586,12 @@ static int iret_interception(struct vcpu_svm *svm)
>
> static int invlpg_interception(struct vcpu_svm *svm)
> {
> - return emulate_instruction(&svm->vcpu, 0, 0, 0) == EMULATE_DONE;
> + if (!boot_cpu_has(SVM_FEATURE_DECODE_ASSIST))
> + return emulate_instruction(&svm->vcpu, 0, 0, 0) == EMULATE_DONE;

static_cpu_has()

> +
> + kvm_mmu_invlpg(&svm->vcpu, svm->vmcb->control.exit_info_1);
> + skip_emulated_instruction(&svm->vcpu);
> + return 1;
> }
>
> static int emulate_on_interception(struct vcpu_svm *svm)

--
error compiling committee.c: too many arguments to function