On Fri, Apr 04, 2014 at 03:36:38PM +0200, Igor Mammedov wrote:
> initialize and map hotplug memory address space container
> into guest's RAM address space.
> 
> Signed-off-by: Igor Mammedov <imamm...@redhat.com>
> ---
>  hw/i386/pc.c         | 19 +++++++++++++++++--
>  include/hw/i386/pc.h | 10 ++++++++++
>  2 files changed, 27 insertions(+), 2 deletions(-)
> 
> diff --git a/hw/i386/pc.c b/hw/i386/pc.c
> index 32b4003..69e4225 100644
> --- a/hw/i386/pc.c
> +++ b/hw/i386/pc.c
> @@ -1171,6 +1171,9 @@ FWCfgState *pc_memory_init(MemoryRegion *system_memory,
>      MemoryRegion *ram, *option_rom_mr;
>      MemoryRegion *ram_below_4g, *ram_above_4g;
>      FWCfgState *fw_cfg;
> +    ram_addr_t ram_size = below_4g_mem_size + above_4g_mem_size;
> +    MachineState *machine = MACHINE(qdev_get_machine());
> +    PCMachineState *pcms = PC_MACHINE(machine);
>  
>      linux_boot = (kernel_filename != NULL);
>  
> @@ -1179,8 +1182,7 @@ FWCfgState *pc_memory_init(MemoryRegion *system_memory,
>       * with older qemus that used qemu_ram_alloc().
>       */
>      ram = g_malloc(sizeof(*ram));
> -    memory_region_init_ram(ram, NULL, "pc.ram",
> -                           below_4g_mem_size + above_4g_mem_size);
> +    memory_region_init_ram(ram, NULL, "pc.ram", ram_size);
>      vmstate_register_ram_global(ram);
>      *ram_memory = ram;
>      ram_below_4g = g_malloc(sizeof(*ram_below_4g));
> @@ -1197,6 +1199,19 @@ FWCfgState *pc_memory_init(MemoryRegion *system_memory,
>          e820_add_entry(0x100000000ULL, above_4g_mem_size, E820_RAM);
>      }
>  
> +    /* initialize hotplug memory address space */
> +    if (ram_size < machine->init_args.maxram_size) {
> +        ram_addr_t hotplug_mem_size =
> +            machine->init_args.maxram_size - ram_size;
> +
> +        pcms->hotplug_memory_base =
> +            ROUND_UP(0x100000000ULL + above_4g_mem_size, 1ULL << 30);

-m maxmem should be limited otherwise hotplug_memory_base + maxmem can
overflow(in dimm_get_free_addr()).


Reply via email to