[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 012/103] pc: initialize memory hotplug address space
From: |
Michael S. Tsirkin |
Subject: |
[Qemu-devel] [PULL 012/103] pc: initialize memory hotplug address space |
Date: |
Tue, 17 Jun 2014 20:37:01 +0300 |
From: Igor Mammedov <address@hidden>
initialize and map hotplug memory address space container
into guest's RAM address space.
Signed-off-by: Igor Mammedov <address@hidden>
Acked-by: Peter Crosthwaite <address@hidden>
Reviewed-by: Michael S. Tsirkin <address@hidden>
Signed-off-by: Michael S. Tsirkin <address@hidden>
---
include/hw/i386/pc.h | 10 ++++++++++
hw/i386/pc.c | 26 ++++++++++++++++++++++++--
2 files changed, 34 insertions(+), 2 deletions(-)
diff --git a/include/hw/i386/pc.h b/include/hw/i386/pc.h
index aade1b2..48d4c5e 100644
--- a/include/hw/i386/pc.h
+++ b/include/hw/i386/pc.h
@@ -16,9 +16,19 @@
#define HPET_INTCAP "hpet-intcap"
+/**
+ * PCMachineState:
+ * @hotplug_memory_base: address in guest RAM address space where hotplug
memory
+ * address space begins.
+ * @hotplug_memory: hotplug memory addess space container
+ */
struct PCMachineState {
/*< private >*/
MachineState parent_obj;
+
+ /* <public> */
+ ram_addr_t hotplug_memory_base;
+ MemoryRegion hotplug_memory;
};
struct PCMachineClass {
diff --git a/hw/i386/pc.c b/hw/i386/pc.c
index f6781d8..740eac3 100644
--- a/hw/i386/pc.c
+++ b/hw/i386/pc.c
@@ -1201,6 +1201,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);
@@ -1209,8 +1212,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));
@@ -1227,6 +1229,26 @@ 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->maxram_size) {
+ ram_addr_t hotplug_mem_size =
+ machine->maxram_size - ram_size;
+
+ pcms->hotplug_memory_base =
+ ROUND_UP(0x100000000ULL + above_4g_mem_size, 1ULL << 30);
+
+ if ((pcms->hotplug_memory_base + hotplug_mem_size) <
+ hotplug_mem_size) {
+ error_report("unsupported amount of maximum memory: " RAM_ADDR_FMT,
+ machine->maxram_size);
+ exit(EXIT_FAILURE);
+ }
+
+ memory_region_init(&pcms->hotplug_memory, OBJECT(pcms),
+ "hotplug-memory", hotplug_mem_size);
+ memory_region_add_subregion(system_memory, pcms->hotplug_memory_base,
+ &pcms->hotplug_memory);
+ }
/* Initialize PC system firmware */
pc_system_firmware_init(rom_memory, guest_info->isapc_ram_fw);
--
MST
- [Qemu-devel] [PULL 015/103] pc: exit QEMU if compat machine doesn't support memory hotlpug, (continued)
- [Qemu-devel] [PULL 015/103] pc: exit QEMU if compat machine doesn't support memory hotlpug, Michael S. Tsirkin, 2014/06/17
- [Qemu-devel] [PULL 013/103] pc: exit QEMU if number of slots more than supported 256, Michael S. Tsirkin, 2014/06/17
- [Qemu-devel] [PULL 017/103] pc-dimm: add busy address check and address auto-allocation, Michael S. Tsirkin, 2014/06/17
- [Qemu-devel] [PULL 018/103] pc-dimm: add busy slot check and slot auto-allocation, Michael S. Tsirkin, 2014/06/17
- [Qemu-devel] [PULL 019/103] acpi: rename cpu_hotplug_defs.h to pc-hotplug.h, Michael S. Tsirkin, 2014/06/17
- [Qemu-devel] [PULL 020/103] acpi: memory hotplug ACPI hardware implementation, Michael S. Tsirkin, 2014/06/17
- [Qemu-devel] [PULL 021/103] trace: add acpi memory hotplug IO region events, Michael S. Tsirkin, 2014/06/17
- [Qemu-devel] [PULL 022/103] trace: pc: add PC_DIMM slot & address allocation, Michael S. Tsirkin, 2014/06/17
- [Qemu-devel] [PULL 012/103] pc: initialize memory hotplug address space,
Michael S. Tsirkin <=
- [Qemu-devel] [PULL 024/103] acpi:piix4: add memory hotplug handling, Michael S. Tsirkin, 2014/06/17
- [Qemu-devel] [PULL 023/103] acpi:piix4: allow plug/unlug callbacks handle not only PCI devices, Michael S. Tsirkin, 2014/06/17
- [Qemu-devel] [PULL 025/103] pc: ich9 lpc: make it work with global/compat properties, Michael S. Tsirkin, 2014/06/17
- [Qemu-devel] [PULL 016/103] pc: add memory hotplug handler to PC_MACHINE, Michael S. Tsirkin, 2014/06/17
- [Qemu-devel] [PULL 026/103] acpi:ich9: add memory hotplug handling, Michael S. Tsirkin, 2014/06/17
- [Qemu-devel] [PULL 027/103] pc: migrate piix4 & ich9 MemHotplugState, Michael S. Tsirkin, 2014/06/17
- [Qemu-devel] [PULL 029/103] pc: propagate memory hotplug event to ACPI device, Michael S. Tsirkin, 2014/06/17
- [Qemu-devel] [PULL 030/103] pc: ACPI BIOS: implement memory hotplug interface, Michael S. Tsirkin, 2014/06/17
- [Qemu-devel] [PULL 031/103] pc: add "hotplug-memory-region-size" property to PC_MACHINE, Michael S. Tsirkin, 2014/06/17
- [Qemu-devel] [PULL 028/103] pc: add acpi-device link to PCMachineState, Michael S. Tsirkin, 2014/06/17