public inbox for kvm@vger.kernel.org
 help / color / mirror / Atom feed
From: "Nadav Har'El" <nyh@math.technion.ac.il>
To: Zachary Amsden <zamsden@gmail.com>
Cc: Bandan Das <bandan.das@stratus.com>,
	KVM Mailing List <kvm@vger.kernel.org>,
	Marcelo Tosatti <mtosatti@redhat.com>
Subject: Re: Nested VMX - L1 hangs on running L2
Date: Wed, 27 Jul 2011 14:51:00 +0300	[thread overview]
Message-ID: <20110727115100.GA23118@fermat.math.technion.ac.il> (raw)
In-Reply-To: <CAKiCmT28X2F59p_OByJcWTMSo09S=VdWGa0CckFB6fHGMCpcRA@mail.gmail.com>

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1: Type: text/plain; charset=iso-8859-8-i, Size: 2155 bytes --]

On Wed, Jul 20, 2011, Zachary Amsden wrote about "Re: Nested VMX - L1 hangs on running L2":
> > > No, both patches are wrong.
> >
> 
> kvm_get_msr(vcpu, MSR_IA32_TSC, &tsc) should always return the L1 TSC,
> regardless of the setting of any MSR bitmap. The reason why is that it
> is being called by the L0 hypervisor kernel, which handles only
> interactions with the L1 MSRs.

guest_read_tsc() (called by the above get_msr) currently does this:

	static u64 guest_read_tsc(void)
	{
		u64 host_tsc, tsc_offset;

		rdtscll(host_tsc);
		tsc_offset = vmcs_read64(TSC_OFFSET);
		return host_tsc + tsc_offset;
	}

I guess you'd want this to change to something like:

		tsc_offset = is_guest_mode(vcpu) ? 
			vmx->nested.vmcs01_tsc_offset :
			vmcs_read64(TSC_OFFSET);

But I still am not convinced that that would be right....

E.g., imagine the case where L1 uses TSC_OFFSETING and but doesn't
trap TSC MSR read. The SDM says (if I understand it correctly) that this TSC
MSR read will not exit (because L1 doesn't trap it) but *will* do the extra
offsetting. In this case, the original code (using vmcs02's TSC_OFFSET which
is the sum of that of vmcs01 and vmcs12), is correct, and the new code will
be incorrect. Or am I misunderstanding the SDM?

Can you tell me in which case the original code would return incorrect
results to a guest (L1 or L2) doing anything MSR-related?

I'm assuming that some code in KVM also uses kvm_read_msr and assumes it
gets the TSC value for L1, not for the guest currently running (L2 or L1).
I don't understand why it needs to assume that... Why would it be wrong to
return L2's TSC, and just remember that *changing* the L2 TSC really means
changing the L1 TSC offset (vmcs01_tsc_offset), not vmcs12.tsc_offset which
we can't touch?

Thanks,
Nadav.

-- 
Nadav Har'El                        |   Wednesday, Jul 27 2011, 25 Tammuz 5771
nyh@math.technion.ac.il             |-----------------------------------------
Phone +972-523-790466, ICQ 13349191 |You may only be one person to the world,
http://nadav.harel.org.il           |but may also be the world to one person.

  reply	other threads:[~2011-07-27 12:01 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-07-08 18:40 Nested VMX - L1 hangs on running L2 Bandan Das
2011-07-18 18:26 ` Marcelo Tosatti
2011-07-19  2:41   ` Bandan Das
2011-07-20  7:58   ` Jan Kiszka
2011-07-20 16:12     ` Marcelo Tosatti
2011-07-20 16:19       ` Jan Kiszka
2011-07-20 16:35         ` Marcelo Tosatti
     [not found]   ` <CAKiCmT00vyR5vRBDWFYK2Z8sgmjLBPwbYU5W8q2wAUTrxS1_tA@mail.gmail.com>
2011-07-20 19:52     ` Nadav Har'El
2011-07-20 20:42       ` Bandan Das
2011-07-21  2:49       ` Zachary Amsden
2011-07-27 11:51         ` Nadav Har'El [this message]
2011-07-29  9:01           ` Zachary Amsden
2011-07-29 10:21             ` Roedel, Joerg
2011-07-31 13:48             ` Nadav Har'El
2011-07-31 18:55               ` Zachary Amsden
2011-07-31 20:34                 ` Nadav Har'El
2011-07-28 11:11         ` Nadav Har'El
2011-07-29  2:06           ` Matt McGill

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=20110727115100.GA23118@fermat.math.technion.ac.il \
    --to=nyh@math.technion.ac.il \
    --cc=bandan.das@stratus.com \
    --cc=kvm@vger.kernel.org \
    --cc=mtosatti@redhat.com \
    --cc=zamsden@gmail.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