[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v5 05/14] vl: handle "-device dimm"
From: |
Hu Tao |
Subject: |
[Qemu-devel] [PATCH v5 05/14] vl: handle "-device dimm" |
Date: |
Wed, 26 Jun 2013 17:13:28 +0800 |
From: Vasilis Liaskovitis <address@hidden>
Signed-off-by: Vasilis Liaskovitis <address@hidden>
Signed-off-by: Hu Tao <address@hidden>
---
vl.c | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 51 insertions(+)
diff --git a/vl.c b/vl.c
index 767e020..9d88a79 100644
--- a/vl.c
+++ b/vl.c
@@ -170,6 +170,7 @@ int main(int argc, char **argv)
#include "ui/qemu-spice.h"
#include "qapi/string-input-visitor.h"
+#include "hw/mem-hotplug/dimm.h"
//#define DEBUG_NET
//#define DEBUG_SLIRP
@@ -252,6 +253,7 @@ static QTAILQ_HEAD(, FWBootEntry) fw_boot_order =
int nb_numa_nodes;
uint64_t node_mem[MAX_NODES];
unsigned long *node_cpumask[MAX_NODES];
+int nb_hp_dimms;
uint8_t qemu_uuid[16];
@@ -2338,6 +2340,50 @@ static int chardev_init_func(QemuOpts *opts, void
*opaque)
return 0;
}
+static int dimmcfg_init_func(QemuOpts *opts, void *opaque)
+{
+ const char *driver;
+ const char *id;
+ uint64_t node, size;
+ uint32_t populated;
+ const char *buf, *busbuf;
+
+ /* DimmDevice configuration needs to be known in order to initialize
chipset
+ * with correct memory and pci ranges. But all devices are created after
+ * chipset / machine initialization. In * order to avoid this problem, we
+ * parse dimm information earlier into dimmcfg structs. */
+
+ driver = qemu_opt_get(opts, "driver");
+ if (!strcmp(driver, "dimm")) {
+
+ id = qemu_opts_id(opts);
+ buf = qemu_opt_get(opts, "size");
+ parse_option_size("size", buf, &size, NULL);
+ buf = qemu_opt_get(opts, "node");
+ parse_option_number("node", buf, &node, NULL);
+ busbuf = qemu_opt_get(opts, "bus");
+ buf = qemu_opt_get(opts, "populated");
+ if (!buf) {
+ populated = 0;
+ } else {
+ populated = strcmp(buf, "on") ? 0 : 1;
+ }
+
+ dimm_config_create((char *)id, size, busbuf ? busbuf : "membus.0",
+ node, nb_hp_dimms);
+
+ /* if !populated, we just keep the config. The real device
+ * will be created in the future with a normal device_add
+ * command. */
+ if (!populated) {
+ qemu_opts_del(opts);
+ }
+ nb_hp_dimms++;
+ }
+
+ return 0;
+}
+
#ifdef CONFIG_VIRTFS
static int fsdev_init_func(QemuOpts *opts, void *opaque)
{
@@ -4260,6 +4306,11 @@ int main(int argc, char **argv, char **envp)
}
qemu_add_globals();
+ /* init generic devices */
+ if (qemu_opts_foreach(qemu_find_opts("device"),
+ dimmcfg_init_func, NULL, 1) != 0) {
+ exit(1);
+ }
qdev_machine_init();
QEMUMachineInitArgs args = { .ram_size = ram_size,
--
1.8.3.1
- [Qemu-devel] [PATCH v5 00/14] ACPI memory hotplug, Hu Tao, 2013/06/26
- [Qemu-devel] [PATCH v5 03/14] qemu-option: export parse_option_number, Hu Tao, 2013/06/26
- [Qemu-devel] [PATCH v5 02/14] Add SIZE type to qdev properties, Hu Tao, 2013/06/26
- [Qemu-devel] [PATCH v5 06/14] acpi_piix4 : Implement memory device hotplug registers, Hu Tao, 2013/06/26
- [Qemu-devel] [PATCH v5 11/14] Introduce paravirt interface QEMU_CFG_PCI_WINDOW, Hu Tao, 2013/06/26
- [Qemu-devel] [PATCH v5 09/14] memory controller: initialize dram controller., Hu Tao, 2013/06/26
- [Qemu-devel] [PATCH v5 04/14] Implement dimm device abstraction, Hu Tao, 2013/06/26
- [Qemu-devel] [PATCH v5 13/14] balloon: update with hotplugged memory, Hu Tao, 2013/06/26