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 298907 Details for
Bug 437384
[QLogic/IBM 5.3 bug] EEH error on JS22 results in panic w/qla2xx 8.02.00-k5-rhel5.2-02 driver
[?]
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]
fix EEH
qla2xxx_rhel5.2_EEHfixes_patch16.txt (text/plain), 6.92 KB, created by
Marcus Barrow
on 2008-03-24 17:06:56 UTC
(
hide
)
Description:
fix EEH
Filename:
MIME Type:
Creator:
Marcus Barrow
Created:
2008-03-24 17:06:56 UTC
Size:
6.92 KB
patch
obsolete
> >BZ 437384 > > [rhel 5.2 bug] EEH error on JS22 results in panic w/qla2xx 8.02.00-k5-rhel5.2-02 driver > >qla2xxx: added following changes to fixes issues related PCI EEH. >- added 'error_state' check for pci device during I/O, interrupt, > and mailbox command handling. >- added fc_remote_port_delete() calls for the devices in case of > pci_channel_io_perm_failure so that scsi midlayer/transport could > better handle the unexpected shutdown. > >Patch ported from upstream and SLES 10. > >--- > drivers/scsi/qla2xxx/qla_inline.h | 8 +++++ > drivers/scsi/qla2xxx/qla_isr.c | 21 +++++++++++++ > drivers/scsi/qla2xxx/qla_mbx.c | 3 ++ > drivers/scsi/qla2xxx/qla_os.c | 57 ++++++++++++++++++++++++++++++++--- > drivers/scsi/qla2xxx/qla_version.h | 2 +- > 5 files changed, 85 insertions(+), 6 deletions(-) > >diff --git a/drivers/scsi/qla2xxx/qla_inline.h b/drivers/scsi/qla2xxx/qla_inline.h >index be80aa3..b05b719 100644 >--- a/drivers/scsi/qla2xxx/qla_inline.h >+++ b/drivers/scsi/qla2xxx/qla_inline.h >@@ -159,6 +159,14 @@ host_to_fcp_swap(uint8_t *fcp, uint32_t > return fcp; > } > >+/* Not present in RHEL5. */ >+static inline int pci_channel_offline(struct pci_dev *pdev); >+static inline int >+pci_channel_offline(struct pci_dev *pdev) >+{ >+ return (pdev->error_state != pci_channel_io_normal); >+} >+ > static inline int qla2x00_is_reserved_id(scsi_qla_host_t *, uint16_t); > static inline int > qla2x00_is_reserved_id(scsi_qla_host_t *ha, uint16_t loop_id) >diff --git a/drivers/scsi/qla2xxx/qla_isr.c b/drivers/scsi/qla2xxx/qla_isr.c >index 1d408d1..645e4d6 100644 >--- a/drivers/scsi/qla2xxx/qla_isr.c >+++ b/drivers/scsi/qla2xxx/qla_isr.c >@@ -50,6 +50,9 @@ qla2100_intr_handler(int irq, void *dev_ > > spin_lock_irqsave(&ha->hardware_lock, flags); > for (iter = 50; iter--; ) { >+ if (pci_channel_offline(ha->pdev)) >+ break; >+ > if ((RD_REG_WORD(®->istatus) & ISR_RISC_INT) == 0) > break; > >@@ -128,8 +131,14 @@ qla2300_intr_handler(int irq, void *dev_ > > spin_lock_irqsave(&ha->hardware_lock, flags); > for (iter = 50; iter--; ) { >+ if (pci_channel_offline(ha->pdev)) >+ break; >+ > stat = RD_REG_DWORD(®->u.isp2300.host_status); > if (stat & HSR_RISC_PAUSED) { >+ if (pci_channel_offline(ha->pdev)) >+ break; >+ > hccr = RD_REG_WORD(®->hccr); > if (hccr & (BIT_15 | BIT_13 | BIT_11 | BIT_8)) > qla_printk(KERN_INFO, ha, "Parity error -- " >@@ -1563,8 +1572,14 @@ qla24xx_intr_handler(int irq, void *dev_ > > spin_lock_irqsave(&ha->hardware_lock, flags); > for (iter = 50; iter--; ) { >+ if (pci_channel_offline(ha->pdev)) >+ break; >+ > stat = RD_REG_DWORD(®->host_status); > if (stat & HSRX_RISC_PAUSED) { >+ if (pci_channel_offline(ha->pdev)) >+ break; >+ > hccr = RD_REG_DWORD(®->hccr); > > qla_printk(KERN_INFO, ha, "RISC paused -- HCCR=%x, " >@@ -1698,8 +1713,14 @@ qla24xx_msix_default(int irq, void *dev_ > > spin_lock_irqsave(&ha->hardware_lock, flags); > do { >+ if (pci_channel_offline(ha->pdev)) >+ break; >+ > stat = RD_REG_DWORD(®->host_status); > if (stat & HSRX_RISC_PAUSED) { >+ if (pci_channel_offline(ha->pdev)) >+ break; >+ > hccr = RD_REG_DWORD(®->hccr); > > qla_printk(KERN_INFO, ha, "RISC paused -- HCCR=%x, " >diff --git a/drivers/scsi/qla2xxx/qla_mbx.c b/drivers/scsi/qla2xxx/qla_mbx.c >index eb70604..bc01eec 100644 >--- a/drivers/scsi/qla2xxx/qla_mbx.c >+++ b/drivers/scsi/qla2xxx/qla_mbx.c >@@ -58,6 +58,9 @@ qla2x00_mailbox_command(scsi_qla_host_t > unsigned long wait_time; > scsi_qla_host_t *ha = to_qla_parent(pvha); > >+ if (pci_channel_offline(ha->pdev)) >+ return QLA_FUNCTION_FAILED; >+ > reg = ha->iobase; > io_lock_on = ha->flags.init_done; > >diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c >index 30d8383..990e6dc 100644 >--- a/drivers/scsi/qla2xxx/qla_os.c >+++ b/drivers/scsi/qla2xxx/qla_os.c >@@ -415,6 +415,11 @@ qla2x00_queuecommand(struct scsi_cmnd *c > srb_t *sp; > int rval; > >+ if (pci_channel_offline(ha->pdev)) { >+ cmd->result = DID_REQUEUE << 16; >+ goto qc_fail_command; >+ } >+ > rval = fc_remote_port_chkready(rport); > if (rval) { > cmd->result = rval; >@@ -477,6 +482,11 @@ qla24xx_queuecommand(struct scsi_cmnd *c > srb_t *sp; > int rval; > >+ if (pci_channel_offline(ha->pdev)) { >+ cmd->result = DID_REQUEUE << 16; >+ goto qc24_fail_command; >+ } >+ > rval = fc_remote_port_chkready(rport); > if (rval) { > cmd->result = rval; >@@ -1151,6 +1161,27 @@ qla2x00_device_reset(scsi_qla_host_t *ha > return ha->isp_ops->abort_target(reset_fcport); > } > >+void >+qla2x00_abort_all_cmds(scsi_qla_host_t *ha, int res) >+{ >+ int cnt; >+ unsigned long flags; >+ srb_t *sp; >+ >+ spin_lock_irqsave(&ha->hardware_lock, flags); >+ for (cnt = 1; cnt < MAX_OUTSTANDING_COMMANDS; cnt++) { >+ sp = ha->outstanding_cmds[cnt]; >+ if (sp) { >+ ha->outstanding_cmds[cnt] = NULL; >+ sp->flags = 0; >+ sp->cmd->result = res; >+ sp->cmd->host_scribble = (unsigned char *)NULL; >+ qla2x00_sp_compl(ha, sp); >+ } >+ } >+ spin_unlock_irqrestore(&ha->hardware_lock, flags); >+} >+ > static int > qla2xxx_slave_alloc(struct scsi_device *sdev) > { >@@ -2525,8 +2556,7 @@ qla2x00_do_dpc(void *data) > } else { > fcport->login_retry = 0; > } >- if (fcport->login_retry == 0 && >- status != QLA_SUCCESS) >+ if (fcport->login_retry == 0 && status != QLA_SUCCESS) > fcport->loop_id = FC_NO_LOOP_ID; > } > if (test_bit(LOOP_RESYNC_NEEDED, &ha->dpc_flags)) >@@ -2891,13 +2921,30 @@ qla2x00_release_firmware(void) > static pci_ers_result_t > qla2xxx_pci_error_detected(struct pci_dev *pdev, pci_channel_state_t state) > { >+ scsi_qla_host_t *ha = pci_get_drvdata(pdev); >+ unsigned long flags; >+ fc_port_t *fcport; >+ struct fc_rport *rport; >+ > switch (state) { >- case pci_channel_io_normal: >- return PCI_ERS_RESULT_CAN_RECOVER; > case pci_channel_io_frozen: > pci_disable_device(pdev); > return PCI_ERS_RESULT_NEED_RESET; > case pci_channel_io_perm_failure: >+ qla2x00_abort_all_cmds(ha, DID_NO_CONNECT << 16); >+ >+ list_for_each_entry(fcport, &ha->fcports, list) { >+ if (!fcport->rport) >+ continue; >+ >+ rport = fcport->rport; >+ spin_lock_irqsave(&fcport->rport_lock, flags); >+ fcport->rport = NULL; >+ *(fc_port_t **)rport->dd_data = NULL; >+ spin_unlock_irqrestore(&fcport->rport_lock, flags); >+ fc_remote_port_delete(rport); >+ } >+ > qla2x00_remove_one(pdev); > return PCI_ERS_RESULT_DISCONNECT; > } >@@ -2943,7 +2990,7 @@ qla2xxx_pci_mmio_enabled(struct pci_dev > static pci_ers_result_t > qla2xxx_pci_slot_reset(struct pci_dev *pdev) > { >- pci_ers_result_t ret = PCI_ERS_RESULT_DISCONNECT; >+ pci_ers_result_t ret = PCI_ERS_RESULT_NEED_RESET; > scsi_qla_host_t *ha = pci_get_drvdata(pdev); > > if (pci_enable_device(pdev)) { >diff --git a/drivers/scsi/qla2xxx/qla_version.h b/drivers/scsi/qla2xxx/qla_version.h >index 6363dc3..02b900e 100644 >--- a/drivers/scsi/qla2xxx/qla_version.h >+++ b/drivers/scsi/qla2xxx/qla_version.h >@@ -7,7 +7,7 @@ > /* > * Driver version > */ >-#define QLA2XXX_VERSION "8.02.00-k5-rhel5.2-04" >+#define QLA2XXX_VERSION "8.02.00-k5-rhel5.2-05" > > #define QLA_DRIVER_MAJOR_VER 8 > #define QLA_DRIVER_MINOR_VER 1 >-- >1.4.4.1 >
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 437384
: 298907 |
299058
|
299284