[Crash-utility] [PATCH] Remove struct domain::is_polling

Bernhard Walle bwalle at suse.de
Thu Nov 27 12:51:30 UTC 2008


According to that change set in the Xen unstable branch

    changeset:   18428:ae9b223a675d
    user:        Keir Fraser <keir.fraser at 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 at 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 at 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,




More information about the Crash-utility mailing list