From: Jan Kiszka <jan.kiszka@siemens.com>
To: Avi Kivity <avi@redhat.com>
Cc: Marcelo Tosatti <mtosatti@redhat.com>,
"kvm@vger.kernel.org" <kvm@vger.kernel.org>
Subject: Re: [PATCH] KVM: VMX: simplify NMI mask management
Date: Wed, 23 Mar 2011 18:14:03 +0100 [thread overview]
Message-ID: <4D8A2A5B.7070609@siemens.com> (raw)
In-Reply-To: <4D8A1FBB.3010809@redhat.com>
On 2011-03-23 17:28, Avi Kivity wrote:
> On 03/23/2011 05:10 PM, Jan Kiszka wrote:
>> On 2011-03-23 15:58, Avi Kivity wrote:
>>> On 03/23/2011 04:54 PM, Jan Kiszka wrote:
>>>>> @@ -3991,9 +3987,7 @@ static void __vmx_complete_interrupts(struct vcpu_vmx *vmx,
>>>>> * Clear bit "block by NMI" before VM entry if a NMI
>>>>> * delivery faulted.
>>>>> */
>>>>> - vmcs_clear_bits(GUEST_INTERRUPTIBILITY_INFO,
>>>>> - GUEST_INTR_STATE_NMI);
>>>>> - vmx->nmi_known_unmasked = true;
>>>>> + vmx_set_nmi_mask(&vmx->vcpu, false);
>>>>> break;
>>>>> case INTR_TYPE_SOFT_EXCEPTION:
>>>>> vmx->vcpu.arch.event_exit_inst_len =
>>>>
>>>> Looks consistent to me, but maybe you should update the comment above
>>>> that's now also applied to the emulated mask.
>>>
>>> In what way?
>>>
>>> /*
>>> * SDM 3: 27.7.1.2 (September 2008)
>>> * Clear bit "block by NMI" before VM entry if a NMI
>>> * delivery faulted.
>>> */
>>>
>>> Seems pretty descriptive.
>>
>> IIRC, the above only applies to CPUs that support VNMI and is
>> meaningless for older ones. But vmx_set_nmi_mask is not void for those
>> old CPUs.
>
> That's what I pointed out in the second paragraph of the commit log -
> that it's desired for non-vnmi capable cpus:
>
> static void vmx_inject_nmi(struct kvm_vcpu *vcpu)
> {
> struct vcpu_vmx *vmx = to_vmx(vcpu);
>
> if (!cpu_has_virtual_nmis()) {
> /*
> * Tracking the NMI-blocked state in software is built upon
> * finding the next open IRQ window. This, in turn, depends on
> * well-behaving guests: They have to keep IRQs disabled at
> * least as long as the NMI handler runs. Otherwise we may
> * cause NMI nesting, maybe breaking the guest. But as this is
> * highly unlikely, we can live with the residual risk.
> */
> vmx->soft_vnmi_blocked = 1;
> vmx->vnmi_blocked_time = 0;
> }
>
> We block nmi here, and if we later take a fault, nmi remains both
> undelivered and blocked.
>
> The SDM refers to the fact the the cpu blocks NMI first and checks for
> exceptions during delivery later. That happens to match the soft-vnmi
> implementation, so the comment remains valid.
>
Makes sense now.
Jan
--
Siemens AG, Corporate Technology, CT T DE IT 1
Corporate Competence Center Embedded Linux
prev parent reply other threads:[~2011-03-23 17:14 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-03-23 13:12 [PATCH] KVM: VMX: simplify NMI mask management Avi Kivity
2011-03-23 14:54 ` Jan Kiszka
2011-03-23 14:58 ` Avi Kivity
2011-03-23 15:10 ` Jan Kiszka
2011-03-23 16:28 ` Avi Kivity
2011-03-23 17:14 ` Jan Kiszka [this message]
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=4D8A2A5B.7070609@siemens.com \
--to=jan.kiszka@siemens.com \
--cc=avi@redhat.com \
--cc=kvm@vger.kernel.org \
--cc=mtosatti@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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.