Login
[x]
Log in using an account from:
Fedora Account System
Red Hat Associate
Red Hat Customer
Or login using a Red Hat Bugzilla account
Forgot Password
Login:
Hide Forgot
Create an Account
Red Hat Bugzilla – Attachment 293026 Details for
Bug 430313
[QLogic 4.7 bug][4/5] qla4xxx - Race condition fixes w/ constant qla3xxx ifup/ifdown (5.01.02-d3 --> 5.01.02-d4)
[?]
New
Simple Search
Advanced Search
My Links
Browse
Requests
Reports
Current State
Search
Tabular reports
Graphical reports
Duplicates
Other Reports
User Changes
Plotly Reports
Bug Status
Bug Severity
Non-Defaults
|
Product Dashboard
Help
Page Help!
Bug Writing Guidelines
What's new
Browser Support Policy
5.0.4.rh83 Release notes
FAQ
Guides index
User guide
Web Services
Contact
Legal
This site requires JavaScript to be enabled to function correctly, please enable it.
[patch]
Patch from 5.01.02-d3 to 5.01.02-d4
qla4xxx-5.01.02-d3_5.01.02-d4_RHEL4.7-00.patch (text/plain), 13.46 KB, created by
Dave Wagner
on 2008-01-26 01:04:12 UTC
(
hide
)
Description:
Patch from 5.01.02-d3 to 5.01.02-d4
Filename:
MIME Type:
Creator:
Dave Wagner
Created:
2008-01-26 01:04:12 UTC
Size:
13.46 KB
patch
obsolete
>diff -Naurp 5.01.02-d3/drivers/scsi/qla4xxx/ql4_glbl.h 5.01.02-d4/drivers/scsi/qla4xxx/ql4_glbl.h >--- 5.01.02-d3/drivers/scsi/qla4xxx/ql4_glbl.h 2007-10-11 13:22:04.000000000 -0700 >+++ 5.01.02-d4/drivers/scsi/qla4xxx/ql4_glbl.h 2008-01-25 12:47:12.000000000 -0800 >@@ -21,8 +21,8 @@ extern void qla4xxx_start_io(scsi_qla_ho > extern srb_t *del_from_active_array(scsi_qla_host_t *ha, uint32_t index); > extern uint8_t qla4xxx_complete_request(scsi_qla_host_t *ha, srb_t *srb); > extern uint8_t qla4xxx_reset_lun(scsi_qla_host_t *ha, ddb_entry_t *ddb_entry, lun_entry_t *lun_entry); >-extern uint8_t qla4xxx_soft_reset(scsi_qla_host_t *); > extern void qla4xxx_hw_reset(scsi_qla_host_t *); >+extern uint8_t qla4xxx_soft_reset(scsi_qla_host_t *); > extern const char *host_sts_msg[]; > extern void qla4xxx_delete_timer_from_cmd(srb_t *srb); > extern scsi_qla_host_t *qla4xxx_get_adapter_handle(uint16_t instance); >@@ -58,6 +58,7 @@ extern uint8_t qla4xxx_send_passthru0_io > * Defined in ql4_isr.c > */ > >+extern uint8_t qla4xxx_poll_and_ack_scsi_reset(scsi_qla_host_t *ha); > extern irqreturn_t qla4xxx_intr_handler(int, void *, struct pt_regs *); > extern void qla4xxx_interrupt_service_routine(scsi_qla_host_t *ha, uint32_t intr_status); > extern void __qla4xxx_suspend_lun(scsi_qla_host_t *ha, srb_t *srb, os_lun_t *lun_entry, uint16_t time, >diff -Naurp 5.01.02-d3/drivers/scsi/qla4xxx/ql4_init.c 5.01.02-d4/drivers/scsi/qla4xxx/ql4_init.c >--- 5.01.02-d3/drivers/scsi/qla4xxx/ql4_init.c 2007-12-10 15:16:03.000000000 -0800 >+++ 5.01.02-d4/drivers/scsi/qla4xxx/ql4_init.c 2008-01-25 12:45:19.000000000 -0800 >@@ -956,7 +956,7 @@ qla4xxx_init_local_data(scsi_qla_host_t > static uint8_t > qla4xxx_initialize_fw_cb(scsi_qla_host_t *ha) > { >- ADDRESS_CTRL_BLK *init_fw_cb; >+ ADDRESS_CTRL_BLK *init_fw_cb = NULL; > dma_addr_t init_fw_cb_dma; > uint32_t mbox_cmd[MBOX_REG_COUNT]; > uint32_t mbox_sts[MBOX_REG_COUNT]; >@@ -971,7 +971,12 @@ qla4xxx_initialize_fw_cb(scsi_qla_host_t > /* > * Determine if larger IFCB is supported > */ >- (void) qla4xxx_get_ifcb(ha, &mbox_cmd[0], &mbox_sts[0], 0); >+ if (qla4xxx_get_ifcb(ha, &mbox_cmd[0], &mbox_sts[0], 0) != QLA_SUCCESS) { >+ QL4PRINT(QLP2, printk("scsi%d: %s: get ifcb failed\n", >+ ha->host_no, __func__)); >+ LEAVE(__func__); >+ return QLA_ERROR; >+ } > if (mbox_sts[0] == MBOX_STS_COMMAND_PARAMETER_ERROR && > mbox_sts[4] > LEGACY_IFCB_SIZE) { > /* Supports larger ifcb size */ >@@ -1087,6 +1092,9 @@ qla4xxx_initialize_fw_cb(scsi_qla_host_t > ? ql4xkeepalive : le16_to_cpu(init_fw_cb->KeepAliveTimeout); > ha->discovery_wait = ql4xdiscoverywait; > >+ QL4PRINT(QLP7, printk("scsi%d: %s: Driver Version %s\n", >+ ha->host_no, __func__, QLA4XXX_DRIVER_VERSION)); >+ > if ((ha->acb_version == ACB_NOT_SUPPORTED) || IS_IPv4_ENABLED(ha)) { > /* --- IP v4 --- */ > IPv4Addr2Str(init_fw_cb->IPAddr, &ip_addr_str[0]); >@@ -1393,6 +1401,9 @@ qla4xxx_fw_ready ( scsi_qla_host_t *ha ) > ha->addl_fw_state, timeout_count)); > set_current_state(TASK_UNINTERRUPTIBLE); > schedule_timeout(1 * HZ); >+ >+ if (qla4xxx_poll_and_ack_scsi_reset(ha) == QLA_SUCCESS) >+ break; > } /* for */ > > if (timeout_count <= 0) { >@@ -1439,13 +1450,16 @@ qla4xxx_init_firmware(scsi_qla_host_t *h > return(status); > } > >- if (!qla4xxx_fw_ready(ha)) >+ if (!qla4xxx_fw_ready(ha)) { >+ LEAVE("qla4xxx_init_firmware"); > return(status); >+ } > > set_bit(AF_ONLINE, &ha->flags); >- LEAVE("qla4xxx_init_firmware"); > >- return(qla4xxx_get_firmware_status(ha)); >+ status = qla4xxx_get_firmware_status(ha); >+ LEAVE("qla4xxx_init_firmware"); >+ return(status); > } > > >@@ -2130,8 +2144,13 @@ qla4xxx_reinitialize_ddb_list(scsi_qla_h > > /* Update the device information for all devices. */ > list_for_each_entry_safe(ddb_entry, detemp, &ha->ddb_list, list_entry) { >- qla4xxx_update_ddb_entry(ha, ddb_entry, >- ddb_entry->fw_ddb_index); >+ if (qla4xxx_update_ddb_entry(ha, ddb_entry, >+ ddb_entry->fw_ddb_index) != QLA_SUCCESS) { >+ QL4PRINT(QLP2, printk("scsi%d: %s: update_ddb_entry failed\n", >+ ha->host_no, __func__)); >+ status = QLA_ERROR; >+ break; >+ } > if (ddb_entry->fw_ddb_device_state == DDB_DS_SESSION_ACTIVE) { > atomic_set(&ddb_entry->state, DEV_STATE_ONLINE); > qla4xxx_update_fcport(ha, ddb_entry->fcport); >@@ -2237,7 +2256,12 @@ qla4xxx_start_firmware(scsi_qla_host_t * > > ENTER("qla4xxx_start_firmware"); > >- ql4xxx_set_mac_number(ha); >+ if (qla4xxx_poll_and_ack_scsi_reset(ha) == QLA_SUCCESS) { >+ LEAVE(__func__); >+ return QLA_ERROR; >+ } >+ >+ ql4xxx_set_mac_number(ha); > > (void)qla4xxx_lock_drvr_wait(ha); > >@@ -2307,11 +2331,17 @@ qla4xxx_start_firmware(scsi_qla_host_t * > QL4PRINT(QLP3|QLP7, printk("scsi%d: %s: Soft Reset " > "failed!\n", ha->host_no, __func__)); > QL4XXX_UNLOCK_DRVR(ha); >+ LEAVE(__func__); > return QLA_ERROR; > } > > config_chip = 1; > >+ if (qla4xxx_poll_and_ack_scsi_reset(ha) == QLA_SUCCESS) { >+ LEAVE(__func__); >+ return QLA_ERROR; >+ } >+ > /* Reset clears the semaphore, so aquire again */ > (void)qla4xxx_lock_drvr_wait(ha); > } >@@ -2331,7 +2361,7 @@ qla4xxx_start_firmware(scsi_qla_host_t * > > spin_lock_irqsave(&ha->hardware_lock, flags); > extHwConfig.AsUINT32 = RD_NVRAM_WORD(ha, >- EEPROM_EXT_HW_CONF_OFFSET()); >+ EEPROM_EXT_HW_CONF_OFFSET()); > spin_unlock_irqrestore(&ha->hardware_lock, flags); > } > else { >@@ -2449,8 +2479,10 @@ qla4xxx_start_firmware(scsi_qla_host_t * > QL4XXX_UNLOCK_DRVR(ha); > > if (status == QLA_SUCCESS) { >- qla4xxx_get_fw_version(ha); >+ status = qla4xxx_get_fw_version(ha); >+ } > >+ if (status == QLA_SUCCESS) { > if (test_and_clear_bit(AF_GET_CRASH_RECORD, &ha->flags)) > qla4xxx_get_crash_record(ha); > } else { >@@ -2641,8 +2673,8 @@ qla4xxx_initialize_adapter(scsi_qla_host > */ > status = qla4xxx_initialize_ddb_list(ha); > if (status == QLA_ERROR) { >- printk("%s(%d) Error occurred during build ddb list\n", >- __func__, ha->host_no); >+ printk("scsi%d: %s Error occurred during build ddb list\n", >+ ha->host_no, __func__); > goto exit_init_hba; > } > >diff -Naurp 5.01.02-d3/drivers/scsi/qla4xxx/ql4_isr.c 5.01.02-d4/drivers/scsi/qla4xxx/ql4_isr.c >--- 5.01.02-d3/drivers/scsi/qla4xxx/ql4_isr.c 2007-12-14 14:04:47.000000000 -0800 >+++ 5.01.02-d4/drivers/scsi/qla4xxx/ql4_isr.c 2008-01-23 07:59:26.000000000 -0800 >@@ -1231,16 +1231,10 @@ qla4xxx_interrupt_service_routine(scsi_q > { > ENTER("qla4xxx_interrupt_service_routine"); > >- /* >- * Process response queue interrupt. >- */ > if (intr_status & CSR_SCSI_COMPLETION_INTR) { > qla4xxx_process_response_queue(ha); > } > >- /* >- * Process mailbox/asynch event interrupt. >- */ > if (intr_status & CSR_SCSI_PROCESSOR_INTR) { > uint32_t mbox_status = RD_REG_DWORD(&ha->reg->mailbox[0]); > qla4xxx_isr_decode_mailbox(ha, mbox_status); >@@ -1249,13 +1243,41 @@ qla4xxx_interrupt_service_routine(scsi_q > WRT_REG_DWORD(&ha->reg->ctrl_status, > SET_RMASK(CSR_SCSI_PROCESSOR_INTR)); > PCI_POSTING(&ha->reg->ctrl_status); >- > } > >- > LEAVE("qla4xxx_interrupt_service_routine"); > } > >+uint8_t >+qla4xxx_poll_and_ack_scsi_reset(scsi_qla_host_t *ha) >+{ >+ uint8_t status = QLA_ERROR; >+ unsigned long flags = 0; >+ >+ ENTER(__func__); >+ spin_lock_irqsave(&ha->hardware_lock, flags); >+ if (RD_REG_DWORD(&ha->reg->ctrl_status) & CSR_SCSI_RESET_INTR) { >+ QL4PRINT(QLP2, printk("scsi%d: Soft Reset requested by " >+ "Network function or RISC\n", ha->host_no)); >+ >+ clear_bit(AF_ONLINE, &ha->flags); >+ __qla4xxx_disable_intrs(ha); >+ >+ QL4PRINT(QLP2, printk("scsi%d: Clear SCSI Reset Interrupt\n", >+ ha->host_no)); >+ WRT_REG_DWORD(&ha->reg->ctrl_status, SET_RMASK(CSR_SCSI_RESET_INTR)); >+ PCI_POSTING(&ha->reg->ctrl_status); >+ >+ if (!ql4_mod_unload) >+ set_bit(DPC_RESET_HA_INTR, &ha->dpc_flags); >+ status = QLA_SUCCESS; >+ } >+ >+ spin_unlock_irqrestore(&ha->hardware_lock, flags); >+ LEAVE(__func__); >+ return (status); >+ } >+ > /************************************************************************** > * qla4xxx_intr_handler > * This routine handles the H/W interrupt >diff -Naurp 5.01.02-d3/drivers/scsi/qla4xxx/ql4_mbx.c 5.01.02-d4/drivers/scsi/qla4xxx/ql4_mbx.c >--- 5.01.02-d3/drivers/scsi/qla4xxx/ql4_mbx.c 2007-12-14 14:09:27.000000000 -0800 >+++ 5.01.02-d4/drivers/scsi/qla4xxx/ql4_mbx.c 2008-01-25 12:38:45.000000000 -0800 >@@ -204,7 +204,13 @@ qla4xxx_mailbox_command(scsi_qla_host_t > ha->mailbox_timeout_count++; > mbx_sts[0] = (-1); > >- set_bit(DPC_RESET_HA, &ha->dpc_flags); >+ /* >+ * If the mailbox timed out due to CSR_SCSI_RESET_INTR, >+ * then the adapter will simply reinitialize, otherwise, >+ * a full on adapter reset will be done. >+ */ >+ if (qla4xxx_poll_and_ack_scsi_reset(ha) == QLA_ERROR) >+ set_bit(DPC_RESET_HA, &ha->dpc_flags); > goto mbox_exit; > } > >@@ -512,6 +518,7 @@ qla4xxx_get_ifcb(scsi_qla_host_t *ha, ui > if (init_fw_cb_dma == 0 && > mbox_sts[0] == MBOX_STS_COMMAND_PARAMETER_ERROR) > { >+ /* Other valid info returned in mailbox status registers */ > LEAVE(__func__); > return (QLA_SUCCESS); > } >diff -Naurp 5.01.02-d3/drivers/scsi/qla4xxx/ql4_os.c 5.01.02-d4/drivers/scsi/qla4xxx/ql4_os.c >--- 5.01.02-d3/drivers/scsi/qla4xxx/ql4_os.c 2007-12-14 14:09:27.000000000 -0800 >+++ 5.01.02-d4/drivers/scsi/qla4xxx/ql4_os.c 2008-01-23 08:15:38.000000000 -0800 >@@ -149,6 +149,7 @@ int ql4_mod_unload = 0; > MODULE_AUTHOR("QLogic Corporation"); > MODULE_DESCRIPTION("QLogic ISP4XXX iSCSI Host Bus Adapter driver"); > MODULE_LICENSE("GPL"); >+MODULE_VERSION(QLA4XXX_DRIVER_VERSION); > > /* > * Proc info processing >@@ -283,7 +284,9 @@ qla4xxx_module_init(void) > int status; > > printk(KERN_INFO >- "QLogic iSCSI HBA Driver (%p)\n", qla4xxx_set_info); >+ "QLogic iSCSI HBA Driver (%p) v%s\n", >+ qla4xxx_set_info /* code start */, >+ QLA4XXX_DRIVER_VERSION); > > #if ISP_RESET_TEST > printk(KERN_INFO "qla4xxx: Adapter Reset Test Enabled! " >@@ -2945,13 +2948,18 @@ qla4xxx_do_dpc(void *data) > (test_bit(DPC_RESET_HA, &ha->dpc_flags))) > qla4xxx_recover_adapter(ha, PRESERVE_DDB_LIST); > >- if (test_and_clear_bit(DPC_RESET_HA_INTR, &ha->dpc_flags)) { >+ if (test_bit(DPC_RESET_HA_INTR, &ha->dpc_flags)) { > uint8_t wait_time = RESET_INTR_TOV; > > qla4xxx_flush_active_srbs(ha); > > while ((RD_REG_DWORD(&ha->reg->ctrl_status) & > (CSR_SOFT_RESET|CSR_FORCE_SOFT_RESET)) != 0) { >+ if (qla4xxx_poll_and_ack_scsi_reset(ha) >+ == QLA_SUCCESS) { >+ wait_time = RESET_INTR_TOV; >+ } >+ > if (--wait_time == 0) > break; > >@@ -2967,6 +2975,7 @@ qla4xxx_do_dpc(void *data) > } > else if (!qla4xxx_hba_going_away) { > set_bit(DPC_RESET_HA_INTR_COMPLETION, &ha->dpc_flags); >+ clear_bit(DPC_RESET_HA_INTR, &ha->dpc_flags); > } > } > >@@ -3392,15 +3401,16 @@ qla4xxx_soft_reset(scsi_qla_host_t *ha){ > msleep(1000); > } while ((--max_wait_time)); > >+ spin_lock_irqsave(&ha->hardware_lock, flags); >+ ctrl_status = RD_REG_DWORD(&ha->reg->ctrl_status); > if ((ctrl_status & CSR_NET_RESET_INTR) != 0) { > QL4PRINT(QLP2, > printk(KERN_WARNING "scsi%d: Network Reset Intr not cleared " > "by Network function, clearing it now!\n", ha->host_no)); >- spin_lock_irqsave(&ha->hardware_lock, flags); > WRT_REG_DWORD(&ha->reg->ctrl_status, SET_RMASK(CSR_NET_RESET_INTR)); > PCI_POSTING(&ha->reg->ctrl_status); >- spin_unlock_irqrestore(&ha->hardware_lock, flags); > } >+ spin_unlock_irqrestore(&ha->hardware_lock, flags); > > /* Wait until the firmware tells us the Soft Reset is done */ > max_wait_time = SOFT_RESET_TOV; >@@ -3519,7 +3529,7 @@ qla4xxx_cmd_wait(scsi_qla_host_t *ha){ > } > } /* End of While (wait_cnt) */ > >- QL4PRINT(QLP2,printk("(%d): %s: Done waiting on commands - array_index=%d\n", >+ QL4PRINT(QLP2,printk("scsi%d: %s: Done waiting on commands - array_index=%d\n", > ha->host_no, __func__, index)); > > LEAVE("qla4xxx_cmd_wait"); >@@ -3564,6 +3574,11 @@ qla4xxx_recover_adapter(scsi_qla_host_t > */ > status = qla4xxx_cmd_wait(ha); > >+ if (qla4xxx_poll_and_ack_scsi_reset(ha) == QLA_SUCCESS) { >+ status = QLA_ERROR; >+ goto exit_recover_adapter; >+ } >+ > qla4xxx_disable_intrs(ha); > > /* Flush any pending ddb changed AENs */ >@@ -3574,6 +3589,12 @@ qla4xxx_recover_adapter(scsi_qla_host_t > */ > if (status == QLA_SUCCESS) { > qla4xxx_flush_active_srbs(ha); >+ >+ if (qla4xxx_poll_and_ack_scsi_reset(ha) == QLA_SUCCESS) { >+ status = QLA_ERROR; >+ goto exit_recover_adapter; >+ } >+ > DEBUG2(printk( > "scsi%d: %s - Performing soft reset..\n", > ha->host_no,__func__)); >@@ -3644,11 +3665,17 @@ qla4xxx_recover_adapter(scsi_qla_host_t > clear_bit(DPC_RETRY_RESET_HA, &ha->dpc_flags); > } > >+exit_recover_adapter: >+ > ha->adapter_error_count++; > > if (status == QLA_SUCCESS) { > qla4xxx_enable_intrs(ha); >- DEBUG2(printk("scsi%d: recover adapter .. DONE\n", ha->host_no)); >+ DEBUG2(printk("scsi%d: recover adapter .. DONE (%lld)\n", >+ ha->host_no, (unsigned long long)ha->adapter_error_count)); >+ } else { >+ DEBUG2(printk("scsi%d: recover adapter .. FAILED (%lld)\n", >+ ha->host_no, (unsigned long long)ha->adapter_error_count)); > } > > LEAVE("qla4xxx_recover_adapter"); >diff -Naurp 5.01.02-d3/drivers/scsi/qla4xxx/ql4_version.h 5.01.02-d4/drivers/scsi/qla4xxx/ql4_version.h >--- 5.01.02-d3/drivers/scsi/qla4xxx/ql4_version.h 2007-12-10 15:18:15.000000000 -0800 >+++ 5.01.02-d4/drivers/scsi/qla4xxx/ql4_version.h 2008-01-23 08:17:30.000000000 -0800 >@@ -5,9 +5,9 @@ > * See LICENSE.qla4xxx for copyright and licensing details. > */ > >-#define QLA4XXX_DRIVER_VERSION "5.01.02-d3" >+#define QLA4XXX_DRIVER_VERSION "5.01.02-d4-RHEL4.7-00" > > #define QL4_DRIVER_MAJOR_VER 5 > #define QL4_DRIVER_MINOR_VER 1 > #define QL4_DRIVER_PATCH_VER 2 >-#define QL4_DRIVER_BETA_VER 3 >+#define QL4_DRIVER_BETA_VER 4
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 430313
: 293026