From: "Radim Krčmář" <rkrcmar@redhat.com>
To: Jan Dakinevich <jan.dakinevich@gmail.com>
Cc: kvm@vger.kernel.org, pbonzini@redhat.com, kernellwp@gmail.com,
lprosek@redhat.com
Subject: Re: [PATCH v2 2/2] KVM: nVMX: invvpid handling improvements
Date: Tue, 22 Nov 2016 17:28:20 +0100 [thread overview]
Message-ID: <20161122162819.GH12949@potion> (raw)
In-Reply-To: <1477627230-12049-3-git-send-email-j.dakinevich@corp.email.ru>
2016-10-28 07:00+0300, Jan Dakinevich:
> From: Jan Dakinevich <jan.dakinevich@gmail.com>
>
> - Expose all invalidation types to the L1
>
> - Reject invvpid instruction, if L1 passed zero vpid value to single
> context invalidations
>
> Signed-off-by: Jan Dakinevich <jan.dakinevich@gmail.com>
> ---
> arch/x86/kvm/vmx.c | 36 ++++++++++++++++++++++++------------
> 1 file changed, 24 insertions(+), 12 deletions(-)
>
> diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c
> @@ -132,6 +132,12 @@
>
> #define VMX_MISC_EMULATED_PREEMPTION_TIMER_RATE 5
>
> +#define VMX_VPID_EXTENT_SUPPORTED_MASK \
> + (VMX_VPID_EXTENT_INDIVIDUAL_ADDR_BIT | \
> + VMX_VPID_EXTENT_SINGLE_CONTEXT_BIT | \
> + VMX_VPID_EXTENT_GLOBAL_CONTEXT_BIT | \
> + VMX_VPID_EXTENT_SINGLE_NON_GLOBAL_BIT)
> +
> /*
> * These 2 parameters are used to config the controls for Pause-Loop Exiting:
> * ple_gap: upper bound on the amount of time between two successive
> @@ -2838,8 +2844,7 @@ static void nested_vmx_setup_ctls_msrs(struct vcpu_vmx *vmx)
> */
> if (enable_vpid)
> vmx->nested.nested_vmx_vpid_caps = VMX_VPID_INVVPID_BIT |
> - VMX_VPID_EXTENT_SINGLE_CONTEXT_BIT |
> - VMX_VPID_EXTENT_GLOBAL_CONTEXT_BIT;
> + VMX_VPID_EXTENT_SUPPORTED_MASK;
> else
> vmx->nested.nested_vmx_vpid_caps = 0;
>
> @@ -7720,7 +7725,8 @@ static int handle_invvpid(struct kvm_vcpu *vcpu)
> vmx_instruction_info = vmcs_read32(VMX_INSTRUCTION_INFO);
> type = kvm_register_readl(vcpu, (vmx_instruction_info >> 28) & 0xf);
>
> - types = (vmx->nested.nested_vmx_vpid_caps >> 8) & 0x7;
> + types = (vmx->nested.nested_vmx_vpid_caps &
> + VMX_VPID_EXTENT_SUPPORTED_MASK) >> 8;
>
> if (!(types & (1UL << type))) {
Sorry for the late review.
This condition changed in 4.9-rc2, with 85c856b39b47 ("kvm: nVMX: Fix
kernel panics induced by illegal INVEPT/INVVPID types").
I applied the patch to kvm/queue without any changes as I think it
didn't affect this patch.
> nested_vmx_failValid(vcpu,
> @@ -7742,21 +7748,27 @@ static int handle_invvpid(struct kvm_vcpu *vcpu)
> }
>
> switch (type) {
> + case VMX_VPID_EXTENT_INDIVIDUAL_ADDR:
> case VMX_VPID_EXTENT_SINGLE_CONTEXT:
> - /*
> - * Old versions of KVM use the single-context version so we
> - * have to support it; just treat it the same as all-context.
> - */
> + case VMX_VPID_EXTENT_SINGLE_NON_GLOBAL:
> + if (!vpid) {
> + nested_vmx_failValid(vcpu,
> + VMXERR_INVALID_OPERAND_TO_INVEPT_INVVPID);
> + skip_emulated_instruction(vcpu);
> + return 1;
In v1, I said here:
(Just break and share the code.)
by the code I meant
skip_emulated_instruction(vcpu);
return 1;
> + }
> + break;
> case VMX_VPID_EXTENT_ALL_CONTEXT:
> - __vmx_flush_tlb(vcpu, to_vmx(vcpu)->nested.vpid02);
> - nested_vmx_succeed(vcpu);
> break;
as I actually prefer v1, which had here:
__vmx_flush_tlb(vcpu, vmx->nested.vpid02);
nested_vmx_succeed(vcpu);
break;
> default:
> - /* Trap individual address invalidation invvpid calls */
> - BUG_ON(1);
> - break;
> + WARN_ON_ONCE(1);
> + skip_emulated_instruction(vcpu);
> + return 1;
You could also omit the skip and return here ...
> }
>
> + __vmx_flush_tlb(vcpu, vmx->nested.vpid02);
> + nested_vmx_succeed(vcpu);
> +
... if this block was in the switch.
Do you wish to change the code?
Thanks.
> skip_emulated_instruction(vcpu);
> return 1;
> }
next prev parent reply other threads:[~2016-11-22 16:28 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-10-28 4:00 [PATCH v2 0/2] VMX: cleanups and nested support improvements Jan Dakinevich
2016-10-28 4:00 ` [PATCH v2 1/2] KVM: VMX: clean up declaration of VPID/EPT invalidation types Jan Dakinevich
2016-11-22 16:28 ` Radim Krčmář
2016-10-28 4:00 ` [PATCH v2 2/2] KVM: nVMX: invvpid handling improvements Jan Dakinevich
2016-11-22 16:28 ` Radim Krčmář [this message]
2016-11-02 8:36 ` [PATCH v2 0/2] VMX: cleanups and nested support improvements Ladi Prosek
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20161122162819.GH12949@potion \
--to=rkrcmar@redhat.com \
--cc=jan.dakinevich@gmail.com \
--cc=kernellwp@gmail.com \
--cc=kvm@vger.kernel.org \
--cc=lprosek@redhat.com \
--cc=pbonzini@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).