| From: Dave Anderson <anderson@xxxxxxxxxx> | 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.) | > When I use the irq command I get this error message: | > irq: cannot determine size of irq_desc_t | | 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? I'm playing with linux-2.6.22-rc7 now. It has the same problem with the crash irq command. Those lines are still in linux-2.6.22-rc7/include/linux/irq.h so I don't know why this problem has come up. In any case, I have a patch that seems to fix the problem and that should be backward compatible. It is based on the suggestions you outlined. I'm starting with the crash-4.0-4.3. =================================================================== RCS file: RCS/kernel.c,v retrieving revision 1.1 diff -u -r1.1 kernel.c --- kernel.c 2007/07/07 17:23:06 1.1 +++ kernel.c 2007/07/07 17:56:59 @@ -49,7 +49,7 @@ static void BUG_bytes_init(void); static int BUG_x86(void); static int BUG_x86_64(void); - +static /*const*/ char *irq_desc_type_name; /* @@ -278,13 +278,19 @@ STRUCT_SIZE_INIT(hlist_head, "hlist_head"); STRUCT_SIZE_INIT(hlist_node, "hlist_node"); - MEMBER_OFFSET_INIT(irq_desc_t_status, "irq_desc_t", "status"); - if (MEMBER_EXISTS("irq_desc_t", "handler")) - MEMBER_OFFSET_INIT(irq_desc_t_handler, "irq_desc_t", "handler"); + /* see linux-* /include/linux/irq.h to find how IRQ information is represented by the kernel */ + if (STRUCT_EXISTS("irq_desc_t")) + irq_desc_type_name = "irq_desc_t"; + else + irq_desc_type_name = "irq_desc"; + + MEMBER_OFFSET_INIT(irq_desc_t_status, irq_desc_type_name, "status"); + if (MEMBER_EXISTS(irq_desc_type_name, "handler")) + MEMBER_OFFSET_INIT(irq_desc_t_handler, irq_desc_type_name, "handler"); else - MEMBER_OFFSET_INIT(irq_desc_t_chip, "irq_desc_t", "chip"); - MEMBER_OFFSET_INIT(irq_desc_t_action, "irq_desc_t", "action"); - MEMBER_OFFSET_INIT(irq_desc_t_depth, "irq_desc_t", "depth"); + MEMBER_OFFSET_INIT(irq_desc_t_chip, irq_desc_type_name, "chip"); + MEMBER_OFFSET_INIT(irq_desc_t_action, irq_desc_type_name, "action"); + MEMBER_OFFSET_INIT(irq_desc_t_depth, irq_desc_type_name, "depth"); if (STRUCT_EXISTS("hw_interrupt_type")) { MEMBER_OFFSET_INIT(hw_interrupt_type_typename, "hw_interrupt_type", "typename"); @@ -346,7 +352,7 @@ MEMBER_OFFSET_INIT(irqaction_dev_id, "irqaction", "dev_id"); MEMBER_OFFSET_INIT(irqaction_next, "irqaction", "next"); - STRUCT_SIZE_INIT(irq_desc_t, "irq_desc_t"); + STRUCT_SIZE_INIT(irq_desc_t, irq_desc_type_name); STRUCT_SIZE_INIT(irq_cpustat_t, "irq_cpustat_t"); MEMBER_OFFSET_INIT(irq_cpustat_t___softirq_active, ================ end of patch ================ -- Crash-utility mailing list Crash-utility@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/crash-utility