qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH 4/5] x86: Allow physical address bits to be set


From: Eduardo Habkost
Subject: Re: [Qemu-devel] [PATCH 4/5] x86: Allow physical address bits to be set
Date: Thu, 16 Jun 2016 17:24:49 -0300
User-agent: Mutt/1.6.1 (2016-04-27)

On Thu, Jun 16, 2016 at 06:12:12PM +0100, Dr. David Alan Gilbert (git) wrote:
> From: "Dr. David Alan Gilbert" <address@hidden>
> 
> Currently QEMU sets the x86 number of physical address bits to the
> magic number 40.  This is only correct on some small AMD systems;
> Intel systems tend to have 36, 39, 46 bits, and large AMD systems
> tend to have 48.
> 
> Having the value different from your actual hardware is detectable
> by the guest and in principal can cause problems;

What kind of problems?

Is it a problem to have something smaller from the actual
hardware, or just if it's higher?

> The current limit of 40 stops TB VMs being created by those lucky
> enough to have that much.
> 
> This patch lets you set the physical bits by a cpu property but
> defaults to the same existing magic 40.
> 

The existing 40-bit default looks like a problem for 36-bit
systems. Do you know what kind of systems have 36 bits only? Only
old ones, or recent ones too? If only old ones, how old?

Can't we have a new default that is as small as possible for the
VM RAM+devices configuration?

> I've removed the ancient warning about the 42 bit limit in exec.c;
> I can't find that limit in there and no one else seems to know where
> it is.
> 
> Signed-off-by: Dr. David Alan Gilbert <address@hidden>
> ---
>  target-i386/cpu.c | 8 +++++---
>  target-i386/cpu.h | 3 +++
>  2 files changed, 8 insertions(+), 3 deletions(-)
> 
> diff --git a/target-i386/cpu.c b/target-i386/cpu.c
> index 4111240..c3bbf8e 100644
> --- a/target-i386/cpu.c
> +++ b/target-i386/cpu.c
> @@ -2606,9 +2606,10 @@ void cpu_x86_cpuid(CPUX86State *env, uint32_t index, 
> uint32_t count,
>          /* virtual & phys address size in low 2 bytes. */
>  /* XXX: This value must match the one used in the MMU code. */

Do you know where's the MMU code mentioned here?

>          if (env->features[FEAT_8000_0001_EDX] & CPUID_EXT2_LM) {
> -            /* 64 bit processor */
> -/* XXX: The physical address space is limited to 42 bits in exec.c. */
> -            *eax = 0x00003028; /* 48 bits virtual, 40 bits physical */
> +            /* 64 bit processor, 48 bits virtual, configurable
> +             * physical bits.
> +             */
> +            *eax = 0x00003000 + cpu->phys_bits;

We should reject the configuration if phys-bits is set to
something larger than the host's phys_bits, shouldn't we?

Maybe we can't do that on old machine-types that already have the
40-bit default, but if we have a new reasonable default based on
VM size, we can be more strict.

-- 
Eduardo



reply via email to

[Prev in Thread] Current Thread [Next in Thread]