FAQ Search Today's Posts Mark Forums Read
» Video Reviews

» Linux Archive

Linux-archive is a website aiming to archive linux email lists and to make them easily accessible for linux users/developers.


» Sponsor

» Partners

» Sponsor

Go Back   Linux Archive > Redhat > Crash Utility

 
 
LinkBack Thread Tools
 
Old 12-15-2010, 10:53 AM
Mika Westerberg
 
Default ARM: use generic_dump_irq() instead of a custom one

There is no reason for having custom IRQ dumping function on ARM
and having such causes maintenance burden when the kernel IRQ
structures change.

So convert ARM to use generic_dump_irq() and remove all the now
unused ARM specific IRQ dumping code.

Signed-off-by: Mika Westerberg <ext-mika.1.westerberg@nokia.com>
Cc: jan.karlsson@sonyericsson.com
Cc: thomas.fange@sonyericsson.com
---
This patch applies on top of my 2 previous patches (the ones you
already queued).

arm.c | 326 +----------------------------------------------------------------
1 files changed, 3 insertions(+), 323 deletions(-)

diff --git a/arm.c b/arm.c
index 751fe00..4e6ab3d 100644
--- a/arm.c
+++ b/arm.c
@@ -52,8 +52,6 @@ static ulong arm_get_task_pgd(ulong);
static void arm_cmd_mach(void);
static void arm_display_machine_stats(void);
static int arm_get_smp_cpus(void);
-static void print_irq_member(char *, ulong, char *);
-static void arm_dump_irq(int);
static void arm_init_machspec(void);

static struct line_number_hook arm_line_number_hooks[];
@@ -237,22 +235,15 @@ arm_init(int when)
machdep->line_number_hooks = arm_line_number_hooks;
machdep->value_to_symbol = generic_machdep_value_to_symbol;
machdep->init_kernel_pgd = NULL;
-
- if (symbol_exists("irq_desc"))
- machdep->dump_irq = arm_dump_irq;
+ machdep->dump_irq = generic_dump_irq;

arm_init_machspec();
break;

case POST_GDB:
- if (symbol_exists("irq_desc")) {
+ if (symbol_exists("irq_desc"))
ARRAY_LENGTH_INIT(machdep->nr_irqs, irq_desc,
"irq_desc", NULL, 0);
- if (MEMBER_EXISTS("irq_desc", "name"))
- MEMBER_OFFSET_INIT(irq_desc_t_name, "irq_desc",
- "name");
- }
-
/*
* Registers for idle threads are saved in
* thread_info.cpu_context.
@@ -343,10 +334,7 @@ arm_dump_machdep_table(ulong arg)
fprintf(fp, " uvtop: arm_uvtop()
");
fprintf(fp, " kvtop: arm_kvtop()
");
fprintf(fp, " get_task_pgd: arm_get_task_pgd()
");
- if (symbol_exists("irq_desc"))
- fprintf(fp, " dump_irq: arm_dump_irq()
");
- else
- fprintf(fp, " dump_irq: NULL
");
+ fprintf(fp, " dump_irq: generic_dump_irq()
");
fprintf(fp, " get_stack_frame: arm_get_stack_frame()
");
fprintf(fp, " get_stackbase: generic_get_stackbase()
");
fprintf(fp, " get_stacktop: generic_get_stacktop()
");
@@ -1409,314 +1397,6 @@ arm_get_smp_cpus(void)
return get_cpus_online();
}

-static void
-print_irq_member(char *irq, ulong val, char *ind)
-{
- char buf[BUFSIZE];
- ulong val2;
-
- fprintf(fp, "%17s: %8lx ", irq, val);
- if (val) {
- if (is_kernel_text(val))
- fprintf(fp, "<%s>", value_to_symstr(val, buf, 0));
- else if (readmem(val, KVADDR, &val2,
- sizeof(ulong), ind, RETURN_ON_ERROR|QUIET) &&
- is_kernel_text(val2))
- fprintf(fp, "<%s>", value_to_symstr(val2, buf, 0));
- }
- fprintf(fp, "
");
-}
-
-/*
- * Do the work for cmd_irq().
- */
-static void
-arm_dump_irq(int irq)
-{
- struct datatype_member datatype_member, *dm;
- ulong irq_desc_addr;
- ulong irq_desc_ptr;
- long len;
- char buf[BUFSIZE];
- int type, status, depth, others;
- ulong handler, action, value;
- ulong tmp1;
-
- dm = &datatype_member;
-
- if (!VALID_STRUCT(irq_desc_t))
- error(FATAL, "cannot determine size of irq_desc
");
- len = SIZE(irq_desc_t);
-
- if (symbol_exists("irq_desc"))
- irq_desc_addr = symbol_value("irq_desc") + (len * irq);
- else if (symbol_exists("_irq_desc"))
- irq_desc_addr = symbol_value("_irq_desc") + (len * irq);
- else if (symbol_exists("irq_desc_ptrs")) {
- get_symbol_data("irq_desc_ptrs", sizeof(void *), &irq_desc_ptr);
- irq_desc_ptr += (irq * sizeof(void *));
- readmem(irq_desc_ptr, KVADDR, &irq_desc_addr,
- sizeof(void *), "irq_desc_ptrs entry",
- FAULT_ON_ERROR);
- if (!irq_desc_addr) {
- fprintf(fp, " IRQ: %d (unused)

", irq);
- return;
- }
- } else {
- irq_desc_addr = 0;
- error(FATAL,
- "neither irq_desc, _irq_desc, nor irq_desc_ptrs "
- "symbols exist
");
- }
-
- readmem(irq_desc_addr + OFFSET(irq_desc_t_status), KVADDR, &status,
- sizeof(int), "irq_desc entry", FAULT_ON_ERROR);
- if (VALID_MEMBER(irq_desc_t_handler))
- readmem(irq_desc_addr + OFFSET(irq_desc_t_handler), KVADDR,
- &handler, sizeof(long), "irq_desc entry",
- FAULT_ON_ERROR);
- else if (VALID_MEMBER(irq_desc_t_chip))
- readmem(irq_desc_addr + OFFSET(irq_desc_t_chip), KVADDR,
- &handler, sizeof(long), "irq_desc entry",
- FAULT_ON_ERROR);
- readmem(irq_desc_addr + OFFSET(irq_desc_t_action), KVADDR, &action,
- sizeof(long), "irq_desc entry", FAULT_ON_ERROR);
- readmem(irq_desc_addr + OFFSET(irq_desc_t_depth), KVADDR, &depth,
- sizeof(int), "irq_desc entry", FAULT_ON_ERROR);
-
- if (!action && (handler == (ulong)pc->curcmd_private))
- return;
-
- fprintf(fp, " IRQ: %d
", irq);
- fprintf(fp, "ADDRESS: %08lx
", irq_desc_addr);
-
- if (VALID_MEMBER(irq_desc_t_name)) {
- readmem(irq_desc_addr+OFFSET(irq_desc_t_name),
- KVADDR, &tmp1, sizeof(void *),
- "irq_desc name", FAULT_ON_ERROR);
- if (tmp1) {
- fprintf(fp, " NAME: %lx", tmp1);
- BZERO(buf, BUFSIZE);
- if (read_string(tmp1, buf, BUFSIZE-1))
- fprintf(fp, " "%s"", buf);
- fprintf(fp, "
");
- }
- }
-
- type = status & IRQ_TYPE_SENSE_MASK;
- fprintf(fp, " TYPE: %x %s", type, type ? "(" : "");
- others = 0;
-
- if ((type & IRQ_TYPE_EDGE_BOTH) == IRQ_TYPE_EDGE_BOTH)
- fprintf(fp, "%sEDGE_BOTH", others++ ? "|" : "");
- else {
- if (type & IRQ_TYPE_EDGE_RISING)
- fprintf(fp, "%sEDGE_RISING", others++ ? "|" : "");
- if (type & IRQ_TYPE_EDGE_FALLING)
- fprintf(fp, "%sEDGE_FALLING", others++ ? "|" : "");
- }
- if (type & IRQ_TYPE_LEVEL_HIGH)
- fprintf(fp, "%sLEVEL_HIGH", others++ ? "|" : "");
- if (type & IRQ_TYPE_LEVEL_LOW)
- fprintf(fp, "%sLEVEL_LOW", others++ ? "|" : "");
- fprintf(fp, "%s
", type ? ")" : "");
-
- fprintf(fp, " PROBE: %s
", status & IRQ_TYPE_PROBE ? "true" : "false");
-
- fprintf(fp, " STATUS: %x %s", status, status ? "(" : "");
- others = 0;
- if (status & IRQ_INPROGRESS) {
- fprintf(fp, "IRQ_INPROGRESS");
- others++;
- }
- if (status & IRQ_DISABLED)
- fprintf(fp, "%sIRQ_DISABLED", others++ ? "|" : "");
- if (status & IRQ_PENDING)
- fprintf(fp, "%sIRQ_PENDING", others++ ? "|" : "");
- if (status & IRQ_REPLAY)
- fprintf(fp, "%sIRQ_REPLAY", others++ ? "|" : "");
- if (status & IRQ_AUTODETECT)
- fprintf(fp, "%sIRQ_AUTODETECT", others++ ? "|" : "");
- if (status & IRQ_WAITING)
- fprintf(fp, "%sIRQ_WAITING", others++ ? "|" : "");
- if (status & IRQ_LEVEL)
- fprintf(fp, "%sIRQ_LEVEL", others++ ? "|" : "");
- if (status & IRQ_MASKED)
- fprintf(fp, "%sIRQ_MASKED", others++ ? "|" : "");
-
- if (status & IRQ_PER_CPU)
- fprintf(fp, "%sIRQ_PER_CPU", others++ ? "|" : "");
- if (status & IRQ_NOPROBE)
- fprintf(fp, "%sIRQ_NOPROBE", others++ ? "|" : "");
- if (status & IRQ_NOREQUEST)
- fprintf(fp, "%sIRQ_NOREQUEST", others++ ? "|" : "");
- if (status & IRQ_NOAUTOEN)
- fprintf(fp, "%sIRQ_NOAUTOEN", others++ ? "|" : "");
- if (status & IRQ_WAKEUP)
- fprintf(fp, "%sIRQ_WAKEUP", others++ ? "|" : "");
- if (status & IRQ_MOVE_PENDING)
- fprintf(fp, "%sIRQ_MOVE_PENDING", others++ ? "|" : "");
- if (status & IRQ_NO_BALANCING)
- fprintf(fp, "%sIRQ_NO_BALANCING", others++ ? "|" : "");
- if (status & IRQ_SPURIOUS_DISABLED)
- fprintf(fp, "%sIRQ_SPURIOUS_DISABLED", others++ ? "|" : "");
- if (status & IRQ_MOVE_PCNTXT)
- fprintf(fp, "%sIRQ_MOVE_PCNTXT", others++ ? "|" : "");
- if (status & IRQ_AFFINITY_SET)
- fprintf(fp, "%sIRQ_AFFINITY_SET", others++ ? "|" : "");
-
-
- fprintf(fp, "%s
", status ? ")" : "");
-
- fprintf(fp, "HANDLER: %8lx ", handler);
- if (value_symbol(handler)) {
- pad_line(fp, VADDR_PRLEN == 8 ? VADDR_PRLEN+2 : VADDR_PRLEN-6, ' ');
- fprintf(fp, "<%s>", value_symbol(handler));
- }
- fprintf(fp, "
");
-
-#define CHECK_HANDLER_OPT_MEMBER_PRT(x)
- if (VALID_MEMBER(hw_interrupt_type_ ## x)) {
- readmem(handler+OFFSET(hw_interrupt_type_ ## x), KVADDR,
- &tmp1, sizeof(void *), "hw_interrupt_type " #x,
- FAULT_ON_ERROR);
- print_irq_member(#x, tmp1, #x " indirection");
- } else if (VALID_MEMBER(irq_chip_ ## x)) {
- readmem(handler+OFFSET(irq_chip_ ## x),KVADDR, &tmp1,
- sizeof(void *), "irq_chip " #x, FAULT_ON_ERROR);
- print_irq_member(#x, tmp1, #x " indirection");
- }
-
-#define CHECK_HANDLER_OPT_MEMBER(x)
- if (VALID_MEMBER(hw_interrupt_type_ ## x))
- readmem(handler+OFFSET(hw_interrupt_type_ ## x), KVADDR,
- &tmp1, sizeof(void *), "hw_interrupt_type " #x,
- FAULT_ON_ERROR);
- else if (VALID_MEMBER(irq_chip_ ## x))
- readmem(handler+OFFSET(irq_chip_ ## x),KVADDR, &tmp1,
- sizeof(void *), "irq_chip " #x, FAULT_ON_ERROR);
-
-#define CHECK_HANDLER_MEMBER_PRT(x,s1,s2)
- if (VALID_MEMBER(x)) {
- readmem(handler+OFFSET(x), KVADDR, &tmp1, sizeof(void *),
- s1, FAULT_ON_ERROR);
- print_irq_member(s2, tmp1, s2 " indirection");
- }
-
- if (handler) {
- CHECK_HANDLER_OPT_MEMBER(typename);
-
- fprintf(fp, " typename: %lx ", tmp1);
- BZERO(buf, BUFSIZE);
- if (read_string(tmp1, buf, BUFSIZE-1))
- fprintf(fp, ""%s"", buf);
- fprintf(fp, "
");
-
- CHECK_HANDLER_OPT_MEMBER(startup);
-
- print_irq_member("startup", tmp1, "startup indirection");
-
- CHECK_HANDLER_OPT_MEMBER(shutdown);
-
- print_irq_member("shutdown", tmp1, "shutdown indirection");
-
- CHECK_HANDLER_MEMBER_PRT(hw_interrupt_type_handle,
- "hw_interrupt_type handle",
- "handle");
-
- CHECK_HANDLER_OPT_MEMBER(enable);
-
- print_irq_member("enable", tmp1, "enable indirection");
-
- CHECK_HANDLER_OPT_MEMBER(disable);
-
- print_irq_member("disable", tmp1, "disable indirection");
-
- CHECK_HANDLER_OPT_MEMBER(ack);
-
- print_irq_member("ack", tmp1, "ack indirection");
-
- CHECK_HANDLER_MEMBER_PRT(irq_chip_mask, "irq_chip mask","mask");
-
- CHECK_HANDLER_MEMBER_PRT(irq_chip_mask_ack, "irq_chip mask_ack",
- "mask_ack");
-
- CHECK_HANDLER_MEMBER_PRT(irq_chip_unmask, "irq_chip unmask",
- "unmask");
-
- CHECK_HANDLER_MEMBER_PRT(irq_chip_eoi,"irq_chip eoi","eoi");
-
- CHECK_HANDLER_OPT_MEMBER_PRT(startup);
-
- CHECK_HANDLER_OPT_MEMBER_PRT(set_affinity);
-
- CHECK_HANDLER_MEMBER_PRT(irq_chip_retrigger,
- "irq_chip retrigger", "retrigger");
- CHECK_HANDLER_MEMBER_PRT(irq_chip_set_type,
- "irq_chip set_type", "set_type");
- CHECK_HANDLER_MEMBER_PRT(irq_chip_set_wake,
- "irq_chip set_wake", "set_wake");
- }
-
-do_linked_action:
-
- fprintf(fp, " ACTION: ");
- if (value_symbol(action)) {
- fprintf(fp, "%lx ", action);
- pad_line(fp, VADDR_PRLEN == 8 ?
- VADDR_PRLEN+2 : VADDR_PRLEN - 6, ' ');
- fprintf(fp, "<%s>
", value_symbol(action));
- } else if (action) {
- fprintf(fp, "%8lx
", action);
- } else {
- fprintf(fp, "(none)
");
- }
-
- if (action) {
- readmem(action+OFFSET(irqaction_handler), KVADDR,
- &tmp1, sizeof(void *),
- "irqaction handler", FAULT_ON_ERROR);
-
- print_irq_member("handler", tmp1, "handler indirection");
-
- readmem(action+OFFSET(irqaction_flags), KVADDR,
- &value, sizeof(void *),
- "irqaction flags", FAULT_ON_ERROR);
- fprintf(fp, " flags: %8lx
", value);
-
- if (VALID_MEMBER(irqaction_mask)) {
- readmem(action+OFFSET(irqaction_mask), KVADDR,
- &tmp1, sizeof(void *),
- "irqaction mask", FAULT_ON_ERROR);
- fprintf(fp, " mask: %8lx
", tmp1);
- }
-
- readmem(action+OFFSET(irqaction_name), KVADDR,
- &tmp1, sizeof(void *),
- "irqaction name", FAULT_ON_ERROR);
- fprintf(fp, " name: %8lx ", tmp1);
- BZERO(buf, BUFSIZE);
- if (read_string(tmp1, buf, BUFSIZE-1))
- fprintf(fp, ""%s"", buf);
- fprintf(fp, "
");
-
- readmem(action+OFFSET(irqaction_dev_id), KVADDR,
- &tmp1, sizeof(void *),
- "irqaction dev_id", FAULT_ON_ERROR);
- fprintf(fp, " dev_id: %8lx
", tmp1);
-
- readmem(action+OFFSET(irqaction_next), KVADDR,
- &action, sizeof(void *),
- "irqaction dev_id", FAULT_ON_ERROR);
- fprintf(fp, " next: %8lx
", action);
- }
-
- if (action)
- goto do_linked_action;
-
- fprintf(fp, " DEPTH: %d

", depth);
-}
-
/*
* Initialize ARM specific stuff.
*/
--
1.7.3.2

--
Crash-utility mailing list
Crash-utility@redhat.com
https://www.redhat.com/mailman/listinfo/crash-utility
 

Thread Tools




All times are GMT. The time now is 09:34 AM.

VBulletin, Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.
Content Relevant URLs by vBSEO ©2007, Crawlability, Inc.
Copyright 2007 - 2008, www.linux-archive.org