diff options
author | kaf24@firebug.cl.cam.ac.uk <kaf24@firebug.cl.cam.ac.uk> | 2005-10-17 11:36:36 +0100 |
---|---|---|
committer | kaf24@firebug.cl.cam.ac.uk <kaf24@firebug.cl.cam.ac.uk> | 2005-10-17 11:36:36 +0100 |
commit | 981d9b117d4ad6b759af0c42a044050ab06207f5 (patch) | |
tree | 81cc2c335bfa6af1eeca01ad0adaa753ba0031e8 /tools/libxc/xc_core.c | |
parent | ec82f54895da4932edc67d190ccf592f219f1f01 (diff) | |
download | xen-981d9b117d4ad6b759af0c42a044050ab06207f5.tar.gz xen-981d9b117d4ad6b759af0c42a044050ab06207f5.tar.bz2 xen-981d9b117d4ad6b759af0c42a044050ab06207f5.zip |
Plumb GETVCPUINFO dom0_op through to Python. Remove
n_vcpu field from GETDOMAININFO: replaced with
nr_online_vcpus and max_vcpu_id (both plumbed through to
Python).
TODO: Remove 'vcpus' entry in getdomaininfo Python
dictionary.
TODO: Don't represent 'cpumap' as a bitmap in Python.
It would be more sensible to represent as a list
of integer CPU numbers.
Signed-off-by: Keir Fraser <keir@xensource.com>
Diffstat (limited to 'tools/libxc/xc_core.c')
-rw-r--r-- | tools/libxc/xc_core.c | 19 |
1 files changed, 10 insertions, 9 deletions
diff --git a/tools/libxc/xc_core.c b/tools/libxc/xc_core.c index 4694c0fe2f..207fbe8fb1 100644 --- a/tools/libxc/xc_core.c +++ b/tools/libxc/xc_core.c @@ -33,10 +33,10 @@ xc_domain_dumpcore(int xc_handle, unsigned long nr_pages; unsigned long *page_array; xc_dominfo_t info; - int i, j, dump_fd; + int i, nr_vcpus = 0, dump_fd; char *dump_mem, *dump_mem_start = NULL; struct xc_core_header header; - vcpu_guest_context_t ctxt[MAX_VIRT_CPUS]; + vcpu_guest_context_t ctxt[MAX_VIRT_CPUS]; if ((dump_fd = open(corename, O_CREAT|O_RDWR, S_IWUSR|S_IRUSR)) < 0) { @@ -54,24 +54,25 @@ xc_domain_dumpcore(int xc_handle, goto error_out; } - for (i = 0, j = 0; i < 32; i++) - if (xc_domain_get_vcpu_context(xc_handle, domid, i, &ctxt[j]) == 0) - j++; + for (i = 0; i < info.max_vcpu_id; i++) + if (xc_domain_get_vcpu_context(xc_handle, domid, + i, &ctxt[nr_vcpus]) == 0) + nr_vcpus++; nr_pages = info.nr_pages; header.xch_magic = 0xF00FEBED; - header.xch_nr_vcpus = info.vcpus; + header.xch_nr_vcpus = nr_vcpus; header.xch_nr_pages = nr_pages; header.xch_ctxt_offset = sizeof(struct xc_core_header); header.xch_index_offset = sizeof(struct xc_core_header) + - sizeof(vcpu_guest_context_t)*info.vcpus; + sizeof(vcpu_guest_context_t)*nr_vcpus; header.xch_pages_offset = round_pgup(sizeof(struct xc_core_header) + - (sizeof(vcpu_guest_context_t) * info.vcpus) + + (sizeof(vcpu_guest_context_t) * nr_vcpus) + (nr_pages * sizeof(unsigned long))); write(dump_fd, &header, sizeof(struct xc_core_header)); - write(dump_fd, &ctxt, sizeof(ctxt[0]) * info.vcpus); + write(dump_fd, &ctxt, sizeof(ctxt[0]) * nr_vcpus); if ((page_array = malloc(nr_pages * sizeof(unsigned long))) == NULL) { printf("Could not allocate memory\n"); |