[Crash-utility] crash vs irqs

Dave Anderson anderson at redhat.com
Tue Jul 3 13:51:20 UTC 2007


D. Hugh Redelmeier wrote:
> I'm having a problem with the Fedora 7 kernel 2.6.21-1.3228.fc7 for
> x86_64.  So I am trying to use crash-4.0-4.2 to analyze the problem.
> (The version of crash in F7 won't work with this kernel.)
> 
> Since the kernel bug appears to be in irq handline, learning more
> about IRQ state is important.
> 
> When I use the irq command I get this error message:
>   irq: cannot determine size of irq_desc_t
> 
> Is this a bug or a known limitation of crash?

Could be shifting sands syndrome, which happens all the time.

Perhaps "irq_desc_t" has been removed from that kernel?
I've got a slightly older 2.6.21-1.3125.fc7 source tree
hanging around that shows this:

/*
  * Migration helpers for obsolete names, they will go away:
  */
#define hw_interrupt_type       irq_chip
typedef struct irq_chip         hw_irq_controller;
#define no_irq_type             no_irq_chip
typedef struct irq_desc         irq_desc_t;

Interesting, the "go away" comment -- perhaps it's no longer
there in -1.3228?

Anyway presuming that the irq_desc structure is still in place,
you could try rebuilding crash by changing all instances of
the string arguments below that use "irq_desc_t" to "irq_desc":

Text string: "irq_desc_t"

   File     Line
0 kernel.c 281 MEMBER_OFFSET_INIT(irq_desc_t_status,  "irq_desc_t", "status");
1 kernel.c 282 if (MEMBER_EXISTS("irq_desc_t", "handler"))
2 kernel.c 283 MEMBER_OFFSET_INIT(irq_desc_t_handler, "irq_desc_t", "handler");
3 kernel.c 285 MEMBER_OFFSET_INIT(irq_desc_t_chip, "irq_desc_t", "chip");
4 kernel.c 286 MEMBER_OFFSET_INIT(irq_desc_t_action, "irq_desc_t", "action");
5 kernel.c 287 MEMBER_OFFSET_INIT(irq_desc_t_depth, "irq_desc_t", "depth");
6 kernel.c 349 STRUCT_SIZE_INIT(irq_desc_t, "irq_desc_t");
7 ppc.c    111 STRUCT_SIZE_INIT(irq_desc_t, "irq_desc_t");
8 ppc64.c  197 STRUCT_SIZE_INIT(irq_desc_t, "irq_desc_t");

For example, the 0'th line above would be:

MEMBER_OFFSET_INIT(irq_desc_t_status, "irq_desc", "status");

You can test whether the structure sizes and structure member
offsets have been successfully determined by entering
"help -o", which gives the full dump of all member offsets,
structure sizes and array sizes, or in this case, add a string
qualifier argument to pare it down:

crash> help -o irq_desc
                   offset_table:
              irq_desc_t_status: 40
             irq_desc_t_handler: -1
                irq_desc_t_chip: 8
              irq_desc_t_action: 32
               irq_desc_t_depth: 44

                     size_table:
                     irq_desc_t: 256

                    array_table:
                       irq_desc: 239

crash>

In the kernel above, the old "handler" member has been
renamed to "chip" in later kernels.  In your kernel, I would
presume that you've got -1's in all but the irq_desc array_table
entry.

Dave




More information about the Crash-utility mailing list