From: Jan Kiszka <jan.kiszka@web.de>
To: Bandan Das <bsd@redhat.com>
Cc: kvm@vger.kernel.org, Paolo Bonzini <pbonzini@redhat.com>,
Gleb Natapov <gleb@kernel.org>
Subject: Re: [PATCH 3/3] KVM: nVMX: check for null vmcs12 when L1 does invept
Date: Thu, 27 Mar 2014 10:03:36 +0100 [thread overview]
Message-ID: <5333E968.8030708@web.de> (raw)
In-Reply-To: <jpgsiq4k8vv.fsf@nelium.bos.redhat.com>
[-- Attachment #1: Type: text/plain, Size: 2966 bytes --]
On 2014-03-26 21:22, Bandan Das wrote:
> Jan Kiszka <jan.kiszka@web.de> writes:
>
>> On 2014-03-22 17:43, Bandan Das wrote:
>>> Jan Kiszka <jan.kiszka@web.de> writes:
>>>
>>>> On 2014-03-20 21:58, Bandan Das wrote:
>>>>> Jan Kiszka <jan.kiszka@siemens.com> writes:
>>>>>
>>>>>> On 2014-03-20 04:28, Bandan Das wrote:
>>>>>>> Some L1 hypervisors such as Xen seem to be calling invept after
>>>>>>> vmclear or before vmptrld on L2. In this case, proceed with
>>>>>>> falling through and syncing roots as a case where
>>>>>>> context wide invalidation can't be supported
>>>>>>
>>>>>> Can we also base this behaviour on a statement in the SDM? But on first
>>>>>> glance, I do not find anything like this over there.
>>>>>
>>>>> The SDM has nothing of this sort explicitly mentioned but 28.3.3.1
>>>>> "Operations that invalidate Cached Mappings" does mention that
>>>>> the instruction may invalidate mappings associated with other
>>>>> EP4TAs (even in single context).
>>>>
>>>> Yes, "may". So we are implementing undefined behavior in order to please
>>>> a broken hypervisor that relies on it? Then please state this in the
>>>> patch and probably also inform Xen about their issue.
>>>
>>> Why undefined behavior ? We don't do anything specific for
>>> the single context invalidation case ianyway .e If the eptp matches what
>>> vmcs12 has, single context invalidation does fall though to the global
>>> invalidation case already. All this change does is add the "L1 calls
>>> invept after vmclear and before vmptrld" to the list of cases to fall
>>> though to global invalidation since nvmx doesn't have any knowledge of
>>> the current eptp for this case.
>>
>> OK, I think I misunderstood what the guest expects and how we currently
>> achieve this: we do not track the mapping between guest and host eptp,
>> thus cannot properly emulate its behaviour. We therefore need to flush
>> everything.
>>
>>>
>>> Or do you think we should rethink this approach ?
>>
>> Well, I wonder if we should expose single-context invept support at all.
>>
>> I'm also wondering if we are returning proper flags on
>>
>> if ((operand.eptp & eptp_mask) !=
>> (nested_ept_get_cr3(vcpu) & eptp_mask))
>> break;
>
> That does sound plausible but then we would have to get rid of this
> little optimization in the code you have quoted above. We would have
> to flush and sync roots for all invept calls. So, my preference is to
> keep it.
Do you have any numbers on how many per-context invept calls we are able
to ignore? At least for KVM this is should be 0 as we only flush on
changes to the current EPT structures.
Jan
>
>> Neither nested_vmx_succeed nor nested_vmx_fail* is called if this
>> condition evaluates to true.
>
> It appears we should always call nested_vmx_succeed(). If you are ok,
> I will send a v2.
>
> Thanks,
> Bandan
>
>> Jan
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 263 bytes --]
next prev parent reply other threads:[~2014-03-27 9:03 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-03-20 3:28 [PATCH 0/3] nVMX: Fixes to run Xen as L1 Bandan Das
2014-03-20 3:28 ` [PATCH 1/3] KVM: nVMX: Advertise support for interrupt acknowledgement Bandan Das
2014-03-20 8:30 ` Jan Kiszka
2014-03-20 20:45 ` Bandan Das
2014-03-20 3:28 ` [PATCH 2/3] KVM: nVMX: Ack and write vector info to intr_info if L1 asks us to Bandan Das
2014-03-20 9:13 ` Jan Kiszka
2014-03-20 20:46 ` Bandan Das
2014-03-20 3:28 ` [PATCH 3/3] KVM: nVMX: check for null vmcs12 when L1 does invept Bandan Das
2014-03-20 9:34 ` Jan Kiszka
2014-03-20 20:58 ` Bandan Das
2014-03-22 11:38 ` Jan Kiszka
2014-03-22 16:43 ` Bandan Das
2014-03-23 19:16 ` Jan Kiszka
2014-03-26 20:22 ` Bandan Das
2014-03-27 9:03 ` Jan Kiszka [this message]
2014-03-27 22:14 ` Bandan Das
2014-03-20 12:43 ` Paolo Bonzini
2014-03-20 20:58 ` Bandan Das
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=5333E968.8030708@web.de \
--to=jan.kiszka@web.de \
--cc=bsd@redhat.com \
--cc=gleb@kernel.org \
--cc=kvm@vger.kernel.org \
--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