}
 }
 
+void qla2xxx_dump_fw(scsi_qla_host_t *vha)
+{
+       unsigned long flags;
+
+       spin_lock_irqsave(&vha->hw->hardware_lock, flags);
+       vha->hw->isp_ops->fw_dump(vha);
+       spin_unlock_irqrestore(&vha->hw->hardware_lock, flags);
+}
+
 /**
  * qla2300_fw_dump() - Dumps binary data from the 2300 firmware.
  * @vha: HA context
- * @hardware_locked: Called with the hardware_lock
  */
 void
-qla2300_fw_dump(scsi_qla_host_t *vha, int hardware_locked)
+qla2300_fw_dump(scsi_qla_host_t *vha)
 {
        int             rval;
        uint32_t        cnt;
        struct qla_hw_data *ha = vha->hw;
        struct device_reg_2xxx __iomem *reg = &ha->iobase->isp;
        uint16_t __iomem *dmp_reg;
-       unsigned long   flags;
        struct qla2300_fw_dump  *fw;
        void            *nxt;
        struct scsi_qla_host *base_vha = pci_get_drvdata(ha->pdev);
 
-       flags = 0;
-
-#ifndef __CHECKER__
-       if (!hardware_locked)
-               spin_lock_irqsave(&ha->hardware_lock, flags);
-#endif
+       lockdep_assert_held(&ha->hardware_lock);
 
        if (!ha->fw_dump) {
                ql_log(ql_log_warn, vha, 0xd002,
                    "No buffer available for dump.\n");
-               goto qla2300_fw_dump_failed;
+               return;
        }
 
        if (ha->fw_dumped) {
                    "Firmware has been previously dumped (%p) "
                    "-- ignoring request.\n",
                    ha->fw_dump);
-               goto qla2300_fw_dump_failed;
+               return;
        }
        fw = &ha->fw_dump->isp.isp23;
        qla2xxx_prep_dump(ha, ha->fw_dump);
                qla2xxx_copy_queues(ha, nxt);
 
        qla2xxx_dump_post_process(base_vha, rval);
-
-qla2300_fw_dump_failed:
-#ifndef __CHECKER__
-       if (!hardware_locked)
-               spin_unlock_irqrestore(&ha->hardware_lock, flags);
-#else
-       ;
-#endif
 }
 
 /**
  * qla2100_fw_dump() - Dumps binary data from the 2100/2200 firmware.
  * @vha: HA context
- * @hardware_locked: Called with the hardware_lock
  */
 void
-qla2100_fw_dump(scsi_qla_host_t *vha, int hardware_locked)
+qla2100_fw_dump(scsi_qla_host_t *vha)
 {
        int             rval;
        uint32_t        cnt, timer;
-       uint16_t        risc_address;
-       uint16_t        mb0, mb2;
+       uint16_t        risc_address = 0;
+       uint16_t        mb0 = 0, mb2 = 0;
        struct qla_hw_data *ha = vha->hw;
        struct device_reg_2xxx __iomem *reg = &ha->iobase->isp;
        uint16_t __iomem *dmp_reg;
-       unsigned long   flags;
        struct qla2100_fw_dump  *fw;
        struct scsi_qla_host *base_vha = pci_get_drvdata(ha->pdev);
 
-       risc_address = 0;
-       mb0 = mb2 = 0;
-       flags = 0;
-
-#ifndef __CHECKER__
-       if (!hardware_locked)
-               spin_lock_irqsave(&ha->hardware_lock, flags);
-#endif
+       lockdep_assert_held(&ha->hardware_lock);
 
        if (!ha->fw_dump) {
                ql_log(ql_log_warn, vha, 0xd004,
                    "No buffer available for dump.\n");
-               goto qla2100_fw_dump_failed;
+               return;
        }
 
        if (ha->fw_dumped) {
                    "Firmware has been previously dumped (%p) "
                    "-- ignoring request.\n",
                    ha->fw_dump);
-               goto qla2100_fw_dump_failed;
+               return;
        }
        fw = &ha->fw_dump->isp.isp21;
        qla2xxx_prep_dump(ha, ha->fw_dump);
                qla2xxx_copy_queues(ha, &fw->risc_ram[cnt]);
 
        qla2xxx_dump_post_process(base_vha, rval);
-
-qla2100_fw_dump_failed:
-#ifndef __CHECKER__
-       if (!hardware_locked)
-               spin_unlock_irqrestore(&ha->hardware_lock, flags);
-#else
-       ;
-#endif
 }
 
 void
-qla24xx_fw_dump(scsi_qla_host_t *vha, int hardware_locked)
+qla24xx_fw_dump(scsi_qla_host_t *vha)
 {
        int             rval;
        uint32_t        cnt;
        uint32_t __iomem *dmp_reg;
        uint32_t        *iter_reg;
        uint16_t __iomem *mbx_reg;
-       unsigned long   flags;
        struct qla24xx_fw_dump *fw;
        void            *nxt;
        void            *nxt_chain;
        uint32_t        *last_chain = NULL;
        struct scsi_qla_host *base_vha = pci_get_drvdata(ha->pdev);
 
+       lockdep_assert_held(&ha->hardware_lock);
+
        if (IS_P3P_TYPE(ha))
                return;
 
-       flags = 0;
        ha->fw_dump_cap_flags = 0;
 
-#ifndef __CHECKER__
-       if (!hardware_locked)
-               spin_lock_irqsave(&ha->hardware_lock, flags);
-#endif
-
        if (!ha->fw_dump) {
                ql_log(ql_log_warn, vha, 0xd006,
                    "No buffer available for dump.\n");
-               goto qla24xx_fw_dump_failed;
+               return;
        }
 
        if (ha->fw_dumped) {
                    "Firmware has been previously dumped (%p) "
                    "-- ignoring request.\n",
                    ha->fw_dump);
-               goto qla24xx_fw_dump_failed;
+               return;
        }
        QLA_FW_STOPPED(ha);
        fw = &ha->fw_dump->isp.isp24;
 
 qla24xx_fw_dump_failed_0:
        qla2xxx_dump_post_process(base_vha, rval);
-
-qla24xx_fw_dump_failed:
-#ifndef __CHECKER__
-       if (!hardware_locked)
-               spin_unlock_irqrestore(&ha->hardware_lock, flags);
-#else
-       ;
-#endif
 }
 
 void
-qla25xx_fw_dump(scsi_qla_host_t *vha, int hardware_locked)
+qla25xx_fw_dump(scsi_qla_host_t *vha)
 {
        int             rval;
        uint32_t        cnt;
        uint32_t __iomem *dmp_reg;
        uint32_t        *iter_reg;
        uint16_t __iomem *mbx_reg;
-       unsigned long   flags;
        struct qla25xx_fw_dump *fw;
        void            *nxt, *nxt_chain;
        uint32_t        *last_chain = NULL;
        struct scsi_qla_host *base_vha = pci_get_drvdata(ha->pdev);
 
-       flags = 0;
-       ha->fw_dump_cap_flags = 0;
+       lockdep_assert_held(&ha->hardware_lock);
 
-#ifndef __CHECKER__
-       if (!hardware_locked)
-               spin_lock_irqsave(&ha->hardware_lock, flags);
-#endif
+       ha->fw_dump_cap_flags = 0;
 
        if (!ha->fw_dump) {
                ql_log(ql_log_warn, vha, 0xd008,
                    "No buffer available for dump.\n");
-               goto qla25xx_fw_dump_failed;
+               return;
        }
 
        if (ha->fw_dumped) {
                    "Firmware has been previously dumped (%p) "
                    "-- ignoring request.\n",
                    ha->fw_dump);
-               goto qla25xx_fw_dump_failed;
+               return;
        }
        QLA_FW_STOPPED(ha);
        fw = &ha->fw_dump->isp.isp25;
 
 qla25xx_fw_dump_failed_0:
        qla2xxx_dump_post_process(base_vha, rval);
-
-qla25xx_fw_dump_failed:
-#ifndef __CHECKER__
-       if (!hardware_locked)
-               spin_unlock_irqrestore(&ha->hardware_lock, flags);
-#else
-       ;
-#endif
 }
 
 void
-qla81xx_fw_dump(scsi_qla_host_t *vha, int hardware_locked)
+qla81xx_fw_dump(scsi_qla_host_t *vha)
 {
        int             rval;
        uint32_t        cnt;
        uint32_t __iomem *dmp_reg;
        uint32_t        *iter_reg;
        uint16_t __iomem *mbx_reg;
-       unsigned long   flags;
        struct qla81xx_fw_dump *fw;
        void            *nxt, *nxt_chain;
        uint32_t        *last_chain = NULL;
        struct scsi_qla_host *base_vha = pci_get_drvdata(ha->pdev);
 
-       flags = 0;
-       ha->fw_dump_cap_flags = 0;
+       lockdep_assert_held(&ha->hardware_lock);
 
-#ifndef __CHECKER__
-       if (!hardware_locked)
-               spin_lock_irqsave(&ha->hardware_lock, flags);
-#endif
+       ha->fw_dump_cap_flags = 0;
 
        if (!ha->fw_dump) {
                ql_log(ql_log_warn, vha, 0xd00a,
                    "No buffer available for dump.\n");
-               goto qla81xx_fw_dump_failed;
+               return;
        }
 
        if (ha->fw_dumped) {
                    "Firmware has been previously dumped (%p) "
                    "-- ignoring request.\n",
                    ha->fw_dump);
-               goto qla81xx_fw_dump_failed;
+               return;
        }
        fw = &ha->fw_dump->isp.isp81;
        qla2xxx_prep_dump(ha, ha->fw_dump);
 
 qla81xx_fw_dump_failed_0:
        qla2xxx_dump_post_process(base_vha, rval);
-
-qla81xx_fw_dump_failed:
-#ifndef __CHECKER__
-       if (!hardware_locked)
-               spin_unlock_irqrestore(&ha->hardware_lock, flags);
-#else
-       ;
-#endif
 }
 
 void
-qla83xx_fw_dump(scsi_qla_host_t *vha, int hardware_locked)
+qla83xx_fw_dump(scsi_qla_host_t *vha)
 {
        int             rval;
        uint32_t        cnt;
        uint32_t __iomem *dmp_reg;
        uint32_t        *iter_reg;
        uint16_t __iomem *mbx_reg;
-       unsigned long   flags;
        struct qla83xx_fw_dump *fw;
        void            *nxt, *nxt_chain;
        uint32_t        *last_chain = NULL;
        struct scsi_qla_host *base_vha = pci_get_drvdata(ha->pdev);
 
-       flags = 0;
-       ha->fw_dump_cap_flags = 0;
+       lockdep_assert_held(&ha->hardware_lock);
 
-#ifndef __CHECKER__
-       if (!hardware_locked)
-               spin_lock_irqsave(&ha->hardware_lock, flags);
-#endif
+       ha->fw_dump_cap_flags = 0;
 
        if (!ha->fw_dump) {
                ql_log(ql_log_warn, vha, 0xd00c,
                    "No buffer available for dump!!!\n");
-               goto qla83xx_fw_dump_failed;
+               return;
        }
 
        if (ha->fw_dumped) {
                ql_log(ql_log_warn, vha, 0xd00d,
                    "Firmware has been previously dumped (%p) -- ignoring "
                    "request...\n", ha->fw_dump);
-               goto qla83xx_fw_dump_failed;
+               return;
        }
        QLA_FW_STOPPED(ha);
        fw = &ha->fw_dump->isp.isp83;
 
 qla83xx_fw_dump_failed_0:
        qla2xxx_dump_post_process(base_vha, rval);
-
-qla83xx_fw_dump_failed:
-#ifndef __CHECKER__
-       if (!hardware_locked)
-               spin_unlock_irqrestore(&ha->hardware_lock, flags);
-#else
-       ;
-#endif
 }
 
 /****************************************************************************/
 
 /*
  * Global Function Prototypes in qla_dbg.c source file.
  */
-extern void qla2100_fw_dump(scsi_qla_host_t *, int);
-extern void qla2300_fw_dump(scsi_qla_host_t *, int);
-extern void qla24xx_fw_dump(scsi_qla_host_t *, int);
-extern void qla25xx_fw_dump(scsi_qla_host_t *, int);
-extern void qla81xx_fw_dump(scsi_qla_host_t *, int);
-extern void qla82xx_fw_dump(scsi_qla_host_t *, int);
-extern void qla8044_fw_dump(scsi_qla_host_t *, int);
-
-extern void qla27xx_fwdump(scsi_qla_host_t *, int);
+void qla2xxx_dump_fw(scsi_qla_host_t *vha);
+void qla2100_fw_dump(scsi_qla_host_t *vha);
+void qla2300_fw_dump(scsi_qla_host_t *vha);
+void qla24xx_fw_dump(scsi_qla_host_t *vha);
+void qla25xx_fw_dump(scsi_qla_host_t *vha);
+void qla81xx_fw_dump(scsi_qla_host_t *vha);
+void qla82xx_fw_dump(scsi_qla_host_t *vha);
+void qla8044_fw_dump(scsi_qla_host_t *vha);
+
+void qla27xx_fwdump(scsi_qla_host_t *vha);
 extern void qla27xx_mpi_fwdump(scsi_qla_host_t *, int);
 extern ulong qla27xx_fwdt_calculate_dump_size(struct scsi_qla_host *, void *);
 extern int qla27xx_fwdt_template_valid(void *);
        uint16_t *, uint16_t *);
 
 /* 83xx related functions */
-extern void qla83xx_fw_dump(scsi_qla_host_t *, int);
+void qla83xx_fw_dump(scsi_qla_host_t *vha);
 
 /* Minidump related functions */
 extern int qla82xx_md_get_template_size(scsi_qla_host_t *);
 
                        WRT_REG_WORD(®->hccr, HCCR_RESET_RISC);
                        RD_REG_WORD(®->hccr);
 
-                       ha->isp_ops->fw_dump(vha, 1);
+                       ha->isp_ops->fw_dump(vha);
                        set_bit(ISP_ABORT_NEEDED, &vha->dpc_flags);
                        break;
                } else if ((RD_REG_WORD(®->istatus) & ISR_RISC_INT) == 0)
                        WRT_REG_WORD(®->hccr, HCCR_RESET_RISC);
                        RD_REG_WORD(®->hccr);
 
-                       ha->isp_ops->fw_dump(vha, 1);
+                       ha->isp_ops->fw_dump(vha);
                        set_bit(ISP_ABORT_NEEDED, &vha->dpc_flags);
                        break;
                } else if ((stat & HSR_RISC_INT) == 0)
               "MPI Heartbeat stop. FW dump needed\n");
 
        if (ql2xfulldump_on_mpifail) {
-               ha->isp_ops->fw_dump(vha, 1);
+               ha->isp_ops->fw_dump(vha);
                reset_isp_needed = 1;
        }
 
                if ((IS_QLA27XX(ha) || IS_QLA28XX(ha)) &&
                    RD_REG_WORD(®24->mailbox7) & BIT_8)
                        ha->isp_ops->mpi_fw_dump(vha, 1);
-               ha->isp_ops->fw_dump(vha, 1);
+               ha->isp_ops->fw_dump(vha);
                ha->flags.fw_init_done = 0;
                QLA_FW_STOPPED(ha);
 
 
                        qla2xxx_check_risc_status(vha);
 
-                       ha->isp_ops->fw_dump(vha, 1);
+                       ha->isp_ops->fw_dump(vha);
                        set_bit(ISP_ABORT_NEEDED, &vha->dpc_flags);
                        break;
                } else if ((stat & HSRX_RISC_INT) == 0)
 
                        qla2xxx_check_risc_status(vha);
 
-                       ha->isp_ops->fw_dump(vha, 1);
+                       ha->isp_ops->fw_dump(vha);
                        set_bit(ISP_ABORT_NEEDED, &vha->dpc_flags);
                        break;
                } else if ((stat & HSRX_RISC_INT) == 0)