According to that change set in the Xen unstable branch
changeset: 18428:ae9b223a675d
user: Keir Fraser <keir.fraser(a)citrix.com>
date: Thu Sep 04 14:38:26 2008 +0100
files: xen/common/domain.c
xen/common/event_channel.c
xen/common/schedule.c
xen/include/xen/sched.h
description:
More efficient implementation of SCHEDOP_poll when polling a single port.
Signed-off-by: Keir Fraser <keir.fraser(a)citrix.com>
the member "is_polling" of struct domain will be removed in Xen 4.4.
This patch fixes the problem that a dump cannot be opened in Hypervisor mode in
crash when produced by such a Xen version. That's the error message of Crash:
crash: invalid structure member offset: domain_is_polling
FILE: xen_hyper.c LINE: 1182 FUNCTION: xen_hyper_store_domain_context()
[./crash] error trace: 52bfc2 => 52e401 => 52ee07 => 508062
508062: OFFSET_verify+168
52ee07: xen_hyper_store_domain_context+742
52e401: xen_hyper_refresh_domain_context_space+196
52bfc2: xen_hyper_domain_init+959
Signed-off-by: Bernhard Walle <bwalle(a)suse.de>
---
xen_hyper.c | 9 ++++++++-
xen_hyper_dump_tables.c | 6 ++++--
2 files changed, 12 insertions(+), 3 deletions(-)
--- a/xen_hyper.c
+++ b/xen_hyper.c
@@ -188,7 +188,13 @@ xen_hyper_domain_init(void)
XEN_HYPER_MEMBER_OFFSET_INIT(domain_is_hvm, "domain", "is_hvm");
XEN_HYPER_MEMBER_OFFSET_INIT(domain_is_privileged, "domain",
"is_privileged");
XEN_HYPER_MEMBER_OFFSET_INIT(domain_debugger_attached, "domain",
"debugger_attached");
+
+ /*
+ * Will be removed in Xen 4.4 (hg ae9b223a675d),
+ * need to check that with XEN_HYPER_VALID_MEMBER() before using
+ */
XEN_HYPER_MEMBER_OFFSET_INIT(domain_is_polling, "domain",
"is_polling");
+
XEN_HYPER_MEMBER_OFFSET_INIT(domain_is_dying, "domain",
"is_dying");
XEN_HYPER_MEMBER_OFFSET_INIT(domain_is_paused_by_controller, "domain",
"is_paused_by_controller");
XEN_HYPER_MEMBER_OFFSET_INIT(domain_is_shutting_down, "domain",
"is_shutting_down");
@@ -1179,7 +1185,8 @@ xen_hyper_store_domain_context(struct xe
dc->domain_flags |= XEN_HYPER_DOMS_privileged;
} else if (*(dp + XEN_HYPER_OFFSET(domain_debugger_attached))) {
dc->domain_flags |= XEN_HYPER_DOMS_debugging;
- } else if (*(dp + XEN_HYPER_OFFSET(domain_is_polling))) {
+ } else if (XEN_HYPER_VALID_MEMBER(domain_is_polling) &&
+ *(dp + XEN_HYPER_OFFSET(domain_is_polling))) {
dc->domain_flags |= XEN_HYPER_DOMS_polling;
} else if (*(dp + XEN_HYPER_OFFSET(domain_is_paused_by_controller))) {
dc->domain_flags |= XEN_HYPER_DOMS_ctrl_pause;
--- a/xen_hyper_dump_tables.c
+++ b/xen_hyper_dump_tables.c
@@ -775,8 +775,10 @@ xen_hyper_dump_xen_hyper_offset_table(ch
(buf, "%ld\n", xen_hyper_offset_table.domain_is_privileged));
XEN_HYPER_PRI(fp, len, "domain_debugger_attached: ", buf, flag,
(buf, "%ld\n", xen_hyper_offset_table.domain_debugger_attached));
- XEN_HYPER_PRI(fp, len, "domain_is_polling: ", buf, flag,
- (buf, "%ld\n", xen_hyper_offset_table.domain_is_polling));
+ if (XEN_HYPER_VALID_MEMBER(domain_is_polling)) {
+ XEN_HYPER_PRI(fp, len, "domain_is_polling: ", buf, flag,
+ (buf, "%ld\n", xen_hyper_offset_table.domain_is_polling));
+ }
XEN_HYPER_PRI(fp, len, "domain_is_dying: ", buf, flag,
(buf, "%ld\n", xen_hyper_offset_table.domain_is_dying));
XEN_HYPER_PRI(fp, len, "domain_is_paused_by_controller: ", buf, flag,