qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH v2 0/6] x86: Physical address limit patches
@ 2016-07-04 19:16 Dr. David Alan Gilbert (git)
  2016-07-04 19:16 ` [Qemu-devel] [PATCH v2 1/6] x86: Allow physical address bits to be set Dr. David Alan Gilbert (git)
                   ` (7 more replies)
  0 siblings, 8 replies; 39+ messages in thread
From: Dr. David Alan Gilbert (git) @ 2016-07-04 19:16 UTC (permalink / raw)
  To: qemu-devel, pbonzini, ehabkost, marcel, mst, kraxel

From: "Dr. David Alan Gilbert" <dgilbert@redhat.com>

QEMU sets the guests physical address bits to 40; this is wrong
on most hardware, and can be detected by the guest.
It also stops you using really huge multi-TB VMs.

Red Hat has had a patch, that Andrea wrote, downstream for a couple
of years that reads the hosts value and uses that in the guest.  That's
correct as far as the guest sees it, and lets you create huge VMs.

The downside, is that if you've got a mix of hosts, say an i7 and a Xeon,
life gets complicated in migration; prior to 2.6 it all apparently
worked (although a guest that looked might spot the change).
In 2.6 Paolo started checking MSR writes and they failed when the
incoming MTRR mask didn't fit.

This series:
   a) Fixes up mtrr masks so that if you're migrating between hosts
      of different physical address size it tries to do something sensible.

   b) Lets you specify the guest physical address size via a CPU property, i.e.
        -cpu SandyBridge,phys-bits=36

      The default on old machine types is to use the existing 40 bits value.

   c) Lets you tell qemu to use the same setting as the host, i.e.
        -cpu SandyBridge,phys-bits=0
 
      This is the default on new machine types.

Note that mixed size hosts are still not necessarily safe; a guest
started on a host with a large physical address size might start using
those bits and get upset when it's moved to a small host.
However that was already potentially broken in existing qemu that
used a magic value of 40.

There's potential to add some extra guards against people
doing silly stuff; e.g. stop people running VMs using 1TB of
address space on a tiny host.

Dave


v2
  Default on new machine types is to read from the host
  Use the MAKE_64BIT_MASK macro
  Validate phys_bits in the realise method
  Move reading the host physical bits to the realise method
  Set phys-bits even for 32bit guests
  Add warning when your phys-bits doesn't match your host in the none
    default case

Dr. David Alan Gilbert (6):
  x86: Allow physical address bits to be set
  x86: Mask mtrr mask based on CPU physical address limits
  x86: fill high bits of mtrr mask
  x86: Set physical address bits based on host
  x86: fix up 32 bit phys_bits case
  x86: Add sanity checks on phys_bits

 include/hw/i386/pc.h | 10 ++++++++
 target-i386/cpu.c    | 71 ++++++++++++++++++++++++++++++++++++++++++++++------
 target-i386/cpu.h    |  6 +++++
 target-i386/kvm.c    | 36 +++++++++++++++++++++++---
 4 files changed, 112 insertions(+), 11 deletions(-)

-- 
2.7.4

^ permalink raw reply	[flat|nested] 39+ messages in thread

end of thread, other threads:[~2016-07-05 19:06 UTC | newest]

Thread overview: 39+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-07-04 19:16 [Qemu-devel] [PATCH v2 0/6] x86: Physical address limit patches Dr. David Alan Gilbert (git)
2016-07-04 19:16 ` [Qemu-devel] [PATCH v2 1/6] x86: Allow physical address bits to be set Dr. David Alan Gilbert (git)
2016-07-04 19:33   ` Eduardo Habkost
2016-07-05 13:43     ` Dr. David Alan Gilbert
2016-07-04 19:16 ` [Qemu-devel] [PATCH v2 2/6] x86: Mask mtrr mask based on CPU physical address limits Dr. David Alan Gilbert (git)
2016-07-04 20:02   ` Michael S. Tsirkin
2016-07-04 20:05     ` Eduardo Habkost
2016-07-04 22:37       ` Michael S. Tsirkin
2016-07-04 20:03   ` Eduardo Habkost
2016-07-04 19:16 ` [Qemu-devel] [PATCH v2 3/6] x86: fill high bits of mtrr mask Dr. David Alan Gilbert (git)
2016-07-04 20:03   ` Michael S. Tsirkin
2016-07-04 20:14     ` Eduardo Habkost
2016-07-04 20:21   ` Eduardo Habkost
2016-07-05  8:39     ` Dr. David Alan Gilbert
2016-07-04 19:16 ` [Qemu-devel] [PATCH v2 4/6] x86: Set physical address bits based on host Dr. David Alan Gilbert (git)
2016-07-04 20:27   ` Eduardo Habkost
2016-07-05  8:44     ` Dr. David Alan Gilbert
2016-07-04 19:16 ` [Qemu-devel] [PATCH v2 5/6] x86: fix up 32 bit phys_bits case Dr. David Alan Gilbert (git)
2016-07-05  9:42   ` Daniel P. Berrange
2016-07-05 11:29     ` Dr. David Alan Gilbert
2016-07-05 11:55       ` Daniel P. Berrange
2016-07-05 19:05         ` Dr. David Alan Gilbert
2016-07-04 19:16 ` [Qemu-devel] [PATCH v2 6/6] x86: Add sanity checks on phys_bits Dr. David Alan Gilbert (git)
2016-07-04 20:46   ` Eduardo Habkost
2016-07-05 10:40     ` Dr. David Alan Gilbert
2016-07-04 20:23 ` [Qemu-devel] [PATCH v2 0/6] x86: Physical address limit patches Michael S. Tsirkin
2016-07-05  9:33   ` Dr. David Alan Gilbert
2016-07-05 10:06     ` Michael S. Tsirkin
2016-07-05 10:13       ` Dr. David Alan Gilbert
2016-07-05 10:41         ` Michael S. Tsirkin
2016-07-05 10:59       ` Paolo Bonzini
2016-07-05 11:09         ` Michael S. Tsirkin
2016-07-05 11:46           ` Paolo Bonzini
2016-07-05 12:39             ` Michael S. Tsirkin
2016-07-05 12:41           ` Dr. David Alan Gilbert
2016-07-05 13:38             ` Michael S. Tsirkin
2016-07-05  9:46 ` Daniel P. Berrange
2016-07-05  9:49   ` Dr. David Alan Gilbert
2016-07-05 12:38     ` Eduardo Habkost

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).