There is a regression been found for xen hyper due to the commit:
f615f8fab7bf ("Fix "irq -a" exceeding the memory range issue").

The reason is for xen hyper, kt->cpu is not initialized due to
kernel_init() won't be called. So 0 would be assigned to cpulen and
fails the GETBUF().

Before:
crash> bt -c 2
bt: zero-size memory allocation! (called from 51f168)

After:
crash> bt -c 2
PCPU:  0  VCPU: ffff8300001b8080
 #0 [ffff8300001bfe00] machine_crash_kexec at ffff83000010de72
 #1 [ffff8300001bfe10] do_kexec_op at ffff83000010e3cb
 #2 [ffff8300001bfe50] do_console_io at ffff83000011aff4
 #3 [ffff8300001bfe90] mod_l1_entry at ffff830000129045
 #4 [ffff8300001bfea0] toggle_guest_mode at ffff8300001641bf
 #5 [ffff8300001bfeb0] do_iret at ffff830000164888
 #6 [ffff8300001bff20] syscall_enter at ffff8300001633d2

Since xen hyper will initialize its own cpumask_t, this patch will reuse
it for XEN_HYPER_MODE. In addition, this patch won't modify the similar
code hunk in generic_get_irq_affinity(), because for xen, there is no
"irq" cmd, so the regression won't be triggered.

Cc: Sourabh Jain <sourabhj...@linux.ibm.com>
Cc: Hari Bathini <hbath...@linux.ibm.com>
Cc: Mahesh J Salgaonkar <mah...@linux.ibm.com>
Cc: Naveen N. Rao <naveen.n....@linux.vnet.ibm.com>
Cc: Lianbo Jiang <liji...@redhat.com>
Cc: HAGIO KAZUHITO(萩尾 一仁) <k-hagio...@nec.com>
Cc: Tao Liu <l...@redhat.com>
Cc: Alexey Makhalov <alexey.makha...@broadcom.com>
Cc: Aditya Gupta <adit...@linux.ibm.com>
Signed-off-by: Tao Liu <l...@redhat.com>
---
 tools.c | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/tools.c b/tools.c
index 2b78b95..dec6e5b 100644
--- a/tools.c
+++ b/tools.c
@@ -16,6 +16,7 @@
  */
 
 #include "defs.h"
+#include "xen_hyper_defs.h"
 #include <ctype.h>
 
 #ifdef VALGRIND
@@ -6720,6 +6721,11 @@ get_cpumask_buf(void)
 {
        int cpulen, len_cpumask;
 
+#ifdef XEN_HYPERVISOR_ARCH 
+       if (XEN_HYPER_MODE() && XEN_HYPER_VALID_SIZE(cpumask_t))
+               return (ulong *)GETBUF(XEN_HYPER_SIZE(cpumask_t));
+#endif
+
        cpulen = DIV_ROUND_UP(kt->cpus, BITS_PER_LONG) * sizeof(ulong);
        len_cpumask = STRUCT_SIZE("cpumask_t");
        if (len_cpumask > 0)
-- 
2.40.1
--
Crash-utility mailing list -- devel@lists.crash-utility.osci.io
To unsubscribe send an email to devel-le...@lists.crash-utility.osci.io
https://${domain_name}/admin/lists/devel.lists.crash-utility.osci.io/
Contribution Guidelines: https://github.com/crash-utility/crash/wiki

Reply via email to