aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi/qla2xxx/qla_dbg.c
diff options
context:
space:
mode:
authorAndrew Vasquez <andrew.vasquez@qlogic.com>2006-05-17 15:09:50 -0700
committerJames Bottomley <jejb@mulgrave.il.steeleye.com>2006-05-20 09:50:11 -0500
commitd4e3e04d789ba23027c66e176b10ac7477906948 (patch)
treee98c514c2b3505af6f0c0a2e48f697899735ff15 /drivers/scsi/qla2xxx/qla_dbg.c
parentcb63067a772c0149184309a1f232d62c81a93673 (diff)
downloadkernel_samsung_smdk4412-d4e3e04d789ba23027c66e176b10ac7477906948.zip
kernel_samsung_smdk4412-d4e3e04d789ba23027c66e176b10ac7477906948.tar.gz
kernel_samsung_smdk4412-d4e3e04d789ba23027c66e176b10ac7477906948.tar.bz2
[SCSI] qla2xxx: Consolidate firmware-dump handling across ISPs.
Simplify and centralise buffer allocation/deallocation, as there's no point in having two memory request methods. Signed-off-by: Andrew Vasquez <andrew.vasquez@qlogic.com> Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
Diffstat (limited to 'drivers/scsi/qla2xxx/qla_dbg.c')
-rw-r--r--drivers/scsi/qla2xxx/qla_dbg.c53
1 files changed, 20 insertions, 33 deletions
diff --git a/drivers/scsi/qla2xxx/qla_dbg.c b/drivers/scsi/qla2xxx/qla_dbg.c
index e8120fb..74e5471 100644
--- a/drivers/scsi/qla2xxx/qla_dbg.c
+++ b/drivers/scsi/qla2xxx/qla_dbg.c
@@ -28,7 +28,7 @@ qla2300_fw_dump(scsi_qla_host_t *ha, int hardware_locked)
uint16_t __iomem *dmp_reg;
unsigned long flags;
struct qla2300_fw_dump *fw;
- uint32_t dump_size, data_ram_cnt;
+ uint32_t data_ram_cnt;
risc_address = data_ram_cnt = 0;
mb0 = mb2 = 0;
@@ -37,23 +37,16 @@ qla2300_fw_dump(scsi_qla_host_t *ha, int hardware_locked)
if (!hardware_locked)
spin_lock_irqsave(&ha->hardware_lock, flags);
- if (ha->fw_dump != NULL) {
+ if (!ha->fw_dump) {
qla_printk(KERN_WARNING, ha,
- "Firmware has been previously dumped (%p) -- ignoring "
- "request...\n", ha->fw_dump);
+ "No buffer available for dump!!!\n");
goto qla2300_fw_dump_failed;
}
- /* Allocate (large) dump buffer. */
- dump_size = sizeof(struct qla2300_fw_dump);
- dump_size += (ha->fw_memory_size - 0x11000) * sizeof(uint16_t);
- ha->fw_dump_order = get_order(dump_size);
- ha->fw_dump = (struct qla2300_fw_dump *) __get_free_pages(GFP_ATOMIC,
- ha->fw_dump_order);
- if (ha->fw_dump == NULL) {
+ if (ha->fw_dumped) {
qla_printk(KERN_WARNING, ha,
- "Unable to allocated memory for firmware dump (%d/%d).\n",
- ha->fw_dump_order, dump_size);
+ "Firmware has been previously dumped (%p) -- ignoring "
+ "request...\n", ha->fw_dump);
goto qla2300_fw_dump_failed;
}
fw = ha->fw_dump;
@@ -358,17 +351,16 @@ qla2300_fw_dump(scsi_qla_host_t *ha, int hardware_locked)
}
}
-
if (rval != QLA_SUCCESS) {
qla_printk(KERN_WARNING, ha,
"Failed to dump firmware (%x)!!!\n", rval);
+ ha->fw_dumped = 0;
- free_pages((unsigned long)ha->fw_dump, ha->fw_dump_order);
- ha->fw_dump = NULL;
} else {
qla_printk(KERN_INFO, ha,
"Firmware dump saved to temp buffer (%ld/%p).\n",
ha->host_no, ha->fw_dump);
+ ha->fw_dumped = 1;
}
qla2300_fw_dump_failed:
@@ -587,21 +579,16 @@ qla2100_fw_dump(scsi_qla_host_t *ha, int hardware_locked)
if (!hardware_locked)
spin_lock_irqsave(&ha->hardware_lock, flags);
- if (ha->fw_dump != NULL) {
+ if (!ha->fw_dump) {
qla_printk(KERN_WARNING, ha,
- "Firmware has been previously dumped (%p) -- ignoring "
- "request...\n", ha->fw_dump);
+ "No buffer available for dump!!!\n");
goto qla2100_fw_dump_failed;
}
- /* Allocate (large) dump buffer. */
- ha->fw_dump_order = get_order(sizeof(struct qla2100_fw_dump));
- ha->fw_dump = (struct qla2100_fw_dump *) __get_free_pages(GFP_ATOMIC,
- ha->fw_dump_order);
- if (ha->fw_dump == NULL) {
+ if (ha->fw_dumped) {
qla_printk(KERN_WARNING, ha,
- "Unable to allocated memory for firmware dump (%d/%Zd).\n",
- ha->fw_dump_order, sizeof(struct qla2100_fw_dump));
+ "Firmware has been previously dumped (%p) -- ignoring "
+ "request...\n", ha->fw_dump);
goto qla2100_fw_dump_failed;
}
fw = ha->fw_dump;
@@ -777,13 +764,13 @@ qla2100_fw_dump(scsi_qla_host_t *ha, int hardware_locked)
if (rval != QLA_SUCCESS) {
qla_printk(KERN_WARNING, ha,
"Failed to dump firmware (%x)!!!\n", rval);
+ ha->fw_dumped = 0;
- free_pages((unsigned long)ha->fw_dump, ha->fw_dump_order);
- ha->fw_dump = NULL;
} else {
qla_printk(KERN_INFO, ha,
"Firmware dump saved to temp buffer (%ld/%p).\n",
ha->host_no, ha->fw_dump);
+ ha->fw_dumped = 1;
}
qla2100_fw_dump_failed:
@@ -988,7 +975,7 @@ qla24xx_fw_dump(scsi_qla_host_t *ha, int hardware_locked)
if (!hardware_locked)
spin_lock_irqsave(&ha->hardware_lock, flags);
- if (!ha->fw_dump24) {
+ if (!ha->fw_dump) {
qla_printk(KERN_WARNING, ha,
"No buffer available for dump!!!\n");
goto qla24xx_fw_dump_failed;
@@ -997,10 +984,10 @@ qla24xx_fw_dump(scsi_qla_host_t *ha, int hardware_locked)
if (ha->fw_dumped) {
qla_printk(KERN_WARNING, ha,
"Firmware has been previously dumped (%p) -- ignoring "
- "request...\n", ha->fw_dump24);
+ "request...\n", ha->fw_dump);
goto qla24xx_fw_dump_failed;
}
- fw = (struct qla24xx_fw_dump *) ha->fw_dump24;
+ fw = ha->fw_dump;
rval = QLA_SUCCESS;
fw->host_status = RD_REG_DWORD(&reg->host_status);
@@ -1654,7 +1641,7 @@ qla24xx_fw_dump(scsi_qla_host_t *ha, int hardware_locked)
} else {
qla_printk(KERN_INFO, ha,
"Firmware dump saved to temp buffer (%ld/%p).\n",
- ha->host_no, ha->fw_dump24);
+ ha->host_no, ha->fw_dump);
ha->fw_dumped = 1;
}
@@ -1672,7 +1659,7 @@ qla24xx_ascii_fw_dump(scsi_qla_host_t *ha)
uint32_t ext_mem_cnt;
uiter = ha->fw_dump_buffer;
- fw = ha->fw_dump24;
+ fw = ha->fw_dump;
qla_uprintf(&uiter, "ISP FW Version %d.%02d.%02d Attributes %04x\n",
ha->fw_major_version, ha->fw_minor_version,