[Crash-utility] [PATCH v3] add option -s and -S for subcommand irq

Dave Anderson anderson at redhat.com
Wed Jan 18 20:11:28 UTC 2012



----- Original Message -----
> Hello, Dave
> 
> Re-posting two patches as attachments. Very sorry for incorrectly
> changing the behaviour of the original "irq" command in the last
> patches.
> 
> Thanks,
> Zhang Yanfei

I should first note that I would have preferred that the patch were
written to address the other actively-supported architectures, given
that the irq_data and irq_desc structures are not x86/x86_64-specific.
However, I understand that you may not have access to the other 
architectures.  That being the case, I invite the s390x, ia64, arm,
ppc32 and ppc64 maintainers to look at this patch, and if you are
interested, please apply it for those architectures as well.

Anyway, I made a number of changes to the patch as written.

(1) I changed the "irq" option letters to something more meaningful: 

    (a) For IRQ affinity, I changed it from "irq -s" to "irq -a".
    (b) For IRQ stats, I changed it from "irq -S" to "irq -s".

(2) In generic_show_interrupts(), I changed the output so that it 
    does not append additional unnecessary spaces to the end of 
    the output line, i.e., from this:

        fprintf(fp, " %-20s ", name_buf);
        fprintf(fp, "\n");

    to simply this:

        fprintf(fp, " %s\n", name_buf);

(3) In cmd_irq(), I changed the two new command_not_supported() calls
    to be option_not_supported(c). 

(4) The "irq -s" option fails on earlier kernels, for example, with
    the RHEL4 kernel:

      crash> irq -s
      IRQ NAME                 AFFINITY
  
      irq: invalid structure member offset: irq_desc_t_affinity
           FILE: kernel.c  LINE: 5543  FUNCTION: generic_get_irq_affinity()
  
      [/home/anderson/crash-6.0.2/crash] error trace: 459c05 => 4bf432 => 4c1d31 => 4fb70e
  
        4fb70e: OFFSET_verify+222
        4c1d31: generic_get_irq_affinity+1153
        4bf432: cmd_irq+530
        459c05: exec_command+821
  
      irq: invalid structure member offset: irq_desc_t_affinity
  
    The "irq -s" option would also fail on recent kernels if they are
    not configured with CONFIG_SMP, because irq_data.affinity
    member would not exist:
  
      struct irq_data {
              unsigned int            irq;
              unsigned long           hwirq;
              unsigned int            node;
              unsigned int            state_use_accessors;
              struct irq_chip         *chip;
              struct irq_domain       *domain;
              void                    *handler_data;
              void                    *chip_data;
              struct msi_desc         *msi_desc;
      #ifdef CONFIG_SMP
              cpumask_var_t           affinity;
      #endif
      };
  
    To handle those two possibilities, I added this to cmd_irq() 
    for the "-a" option:

              if (VALID_STRUCT(irq_data)) {
                      if (INVALID_MEMBER(irq_data_affinity))
                              option_not_supported(c);
              } else if (INVALID_MEMBER(irq_desc_t_affinity))
                      option_not_supported(c);


(5) In x86.c, it makes no sense to set machdep->get_irq_affinity 
    and machdep->show_interrupts in x86_init_hyper() given that the
    "irq" command is not supported for the Xen hypervisor analysis.
    (See the xen_hyper_command_table[] in xen_hyper_global_data.c)

(6) In defs.h, I moved: 

    (a) get_irq_affinity and show_interrupts to the end of the 
        machdep_table structure
    (b) irq_desc_t_irq_data, irq_desc_t_kstat_irqs, irq_desc_t_affinity,
        irq_data_chip, irq_data_affinity and kernel_stat_irqs to the
        end of the offset_table structure.
    (c) kernel_stat to the end of the size_table structure.
 
    This would allow an extension module built with an earlier version
    of the crash utility to still work without recompiling due to
    structure member offset changes.  

(7) I updated dump_offset_table() to show the new members of the
    offset_table and the size_table for the "help -o" command.

(8) And lastly, I reworked the "help irq" page.

I will continue testing it on various kernels and architectures,
and if all goes well, I will queue it for crash-6.0.3.

Dave




More information about the Crash-utility mailing list