[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v3 5/6] xen: record physmap changes to xenstore
From: |
Stefano Stabellini |
Subject: |
[Qemu-devel] [PATCH v3 5/6] xen: record physmap changes to xenstore |
Date: |
Thu, 19 Jan 2012 11:56:20 +0000 |
Write to xenstore any physmap changes so that the hypervisor can be
aware of them.
Read physmap changes from xenstore on boot.
Signed-off-by: Stefano Stabellini <address@hidden>
---
xen-all.c | 62 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 62 insertions(+), 0 deletions(-)
diff --git a/xen-all.c b/xen-all.c
index 507d93d..c830cb1 100644
--- a/xen-all.c
+++ b/xen-all.c
@@ -253,6 +253,7 @@ static int xen_add_to_physmap(XenIOState *state,
XenPhysmap *physmap = NULL;
target_phys_addr_t pfn, start_gpfn;
target_phys_addr_t phys_offset = memory_region_get_ram_addr(mr);
+ char path[80], value[17];
if (get_physmapping(state, start_addr, size)) {
return 0;
@@ -299,6 +300,22 @@ go_physmap:
start_addr >> TARGET_PAGE_BITS,
(start_addr + size) >> TARGET_PAGE_BITS,
XEN_DOMCTL_MEM_CACHEATTR_WB);
+
+ snprintf(path, sizeof(path),
+ "/local/domain/0/device-model/%d/physmap/%"PRIx64"/start_addr",
+ xen_domid, (uint64_t)phys_offset);
+ snprintf(value, sizeof(value), "%"PRIx64, (uint64_t)start_addr);
+ if (!xs_write(state->xenstore, 0, path, value, strlen(value))) {
+ return -1;
+ }
+ snprintf(path, sizeof(path),
+ "/local/domain/0/device-model/%d/physmap/%"PRIx64"/size",
+ xen_domid, (uint64_t)phys_offset);
+ snprintf(value, sizeof(value), "%"PRIx64, (uint64_t)size);
+ if (!xs_write(state->xenstore, 0, path, value, strlen(value))) {
+ return -1;
+ }
+
return 0;
}
@@ -926,6 +943,50 @@ int xen_init(void)
return 0;
}
+static void xen_read_physmap(XenIOState *state)
+{
+ XenPhysmap *physmap = NULL;
+ unsigned int len, num, i;
+ char path[80], *value = NULL;
+ char **entries = NULL;
+
+ snprintf(path, sizeof(path),
+ "/local/domain/0/device-model/%d/physmap", xen_domid);
+ entries = xs_directory(state->xenstore, 0, path, &num);
+ if (entries == NULL)
+ return;
+
+ for (i = 0; i < num; i++) {
+ physmap = g_malloc(sizeof (XenPhysmap));
+ physmap->phys_offset = strtoull(entries[i], NULL, 16);
+ snprintf(path, sizeof(path),
+ "/local/domain/0/device-model/%d/physmap/%s/start_addr",
+ xen_domid, entries[i]);
+ value = xs_read(state->xenstore, 0, path, &len);
+ if (value == NULL) {
+ free(physmap);
+ continue;
+ }
+ physmap->start_addr = strtoull(value, NULL, 16);
+ free(value);
+
+ snprintf(path, sizeof(path),
+ "/local/domain/0/device-model/%d/physmap/%s/size",
+ xen_domid, entries[i]);
+ value = xs_read(state->xenstore, 0, path, &len);
+ if (value == NULL) {
+ free(physmap);
+ continue;
+ }
+ physmap->size = strtoull(value, NULL, 16);
+ free(value);
+
+ QLIST_INSERT_HEAD(&state->physmap, physmap, list);
+ }
+ free(entries);
+ return;
+}
+
int xen_hvm_init(void)
{
int i, rc;
@@ -998,6 +1059,7 @@ int xen_hvm_init(void)
xen_be_register("console", &xen_console_ops);
xen_be_register("vkbd", &xen_kbdmouse_ops);
xen_be_register("qdisk", &xen_blkdev_ops);
+ xen_read_physmap(state);
return 0;
}
--
1.7.2.5
- [Qemu-devel] [PATCH v3 0/6] save/restore on Xen, Stefano Stabellini, 2012/01/19
- [Qemu-devel] [PATCH v3 5/6] xen: record physmap changes to xenstore,
Stefano Stabellini <=
- Re: [Qemu-devel] [Xen-devel] [PATCH v3 5/6] xen: record physmap changes to xenstore, Ian Campbell, 2012/01/19
- Re: [Qemu-devel] [Xen-devel] [PATCH v3 5/6] xen: record physmap changes to xenstore, Stefano Stabellini, 2012/01/19
- Re: [Qemu-devel] [Xen-devel] [PATCH v3 5/6] xen: record physmap changes to xenstore, Ian Campbell, 2012/01/19
- Re: [Qemu-devel] [Xen-devel] [PATCH v3 5/6] xen: record physmap changes to xenstore, Stefano Stabellini, 2012/01/19
- Re: [Qemu-devel] [Xen-devel] [PATCH v3 5/6] xen: record physmap changes to xenstore, Avi Kivity, 2012/01/25
- Re: [Qemu-devel] [Xen-devel] [PATCH v3 5/6] xen: record physmap changes to xenstore, Stefano Stabellini, 2012/01/25
- Re: [Qemu-devel] [Xen-devel] [PATCH v3 5/6] xen: record physmap changes to xenstore, Avi Kivity, 2012/01/25
[Qemu-devel] [PATCH v3 1/6] vl.c: do not save the RAM state when Xen is enabled, Stefano Stabellini, 2012/01/19
[Qemu-devel] [PATCH v3 2/6] xen mapcache: check if memory region has moved., Stefano Stabellini, 2012/01/19
[Qemu-devel] [PATCH v3 6/6] xen: change memory access behavior during migration., Stefano Stabellini, 2012/01/19