On Mon, 17 Nov 2014, Dave Anderson wrote: > ----- Original Message ----- > > Hi, > > > > here is a simple patch to rudimentary support the irq command on s390. > > Nothing special like irq statistics, just the plain list of irqs. Also > > this will only work on recent kernels. Old kernels (without > > GENERIC_HARDIRQ support) will print "cannot determine number of IRQs". > > What's the starting kernel version for supporting this? I note that the patch > doesn't help with RHEL6 or RHEL7: Linux 3.12. So if you're looking at distribution kernels you'd need Fedora or Sles12. Regards, Sebastian > > crash> sys | grep RELEASE > RELEASE: 2.6.32-112.el6.s390x > crash> irq > irq: cannot determine number of IRQs > crash> irq -u > irq: WARNING: irq: -u option ignored: "no_irq_chip" or "no_irq_type" symbols do not exist > irq: cannot determine number of IRQs > crash> > > > crash> sys | grep RELEASE > RELEASE: 3.10.0-123.el7.s390x > crash> irq > irq: cannot determine number of IRQs > crash> irq -u > irq: WARNING: irq: -u option ignored: "no_irq_chip" or "no_irq_type" symbols do not exist > irq: cannot determine number of IRQs > crash> > > Thanks, > Dave > > > > > > Regards, > > Sebastian > > > > From aa13aff5450686ac4438d771596e0faa041aa454 Mon Sep 17 00:00:00 2001 > > From: Sebastian Ott <sebott@xxxxxxxxxxxxxxxxxx> > > Date: Fri, 14 Nov 2014 13:52:54 +0100 > > Subject: [PATCH] s390: support irq command via generic_dump_irq > > > > Signed-off-by: Sebastian Ott <sebott@xxxxxxxxxxxxxxxxxx> > > --- > > kernel.c | 6 ------ > > s390.c | 25 ++++++++++++------------- > > s390x.c | 24 +++++++++++------------- > > 3 files changed, 23 insertions(+), 32 deletions(-) > > > > diff --git a/kernel.c b/kernel.c > > index 1cb0967..da1e48e 100644 > > --- a/kernel.c > > +++ b/kernel.c > > @@ -5575,9 +5575,6 @@ cmd_irq(void) > > return; > > > > case 'u': > > - if (machine_type("S390") || machine_type("S390X")) > > - command_not_supported(); > > - > > pc->curcmd_flags |= IRQ_IN_USE; > > if (kernel_symbol_exists("no_irq_chip")) > > pc->curcmd_private = (ulonglong)symbol_value("no_irq_chip"); > > @@ -5633,9 +5630,6 @@ cmd_irq(void) > > if (argerrs) > > cmd_usage(pc->curcmd, SYNOPSIS); > > > > - if (machine_type("S390") || machine_type("S390X")) > > - command_not_supported(); > > - > > if ((nr_irqs = machdep->nr_irqs) == 0) > > error(FATAL, "cannot determine number of IRQs\n"); > > > > diff --git a/s390.c b/s390.c > > index 45da7c4..7740fe3 100644 > > --- a/s390.c > > +++ b/s390.c > > @@ -57,7 +57,6 @@ static int s390_translate_pte(ulong, void *, ulonglong); > > static ulong s390_processor_speed(void); > > static int s390_eframe_search(struct bt_info *); > > static void s390_back_trace_cmd(struct bt_info *); > > -static void s390_dump_irq(int); > > static void s390_get_stack_frame(struct bt_info *, ulong *, ulong *); > > static int s390_dis_filter(ulong, char *, unsigned int); > > static void s390_cmd_mach(void); > > @@ -146,9 +145,18 @@ s390_init(int when) > > break; > > > > case POST_GDB: > > - machdep->nr_irqs = 0; /* TBD */ > > + > > + if (symbol_exists("irq_desc")) > > + ARRAY_LENGTH_INIT(machdep->nr_irqs, irq_desc, > > + "irq_desc", NULL, 0); > > + else if (kernel_symbol_exists("nr_irqs")) > > + get_symbol_data("nr_irqs", sizeof(unsigned int), > > + &machdep->nr_irqs); > > + else > > + machdep->nr_irqs = 0; > > + > > machdep->vmalloc_start = s390_vmalloc_start; > > - machdep->dump_irq = s390_dump_irq; > > + machdep->dump_irq = generic_dump_irq; > > if (!machdep->hz) > > machdep->hz = HZ; > > machdep->section_size_bits = _SECTION_SIZE_BITS; > > @@ -194,7 +202,7 @@ s390_dump_machdep_table(ulong arg) > > fprintf(fp, " uvtop: s390_uvtop()\n"); > > fprintf(fp, " kvtop: s390_kvtop()\n"); > > fprintf(fp, " get_task_pgd: s390_get_task_pgd()\n"); > > - fprintf(fp, " dump_irq: s390_dump_irq()\n"); > > + fprintf(fp, " dump_irq: generic_dump_irq()\n"); > > fprintf(fp, " get_stack_frame: s390_get_stack_frame()\n"); > > fprintf(fp, " get_stackbase: generic_get_stackbase()\n"); > > fprintf(fp, " get_stacktop: generic_get_stacktop()\n"); > > @@ -954,15 +962,6 @@ s390_get_stack_frame(struct bt_info *bt, ulong *eip, > > ulong *esp) > > } > > > > /* > > - * cmd_irq() is not implemented for s390. > > - */ > > -static void > > -s390_dump_irq(int irq) > > -{ > > - error(FATAL, "s390_dump_irq: TBD\n"); > > -} > > - > > -/* > > * Filter disassembly output if the output radix is not gdb's default 10 > > */ > > static int > > diff --git a/s390x.c b/s390x.c > > index 5bd7a81..7d1310f 100644 > > --- a/s390x.c > > +++ b/s390x.c > > @@ -104,7 +104,6 @@ static int s390x_translate_pte(ulong, void *, ulonglong); > > static ulong s390x_processor_speed(void); > > static int s390x_eframe_search(struct bt_info *); > > static void s390x_back_trace_cmd(struct bt_info *); > > -static void s390x_dump_irq(int); > > static void s390x_get_stack_frame(struct bt_info *, ulong *, ulong *); > > static int s390x_dis_filter(ulong, char *, unsigned int); > > static void s390x_cmd_mach(void); > > @@ -412,9 +411,17 @@ s390x_init(int when) > > break; > > > > case POST_GDB: > > - machdep->nr_irqs = 0; /* TBD */ > > + if (symbol_exists("irq_desc")) > > + ARRAY_LENGTH_INIT(machdep->nr_irqs, irq_desc, > > + "irq_desc", NULL, 0); > > + else if (kernel_symbol_exists("nr_irqs")) > > + get_symbol_data("nr_irqs", sizeof(unsigned int), > > + &machdep->nr_irqs); > > + else > > + machdep->nr_irqs = 0; > > + > > machdep->vmalloc_start = s390x_vmalloc_start; > > - machdep->dump_irq = s390x_dump_irq; > > + machdep->dump_irq = generic_dump_irq; > > if (!machdep->hz) > > machdep->hz = HZ; > > machdep->section_size_bits = _SECTION_SIZE_BITS; > > @@ -462,7 +469,7 @@ s390x_dump_machdep_table(ulong arg) > > fprintf(fp, " uvtop: s390x_uvtop()\n"); > > fprintf(fp, " kvtop: s390x_kvtop()\n"); > > fprintf(fp, " get_task_pgd: s390x_get_task_pgd()\n"); > > - fprintf(fp, " dump_irq: s390x_dump_irq()\n"); > > + fprintf(fp, " dump_irq: generic_dump_irq()\n"); > > fprintf(fp, " get_stack_frame: s390x_get_stack_frame()\n"); > > fprintf(fp, " get_stackbase: generic_get_stackbase()\n"); > > fprintf(fp, " get_stacktop: generic_get_stacktop()\n"); > > @@ -1413,15 +1420,6 @@ s390x_get_stack_frame(struct bt_info *bt, ulong *eip, > > ulong *esp) > > } > > > > /* > > - * cmd_irq() is not implemented for s390x. > > - */ > > -static void > > -s390x_dump_irq(int irq) > > -{ > > - error(FATAL, "s390x_dump_irq: TBD\n"); > > -} > > - > > -/* > > * Filter disassembly output if the output radix is not gdb's default 10 > > */ > > static int > > -- > > 1.8.5.5 > > > > > > -- Crash-utility mailing list Crash-utility@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/crash-utility