On Mon, 9 Jun 2014 18:25:14 +0800 Hu Tao <hu...@cn.fujitsu.com> wrote:
> From: Paolo Bonzini <pbonz...@redhat.com> > > Signed-off-by: Paolo Bonzini <pbonz...@redhat.com> > Signed-off-by: Hu Tao <hu...@cn.fujitsu.com> > --- > hw/i386/pc.c | 23 +++++++++++------------ > hw/i386/pc_piix.c | 8 +++----- > hw/i386/pc_q35.c | 4 +--- > include/hw/i386/pc.h | 7 +++---- > 4 files changed, 18 insertions(+), 24 deletions(-) Reviewed-By: Igor Mammedov <imamm...@redhat.com> > > diff --git a/hw/i386/pc.c b/hw/i386/pc.c > index 2c75ecc..9860e3f 100644 > --- a/hw/i386/pc.c > +++ b/hw/i386/pc.c > @@ -1194,10 +1194,8 @@ void pc_acpi_init(const char *default_dsdt) > } > } > > -FWCfgState *pc_memory_init(MemoryRegion *system_memory, > - const char *kernel_filename, > - const char *kernel_cmdline, > - const char *initrd_filename, > +FWCfgState *pc_memory_init(MachineState *machine, > + MemoryRegion *system_memory, > ram_addr_t below_4g_mem_size, > ram_addr_t above_4g_mem_size, > MemoryRegion *rom_memory, > @@ -1208,18 +1206,18 @@ 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); > + assert(machine->ram_size == below_4g_mem_size + above_4g_mem_size); > + > + linux_boot = (machine->kernel_filename != NULL); > > /* Allocate RAM. We allocate it as a single memory region and use > * aliases to address portions of it, mostly for backwards compatibility > * with older qemus that used qemu_ram_alloc(). > */ > ram = g_malloc(sizeof(*ram)); > - memory_region_init_ram(ram, NULL, "pc.ram", ram_size); > + memory_region_init_ram(ram, NULL, "pc.ram", machine->ram_size); > vmstate_register_ram_global(ram); > *ram_memory = ram; > ram_below_4g = g_malloc(sizeof(*ram_below_4g)); > @@ -1238,7 +1236,7 @@ FWCfgState *pc_memory_init(MemoryRegion *system_memory, > > if (!guest_info->has_reserved_memory && > (machine->ram_slots || > - (machine->maxram_size > ram_size))) { > + (machine->maxram_size > machine->ram_size))) { > MachineClass *mc = MACHINE_GET_CLASS(machine); > > error_report("\"-memory 'slots|maxmem'\" is not supported by: %s", > @@ -1248,9 +1246,9 @@ FWCfgState *pc_memory_init(MemoryRegion *system_memory, > > /* initialize hotplug memory address space */ > if (guest_info->has_reserved_memory && > - (ram_size < machine->maxram_size)) { > + (machine->ram_size < machine->maxram_size)) { > ram_addr_t hotplug_mem_size = > - machine->maxram_size - ram_size; > + machine->maxram_size - machine->ram_size; > > if (machine->ram_slots > ACPI_MAX_RAM_SLOTS) { > error_report("unsupported amount of memory slots: %"PRIu64, > @@ -1295,7 +1293,8 @@ FWCfgState *pc_memory_init(MemoryRegion *system_memory, > } > > if (linux_boot) { > - load_linux(fw_cfg, kernel_filename, initrd_filename, > kernel_cmdline, below_4g_mem_size); > + load_linux(fw_cfg, machine->kernel_filename, > machine->initrd_filename, > + machine->kernel_cmdline, below_4g_mem_size); > } > > for (i = 0; i < nb_option_roms; i++) { > diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c > index a13e8d6..3e7524b 100644 > --- a/hw/i386/pc_piix.c > +++ b/hw/i386/pc_piix.c > @@ -156,11 +156,9 @@ static void pc_init1(MachineState *machine, > > /* allocate ram and load rom/bios */ > if (!xen_enabled()) { > - fw_cfg = pc_memory_init(system_memory, > - machine->kernel_filename, machine->kernel_cmdline, > - machine->initrd_filename, > - below_4g_mem_size, above_4g_mem_size, > - rom_memory, &ram_memory, guest_info); > + fw_cfg = pc_memory_init(machine, system_memory, > + below_4g_mem_size, above_4g_mem_size, > + rom_memory, &ram_memory, guest_info); > } > > gsi_state = g_malloc0(sizeof(*gsi_state)); > diff --git a/hw/i386/pc_q35.c b/hw/i386/pc_q35.c > index 629eb2d..aa71332 100644 > --- a/hw/i386/pc_q35.c > +++ b/hw/i386/pc_q35.c > @@ -143,9 +143,7 @@ static void pc_q35_init(MachineState *machine) > > /* allocate ram and load rom/bios */ > if (!xen_enabled()) { > - pc_memory_init(get_system_memory(), > - machine->kernel_filename, machine->kernel_cmdline, > - machine->initrd_filename, > + pc_memory_init(machine, get_system_memory(), > below_4g_mem_size, above_4g_mem_size, > rom_memory, &ram_memory, guest_info); > } > diff --git a/include/hw/i386/pc.h b/include/hw/i386/pc.h > index fe9e18b..f337d54 100644 > --- a/include/hw/i386/pc.h > +++ b/include/hw/i386/pc.h > @@ -3,6 +3,7 @@ > > #include "qemu-common.h" > #include "exec/memory.h" > +#include "hw/boards.h" > #include "hw/isa/isa.h" > #include "hw/block/fdc.h" > #include "net/net.h" > @@ -183,10 +184,8 @@ PcGuestInfo *pc_guest_info_init(ram_addr_t > below_4g_mem_size, void pc_pci_as_mapping_init(Object *owner, MemoryRegion > *system_memory, MemoryRegion *pci_address_space); > > -FWCfgState *pc_memory_init(MemoryRegion *system_memory, > - const char *kernel_filename, > - const char *kernel_cmdline, > - const char *initrd_filename, > +FWCfgState *pc_memory_init(MachineState *machine, > + MemoryRegion *system_memory, > ram_addr_t below_4g_mem_size, > ram_addr_t above_4g_mem_size, > MemoryRegion *rom_memory, > -- > 1.9.3 > -- Regards, Igor