[Crash-utility] [PATCH 5/7] Use the size of the Xen domain VCPU array if available
Petr Tesarik
ptesarik at suse.cz
Mon Jan 17 11:41:21 UTC 2011
If the size of the vcpu array in struct domain is known, use it
to size the dynamically allocated vcpu array in crash. This enables
crash to initialize domains with a different number of VCPUs than
specified by the XEN_HYPER_MAX_VIRT_CPUS macro.
Signed-off-by: Petr Tesarik <ptesarik at suse.cz>
---
xen_hyper.c | 15 +++++++++++----
xen_hyper_defs.h | 1 +
2 files changed, 12 insertions(+), 4 deletions(-)
--- a/xen_hyper.c
+++ b/xen_hyper.c
@@ -219,6 +219,7 @@ xen_hyper_domain_init(void)
XEN_HYPER_MEMBER_OFFSET_INIT(domain_is_shutting_down, "domain",
"is_shutting_down");
XEN_HYPER_MEMBER_OFFSET_INIT(domain_is_shut_down, "domain",
"is_shut_down");
XEN_HYPER_MEMBER_OFFSET_INIT(domain_vcpu, "domain", "vcpu");
+ XEN_HYPER_MEMBER_SIZE_INIT(domain_vcpu, "domain", "vcpu");
XEN_HYPER_MEMBER_OFFSET_INIT(domain_arch, "domain", "arch");
XEN_HYPER_STRUCT_SIZE_INIT(arch_shared_info, "arch_shared_info");
@@ -1207,7 +1208,8 @@ struct xen_hyper_domain_context *
xen_hyper_store_domain_context(struct xen_hyper_domain_context *dc,
ulong domain, char *dp)
{
- int i;
+ unsigned int max_vcpus;
+ unsigned int i;
dc->domain = domain;
BCOPY((char *)(dp + XEN_HYPER_OFFSET(domain_domain_id)),
@@ -1244,11 +1246,16 @@ xen_hyper_store_domain_context(struct xe
dc->domain_flags = XEN_HYPER_DOMF_ERROR;
}
dc->evtchn = ULONG(dp + XEN_HYPER_OFFSET(domain_evtchn));
- if (!(dc->vcpu = malloc(sizeof(ulong) * XEN_HYPER_MAX_VIRT_CPUS))) {
+ if (XEN_HYPER_VALID_SIZE(domain_vcpu)) {
+ max_vcpus = XEN_HYPER_SIZE(domain_vcpu) / sizeof(void *);
+ } else {
+ max_vcpus = XEN_HYPER_MAX_VIRT_CPUS;
+ }
+ if (!(dc->vcpu = malloc(sizeof(ulong) * max_vcpus))) {
error(FATAL, "cannot malloc vcpu array (%d VCPUs).",
- XEN_HYPER_MAX_VIRT_CPUS);
+ max_vcpus);
}
- for (i = 0; i < XEN_HYPER_MAX_VIRT_CPUS; i++) {
+ for (i = 0; i < max_vcpus; i++) {
dc->vcpu[i] = ULONG(dp + XEN_HYPER_OFFSET(domain_vcpu) +
i*sizeof(void *));
if (dc->vcpu[i]) XEN_HYPER_NR_VCPUS_IN_DOM(dc)++;
}
--- a/xen_hyper_defs.h
+++ b/xen_hyper_defs.h
@@ -583,6 +583,7 @@ struct xen_hyper_size_table {
long crash_xen_core_t; /* elf note v3,v4 */
long crash_xen_info_t; /* elf note v3,v4 */
long domain;
+ long domain_vcpu;
#ifdef IA64
long mm_struct;
#endif
More information about the Crash-utility
mailing list