summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorShivasharan S <shivasharan.srikanteshwara@broadcom.com>2019-05-07 10:05:39 -0700
committerMartin K. Petersen <martin.petersen@oracle.com>2019-06-18 19:46:19 -0400
commit4fe55035f30fb38bfb898c974f603943cdfe390a (patch)
treeaab8529a51100e0aad627b8235d28d17d76996db
parent2ce435087902d42fa33d0032143868ceb42d9fb6 (diff)
downloadlinux-4fe55035f30fb38bfb898c974f603943cdfe390a.tar.gz
linux-4fe55035f30fb38bfb898c974f603943cdfe390a.tar.bz2
linux-4fe55035f30fb38bfb898c974f603943cdfe390a.zip
scsi: megaraid_sas: Add formatting option for megasas_dump
Add option to format the buffer that is being dumped. Currently, the IO frame and chain frame dumped in the syslog is getting split across multiple lines based on the formatting. Fix this by using KERN_CONT in printk. Signed-off-by: Sumit Saxena <sumit.saxena@broadcom.com> Signed-off-by: Shivasharan S <shivasharan.srikanteshwara@broadcom.com> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
-rw-r--r--drivers/scsi/megaraid/megaraid_sas_base.c30
1 files changed, 18 insertions, 12 deletions
diff --git a/drivers/scsi/megaraid/megaraid_sas_base.c b/drivers/scsi/megaraid/megaraid_sas_base.c
index d3f4b48be1cd..7d7cf8b82e9e 100644
--- a/drivers/scsi/megaraid/megaraid_sas_base.c
+++ b/drivers/scsi/megaraid/megaraid_sas_base.c
@@ -2837,22 +2837,28 @@ blk_eh_timer_return megasas_reset_timer(struct scsi_cmnd *scmd)
}
/**
- * megasas_dump - This function will provide hexdump
- * @ptr: Pointer starting which memory should be dumped
- * @size: Size of memory to be dumped
+ * megasas_dump - This function will print hexdump of provided buffer.
+ * @buf: Buffer to be dumped
+ * @sz: Size in bytes
+ * @format: Different formats of dumping e.g. format=n will
+ * cause only 'n' 32 bit words to be dumped in a single
+ * line.
*/
inline void
-megasas_dump(void *ptr, int sz)
+megasas_dump(void *buf, int sz, int format)
{
int i;
- __le32 *loc = (__le32 *)ptr;
+ __le32 *buf_loc = (__le32 *)buf;
- for (i = 0; i < sz / sizeof(__le32); i++) {
- if (i && ((i % 8) == 0))
- printk("\n\t");
- printk("%08x ", le32_to_cpu(loc[i]));
+ for (i = 0; i < (sz / sizeof(__le32)); i++) {
+ if ((i % format) == 0) {
+ if (i != 0)
+ printk(KERN_CONT "\n");
+ printk(KERN_CONT "%08x: ", (i * 4));
+ }
+ printk(KERN_CONT "%08x ", le32_to_cpu(buf_loc[i]));
}
- printk("\n");
+ printk(KERN_CONT "\n");
}
/**
@@ -2886,10 +2892,10 @@ megasas_dump_fusion_io(struct scsi_cmnd *scmd)
printk(KERN_INFO "IO request frame:\n");
megasas_dump(cmd->io_request,
- MEGA_MPI2_RAID_DEFAULT_IO_FRAME_SIZE);
+ MEGA_MPI2_RAID_DEFAULT_IO_FRAME_SIZE, 8);
printk(KERN_INFO "Chain frame:\n");
megasas_dump(cmd->sg_frame,
- instance->max_chain_frame_sz);
+ instance->max_chain_frame_sz, 8);
}
}