From: Paolo Bonzini <pbonzini@redhat.com>
To: Wanpeng Li <kernellwp@gmail.com>
Cc: "linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
kvm <kvm@vger.kernel.org>, "Wanpeng Li" <wanpeng.li@hotmail.com>,
"Radim Krčmář" <rkrcmar@redhat.com>,
"Yunhong Jiang" <yunhong.jiang@intel.com>,
"Jan Kiszka" <jan.kiszka@siemens.com>,
"Haozhong Zhang" <haozhong.zhang@intel.com>
Subject: Re: [PATCH v4 2/2] KVM: nVMX: Fix preemption timer bit set in vmcs02 even if L1 doesn't enable it
Date: Thu, 7 Jul 2016 16:11:47 +0200 [thread overview]
Message-ID: <7e971b90-164b-9c2c-49f3-acfde4d0be47@redhat.com> (raw)
In-Reply-To: <CANRm+CyiAfbhC6Mu70ekZw95C=YpjVtwELKyzashWmK0QS88-A@mail.gmail.com>
On 07/07/2016 15:23, Wanpeng Li wrote:
>>> >>
>>> >> if (kvm_lapic_hv_timer_in_use(vcpu) &&
>>> >> + (is_guest_mode(vcpu) ||
>>> >> kvm_x86_ops->set_hv_timer(vcpu,
>>> >> - kvm_get_lapic_tscdeadline_msr(vcpu)))
>>> >> + kvm_get_lapic_tscdeadline_msr(vcpu))))
>>> >> kvm_lapic_switch_to_sw_timer(vcpu);
>>> >> if (check_tsc_unstable()) {
>>> >> u64 offset = kvm_compute_tsc_offset(vcpu,
>>> >>
>> >
>> > Thanks, this is good as a fallback. I'll try to fix it by getting the
>> > pin-based execution controls right but if I fail this patch is okay.
> I believe we still need this patch even if you implement "L1 TSC
> deadline timer to trigger while L2 is running" eventually, the codes
> you posted before:
>
> exec_control = vmcs12->pin_based_vm_exec_control;
> +exec_control &= ~PIN_BASED_VMX_PREEMPTION_TIMER;
> exec_control |= vmcs_config.pin_based_exec_ctrl;
> - exec_control &= ~PIN_BASED_VMX_PREEMPTION_TIMER;
> + if (vmx->hv_deadline_tsc == -1)
> + exec_control &= ~PIN_BASED_VMX_PREEMPTION_TIMER;
>
> So there is still case the preemption timer bit of vmcs02 is not set,
> however, the scenario I mentioned above in kvm_arch_vcpu_load() will
> set it unnecessary.
kvm_x86_ops->set_hv_timer _will_ set the preemption timer bit of vmcs02
if vmcs02 is the loaded one.
This can happen if L2 has access to L1's local APIC registers (i.e. L1
passes the local APIC instead of emulating it, as is the case in a
partitioning hypervisor). While L2 runs, it writes to the TSC deadline
MSR of L1. This causes a call to kvm_x86_ops->set_hv_timer while the
active VMCS is a vmcs02.
Paolo
next prev parent reply other threads:[~2016-07-07 14:30 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-07-07 12:18 [PATCH v4 1/2] KVM: nVMX: Fix incorrect preemption timer vmexit in nested guest Wanpeng Li
2016-07-07 12:18 ` [PATCH v4 2/2] KVM: nVMX: Fix preemption timer bit set in vmcs02 even if L1 doesn't enable it Wanpeng Li
2016-07-07 12:29 ` Paolo Bonzini
2016-07-07 13:23 ` Wanpeng Li
2016-07-07 14:11 ` Paolo Bonzini [this message]
2016-07-08 0:38 ` Wanpeng Li
2016-07-08 10:18 ` Paolo Bonzini
2016-07-08 13:58 ` Wanpeng Li
2016-07-08 14:08 ` Wanpeng Li
2016-07-08 15:47 ` Paolo Bonzini
2016-07-08 22:57 ` Wanpeng Li
2016-07-07 12:29 ` [PATCH v4 1/2] KVM: nVMX: Fix incorrect preemption timer vmexit in nested guest Paolo Bonzini
2016-07-07 22:12 ` yunhong jiang
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=7e971b90-164b-9c2c-49f3-acfde4d0be47@redhat.com \
--to=pbonzini@redhat.com \
--cc=haozhong.zhang@intel.com \
--cc=jan.kiszka@siemens.com \
--cc=kernellwp@gmail.com \
--cc=kvm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=rkrcmar@redhat.com \
--cc=wanpeng.li@hotmail.com \
--cc=yunhong.jiang@intel.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
all inboxes | Powered by JetHome®