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