[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