From: Rabin Vincent <rabinv(a)axis.com>
 
 Since v4.2, irq_data is no longer the first element in irq_desc, because
 there is now an irq_common_data before it.  So we need to get the offset
 of irq_data in irq_desc.
 
 Side note: Since v4.3, affinity (used by irq -a) appears to have been
 moved into the irq_common_data struct.  This patch doesn't handle that
 but only fixes irq -s. 
Rabin,
I also added the new field to dump_offset_table().  Queued for crash-7.1.5:
  
 ---
  defs.h   |  1 +
  kernel.c | 13 ++++++++++---
  2 files changed, 11 insertions(+), 3 deletions(-)
 
 diff --git a/defs.h b/defs.h
 index 2ecfa03..aaf9ba3 100644
 --- a/defs.h
 +++ b/defs.h
 @@ -1950,6 +1950,7 @@ struct offset_table {                    /* stash of
 commonly-used offsets */
  	long pt_regs_cp0_badvaddr;
  	long address_space_page_tree;
  	long page_compound_head;
 +	long irq_desc_irq_data;
  };
  
  struct size_table {         /* stash of commonly-used sizes */
 diff --git a/kernel.c b/kernel.c
 index 5d8a965..999fadd 100644
 --- a/kernel.c
 +++ b/kernel.c
 @@ -523,6 +523,7 @@ kernel_init()
  	if (VALID_STRUCT(irq_data)) {
  		MEMBER_OFFSET_INIT(irq_data_chip, "irq_data", "chip");
  		MEMBER_OFFSET_INIT(irq_data_affinity, "irq_data", "affinity");
 +		MEMBER_OFFSET_INIT(irq_desc_irq_data, "irq_desc", "irq_data");
  	}
  
          STRUCT_SIZE_INIT(irq_cpustat_t, "irq_cpustat_t");
 @@ -6841,10 +6842,16 @@ generic_show_interrupts(int irq, ulong *cpus)
  		readmem(irq_desc_addr + OFFSET(irq_desc_t_chip), KVADDR,
  		        &handler, sizeof(long), "irq_desc chip",
  		        FAULT_ON_ERROR);
 -	else if (VALID_MEMBER(irq_data_chip))
 -		readmem(irq_desc_addr + OFFSET(irq_data_chip), KVADDR,
 -		        &handler, sizeof(long), "irq_data chip",
 +	else if (VALID_MEMBER(irq_data_chip)) {
 +		ulong addr;
 +
 +		addr = irq_desc_addr + OFFSET(irq_data_chip);
 +		if (VALID_MEMBER(irq_desc_irq_data))
 +			addr += OFFSET(irq_desc_irq_data);
 +
 +		readmem(addr, KVADDR, &handler, sizeof(long), "irq_data chip",
  		        FAULT_ON_ERROR);
 +	}
  
  	fprintf(fp, "%3d: ", irq);
  
 --
 2.7.0
 
 --
 Crash-utility mailing list
 Crash-utility(a)redhat.com
 
https://www.redhat.com/mailman/listinfo/crash-utility