qla2xxx: more updates/fixes for 2.6.27 [8.02.01-k6].
Subsystems (2)
cover qla2xxx: more updates/fixes for 2.6.27 [8.02.01-k6].
Another round of updates/fixes for 2.6.27.
drivers/scsi/qla2xxx/qla_attr.c | 49 ++++++++++------------------------- drivers/scsi/qla2xxx/qla_init.c | 7 +++-- drivers/scsi/qla2xxx/qla_iocb.c | 9 +++--- drivers/scsi/qla2xxx/qla_mbx.c | 7 ++--- drivers/scsi/qla2xxx/qla_mid.c | 1 + drivers/scsi/qla2xxx/qla_os.c | 8 +++-- drivers/scsi/qla2xxx/qla_version.h | 2 +- 7 files changed, 32 insertions(+), 51 deletions(-)
here's the commits:
- Issue proper ISP callbacks during stop-firmware.
- use memory_read_from_buffer()
- drivers/scsi/qla2xxx/qla_os.c: suppress uninitialized-var warning
- Additional NPIV corrections.
- Update version number to 8.02.01-k6.
Regards,
Andrew Vasquez
QLogic Corporation
PATCH 1/5 qla2xxx: Issue proper ISP callbacks during stop-firmware.
As the original code would incorrectly call the non-ISP24xx/25xx callbacks during recovery, a stop-firmware failure could result in improper bit-banging of the RISC and in some cases manifest in a NMI-watchdog trigger due to the RISC not coming out of its reset state.
--- drivers/scsi/qla2xxx/qla_init.c | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-)
drivers/scsi/qla2xxx/qla_init.c +2 -2
@@ -4038,8 +4038,8 @@ qla2x00_try_to_stop_firmware(scsi_qla_host_t *ha) ret =qla2x00_stop_firmware (ha);for (retries =5 ; ret !=QLA_SUCCESS && ret !=QLA_FUNCTION_TIMEOUT && retries ; retries--) { -qla2x00_reset_chip (ha); -if (qla2x00_chip_diag (ha) !=QLA_SUCCESS ) + ha->isp_ops->reset_chip (ha); +if (ha->isp_ops->chip_diag (ha) !=QLA_SUCCESS )continue ;if (qla2x00_setup_chip (ha) !=QLA_SUCCESS )continue ;
Signature · 1 line
1.6.0.rc0.42.g186458
PATCH 2/5 qla2xxx: use memory_read_from_buffer()
In reply to Andrew VasquezFrom: Akinobu Mita <[email protected]>
--- drivers/scsi/qla2xxx/qla_attr.c | 44 ++++++++------------------------------- 1 files changed, 9 insertions(+), 35 deletions(-)
drivers/scsi/qla2xxx/qla_attr.c +9 -35
@@ -20,18 +20,12 @@ qla2x00_sysfs_read_fw_dump(struct kobject *kobj, {struct scsi_qla_host *ha =shost_priv (dev_to_shost (container_of (kobj, struct device, kobj))); -char *rbuf = (char *)ha->fw_dump;if (ha->fw_dump_reading ==0 )return 0 ; -if (off > ha->fw_dump_len) -return 0 ; -if (off + count > ha->fw_dump_len) - count = ha->fw_dump_len - off; -memcpy (buf, &rbuf[off], count); - -return (count); +return memory_read_from_buffer (buf, count, &off, ha->fw_dump, + ha->fw_dump_len); } static ssize_t
@@ -94,20 +88,13 @@ qla2x00_sysfs_read_nvram(struct kobject *kobj, {struct scsi_qla_host *ha =shost_priv (dev_to_shost (container_of (kobj, struct device, kobj))); -int size = ha->nvram_size; -char *nvram_cache = ha->nvram; -if (!capable (CAP_SYS_ADMIN ) || off > size || count ==0 ) +if (!capable (CAP_SYS_ADMIN ))return 0 ; -if (off + count > size) { - size -= off; - count = size; - }/* Read NVRAM data from cache. */ -memcpy (buf, &nvram_cache[off], count); - -return count; +return memory_read_from_buffer (buf, count, &off, ha->nvram, + ha->nvram_size); } static ssize_t
@@ -175,14 +162,9 @@ qla2x00_sysfs_read_optrom(struct kobject *kobj,if (ha->optrom_state !=QLA_SREADING )return 0 ; -if (off > ha->optrom_region_size) -return 0 ; -if (off + count > ha->optrom_region_size) - count = ha->optrom_region_size - off; -memcpy (buf, &ha->optrom_buffer[off], count); - -return count; +return memory_read_from_buffer (buf, count, &off, ha->optrom_buffer, + ha->optrom_region_size); } static ssize_t
@@ -374,20 +356,12 @@ qla2x00_sysfs_read_vpd(struct kobject *kobj, {struct scsi_qla_host *ha =shost_priv (dev_to_shost (container_of (kobj, struct device, kobj))); -int size = ha->vpd_size; -char *vpd_cache = ha->vpd; -if (!capable (CAP_SYS_ADMIN ) || off > size || count ==0 ) +if (!capable (CAP_SYS_ADMIN ))return 0 ; -if (off + count > size) { - size -= off; - count = size; - }/* Read NVRAM data from cache. */ -memcpy (buf, &vpd_cache[off], count); - -return count; +return memory_read_from_buffer (buf, count, &off, ha->vpd, ha->vpd_size); } static ssize_t
Signature · 1 line
1.6.0.rc0.42.g186458
PATCH 3/5 qla2xxx: drivers/scsi/qla2xxx/qla_os.c: suppress uninitialized-var warning
In reply to Andrew VasquezFrom: Andrew Morton <[email protected]>
drivers/scsi/qla2xxx/qla_os.c: In function 'qla2x00_post_work':drivers/scsi/qla2xxx/qla_os.c:2158: warning: 'flags' may be used uninitialized in this function
--- drivers/scsi/qla2xxx/qla_os.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-)
drivers/scsi/qla2xxx/qla_os.c +1 -1
@@ -2178,7 +2178,7 @@ qla2x00_alloc_work(struct scsi_qla_host *ha, enum qla_work_type type,static int qla2x00_post_work (struct scsi_qla_host *ha,struct qla_work_evt *e,int locked) { -unsigned long flags; +unsigned long uninitialized_var (flags );scsi_qla_host_t *pha =to_qla_parent (ha);if (!locked)
Signature · 1 line
1.6.0.rc0.42.g186458
PATCH 4/5 qla2xxx: Additional NPIV corrections.
In reply to Andrew VasquezMinor fixes addressing:
- rport managements during vport deletion.
- acquire proper physical-ha during qla24xx_abort_command() and qla24xx_queuecommand()
- do not needlessly acquire the pha for non-NPIV capable ISPs.
--- drivers/scsi/qla2xxx/qla_attr.c | 5 +++++ drivers/scsi/qla2xxx/qla_init.c | 3 ++- drivers/scsi/qla2xxx/qla_iocb.c | 9 ++++----- drivers/scsi/qla2xxx/qla_mbx.c | 7 +++---- drivers/scsi/qla2xxx/qla_mid.c | 1 + drivers/scsi/qla2xxx/qla_os.c | 6 ++++-- 6 files changed, 19 insertions(+), 12 deletions(-)
drivers/scsi/qla2xxx/qla_attr.c +5 -0
@@ -1177,6 +1177,11 @@ static int qla24xx_vport_delete(struct fc_vport *fc_vport) {scsi_qla_host_t *vha = fc_vport->dd_data; +scsi_qla_host_t *pha =to_qla_parent (vha); + +while (test_bit (LOOP_RESYNC_ACTIVE , &vha->dpc_flags) || +test_bit (FCPORT_UPDATE_NEEDED , &pha->dpc_flags)) +msleep (1000 );qla24xx_disable_vp (vha);qla24xx_deallocate_vp_id (vha);
drivers/scsi/qla2xxx/qla_init.c +2 -1
@@ -3231,7 +3231,8 @@ qla2x00_update_fcports(scsi_qla_host_t *ha)/* Go with deferred removal of rport references. */ list_for_each_entry (fcport, &ha->fcports, list) -if (fcport->drport) +if (fcport->drport && +atomic_read (&fcport->state) !=FCS_UNCONFIGURED )qla2x00_rport_del (fcport); }
drivers/scsi/qla2xxx/qla_iocb.c +4 -5
@@ -269,7 +269,7 @@ qla2x00_start_scsi(srb_t *sp) {int ret, nseg;unsigned long flags; -scsi_qla_host_t *ha, *pha; +scsi_qla_host_t *ha;struct scsi_cmnd *cmd;uint32_t *clr_ptr;uint32_t index;
@@ -283,7 +283,6 @@ qla2x00_start_scsi(srb_t *sp)/* Setup device pointers. */ ret =0 ; ha = sp->ha; - pha =to_qla_parent (ha); reg = &ha->iobase->isp; cmd = sp->cmd;/* So we know we haven't pci_map'ed anything yet */
@@ -298,7 +297,7 @@ qla2x00_start_scsi(srb_t *sp) }/* Acquire ring specific lock */ -spin_lock_irqsave (&pha->hardware_lock, flags); +spin_lock_irqsave (&ha->hardware_lock, flags);/* Check for room in outstanding command list. */ handle = ha->current_outstanding_cmd;
@@ -387,14 +386,14 @@ qla2x00_start_scsi(srb_t *sp) ha->response_ring_ptr->signature != RESPONSE_PROCESSED)qla2x00_process_response_queue (ha); -spin_unlock_irqrestore (&pha->hardware_lock, flags); +spin_unlock_irqrestore (&ha->hardware_lock, flags);return (QLA_SUCCESS ); queuing_error:if (tot_dsds)scsi_dma_unmap (cmd); -spin_unlock_irqrestore (&pha->hardware_lock, flags); +spin_unlock_irqrestore (&ha->hardware_lock, flags);return (QLA_FUNCTION_FAILED ); }
drivers/scsi/qla2xxx/qla_mbx.c +3 -4
@@ -749,18 +749,17 @@ qla2x00_abort_command(scsi_qla_host_t *ha, srb_t *sp)uint32_t handle;mbx_cmd_t mc;mbx_cmd_t *mcp = &mc; -scsi_qla_host_t *pha =to_qla_parent (ha);DEBUG11 (printk ("qla2x00_abort_command(%ld): entered.\n" , ha->host_no)); fcport = sp->fcport; -spin_lock_irqsave (&pha->hardware_lock, flags); +spin_lock_irqsave (&ha->hardware_lock, flags);for (handle =1 ; handle <MAX_OUTSTANDING_COMMANDS ; handle++) {if (ha->outstanding_cmds[handle] == sp)break ; } -spin_unlock_irqrestore (&pha->hardware_lock, flags); +spin_unlock_irqrestore (&ha->hardware_lock, flags);if (handle ==MAX_OUTSTANDING_COMMANDS ) {/* command not found */
@@ -2172,7 +2171,7 @@ qla24xx_abort_command(scsi_qla_host_t *ha, srb_t *sp)spin_lock_irqsave (&pha->hardware_lock, flags);for (handle =1 ; handle <MAX_OUTSTANDING_COMMANDS ; handle++) { -if (ha->outstanding_cmds[handle] == sp) +if (pha->outstanding_cmds[handle] == sp)break ; }spin_unlock_irqrestore (&pha->hardware_lock, flags);
drivers/scsi/qla2xxx/qla_mid.c +1 -0
@@ -106,6 +106,7 @@ qla2x00_mark_vp_devices_dead(scsi_qla_host_t *vha) vha->host_no, fcport->loop_id, fcport->vp_idx));qla2x00_mark_device_lost (vha, fcport,0 ,0 ); +atomic_set (&fcport->state,FCS_UNCONFIGURED ); } }
drivers/scsi/qla2xxx/qla_os.c +4 -2
@@ -449,7 +449,7 @@ qla24xx_queuecommand(struct scsi_cmnd *cmd, void (*done)(struct scsi_cmnd *))int rval;scsi_qla_host_t *pha =to_qla_parent (ha); -if (unlikely (pci_channel_offline (ha->pdev))) { +if (unlikely (pci_channel_offline (pha->pdev))) { cmd->result =DID_REQUEUE <<16 ; goto qc24_fail_command; }
@@ -2335,8 +2335,10 @@ qla2x00_do_dpc(void *data) ha->host_no)); } -if (test_and_clear_bit (FCPORT_UPDATE_NEEDED , &ha->dpc_flags)) +if (test_bit (FCPORT_UPDATE_NEEDED , &ha->dpc_flags)) {qla2x00_update_fcports (ha); +clear_bit (FCPORT_UPDATE_NEEDED , &ha->dpc_flags); + }if (test_and_clear_bit (RESET_MARKER_NEEDED , &ha->dpc_flags) && (!(test_and_set_bit (RESET_ACTIVE , &ha->dpc_flags)))) {
Signature · 1 line
1.6.0.rc0.42.g186458
PATCH 5/5 qla2xxx: Update version number to 8.02.01-k6.
In reply to Andrew Vasquez--- drivers/scsi/qla2xxx/qla_version.h | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-)
drivers/scsi/qla2xxx/qla_version.h +1 -1
@@ -7,7 +7,7 @@/* * Driver version */ -#define QLA2XXX_VERSION "8.02.01-k5" +#define QLA2XXX_VERSION "8.02.01-k6"#define QLA_DRIVER_MAJOR_VER 8#define QLA_DRIVER_MINOR_VER 2
Signature · 1 line
1.6.0.rc0.42.g186458
Quoted 1 line · Andrew Vasquez
Another round of updates/fixes for 2.6.27.
Could you take this patch in through your tree too?
Signature · 4 lines
Intel are signing my paycheques ... these opinions are still mine "Bill, look, we understand that you're interested in selling us this operating system, but compare it to ours. We can't possibly take such a retrograde step."
Quoted 6 lines · Matthew Wilcox
Quoted 1 line · Andrew Vasquez
Another round of updates/fixes for 2.6.27.
Could you take this patch in through your tree too?
No problem. Queued for my next set of fixes-bundle...