From: "Dr. David Alan Gilbert" <dgilbert@redhat.com>
To: Eduardo Habkost <ehabkost@redhat.com>
Cc: qemu-devel@nongnu.org, pbonzini@redhat.com, marcel@redhat.com,
mst@redhat.com, kraxel@redhat.com
Subject: Re: [Qemu-devel] [PATCH v3 3/4] x86: fill high bits of mtrr mask
Date: Thu, 7 Jul 2016 18:51:49 +0100 [thread overview]
Message-ID: <20160707175148.GC2458@work-vm> (raw)
In-Reply-To: <20160706191842.GW4131@thinpad.lan.raisama.net>
* Eduardo Habkost (ehabkost@redhat.com) wrote:
> On Tue, Jul 05, 2016 at 08:03:17PM +0100, Dr. David Alan Gilbert (git) wrote:
> > From: "Dr. David Alan Gilbert" <dgilbert@redhat.com>
> >
> > Fill the bits between 51..number-of-physical-address-bits in the
> > MTRR_PHYSMASKn variable range mtrr masks so that they're consistent
> > in the migration stream irrespective of the physical address space
> > of the source VM in a migration.
> >
> > Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
> > Suggested-by: Paolo Bonzini <pbonzini@redhat.com>
> [...]
> > @@ -2084,6 +2085,28 @@ static int kvm_get_msrs(X86CPU *cpu)
> > }
> >
> > assert(ret == cpu->kvm_msr_buf->nmsrs);
> > + /*
> > + * MTRR masks: Each mask consists of 5 parts
> > + * a 10..0: must be zero
> > + * b 11 : valid bit
> > + * c n-1.12: actual mask bits
> > + * d 51..n: reserved must be zero
> > + * e 63.52: reserved must be zero
> > + *
> > + * 'n' is the number of physical bits supported by the CPU and is
> > + * apparently always <= 52. We know our 'n' but don't know what
> > + * the destinations 'n' is; it might be smaller, in which case
> > + * it masks (c) on loading. It might be larger, in which case
> > + * we fill 'd' so that d..c is consistent irrespetive of the 'n'
> > + * we're migrating to.
> > + */
> > + if (cpu->fill_mtrr_mask && cpu->phys_bits < TARGET_PHYS_ADDR_SPACE_BITS) {
>
> As we already ensure phys_bits <= TARGET_PHYS_ADDR_SPACE_BITS in
> patch 1/4, what about just doing this:
>
> assert(cpu->phys_bits <= TARGET_PHYS_ADDR_SPACE_BITS)
>
>
> > + mtrr_top_bits = MAKE_64BIT_MASK(cpu->phys_bits,
> > + TARGET_PHYS_ADDR_SPACE_BITS - cpu->phys_bits);
>
> What's the actual meaning of TARGET_PHYS_ADDR_SPACE_BITS? Can it
> ever change in the future? Should a change in
> TARGET_PHYS_ADDR_SPACE_BITS really change the migration format?
>
> To make sure we won't have any surprises if
> TARGET_PHYS_ADDR_SPACE_BITS change, I would change the code to:
>
> QEMU_BUILD_BUG_ON(TARGET_PHYS_ADDR_SPACE_BITS > 52);
> assert(cpu->phs_bits <= TARGET_PHYS_ADDR_SPACE_BITS);
> mtrr_top_bits = MAKE_64BIT_MASK(cpu->phys_bits, 52 - cpu->phys_bits);
Done.
All limits tend to stretch with time, so no it wouldn't surprise me if that
happened some day.
Dave
>
>
> > + } else {
> > + mtrr_top_bits = 0;
> > + }
> > +
> > for (i = 0; i < ret; i++) {
> > uint32_t index = msrs[i].index;
> > switch (index) {
> > @@ -2279,7 +2302,8 @@ static int kvm_get_msrs(X86CPU *cpu)
> > break;
> > case MSR_MTRRphysBase(0) ... MSR_MTRRphysMask(MSR_MTRRcap_VCNT - 1):
> > if (index & 1) {
> > - env->mtrr_var[MSR_MTRRphysIndex(index)].mask = msrs[i].data;
> > + env->mtrr_var[MSR_MTRRphysIndex(index)].mask = msrs[i].data |
> > + mtrr_top_bits;
> > } else {
> > env->mtrr_var[MSR_MTRRphysIndex(index)].base = msrs[i].data;
> > }
> > --
> > 2.7.4
> >
>
> --
> Eduardo
--
Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK
next prev parent reply other threads:[~2016-07-07 17:52 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-07-05 19:03 [Qemu-devel] [PATCH v3 0/4] x86: Physical address limit patches Dr. David Alan Gilbert (git)
2016-07-05 19:03 ` [Qemu-devel] [PATCH v3 1/4] x86: Allow physical address bits to be set Dr. David Alan Gilbert (git)
2016-07-06 19:01 ` Eduardo Habkost
2016-07-07 16:39 ` Dr. David Alan Gilbert
2016-07-07 18:02 ` Eduardo Habkost
2016-07-07 18:36 ` Dr. David Alan Gilbert
2016-07-06 19:57 ` Eduardo Habkost
2016-07-05 19:03 ` [Qemu-devel] [PATCH v3 2/4] x86: Mask mtrr mask based on CPU physical address limits Dr. David Alan Gilbert (git)
2016-07-05 19:03 ` [Qemu-devel] [PATCH v3 3/4] x86: fill high bits of mtrr mask Dr. David Alan Gilbert (git)
2016-07-06 19:18 ` Eduardo Habkost
2016-07-07 17:51 ` Dr. David Alan Gilbert [this message]
2016-07-05 19:03 ` [Qemu-devel] [PATCH v3 4/4] x86: Set physical address bits based on host Dr. David Alan Gilbert (git)
2016-07-06 19:32 ` Eduardo Habkost
2016-07-07 18:46 ` Dr. David Alan Gilbert
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=20160707175148.GC2458@work-vm \
--to=dgilbert@redhat.com \
--cc=ehabkost@redhat.com \
--cc=kraxel@redhat.com \
--cc=marcel@redhat.com \
--cc=mst@redhat.com \
--cc=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
/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.