Mercurial > illumos > illumos-gate
changeset 11000:939a0e5586d1
6890270 Solaris gen2 driver: Inaccessible drives not removed after zone configuration
6889844 Deleting hot spare as first operation after reboot fails
6883972 mpt_sas driver is false positive detected by wsdiff
author | Ada <Ada.Feng@Sun.COM> |
---|---|
date | Mon, 09 Nov 2009 10:42:34 +0800 |
parents | 1e3c6bd245c1 |
children | 8bd1359d891b |
files | usr/src/uts/common/io/scsi/adapters/mpt_sas/mptsas.c |
diffstat | 1 files changed, 19 insertions(+), 7 deletions(-) [+] |
line wrap: on
line diff
--- a/usr/src/uts/common/io/scsi/adapters/mpt_sas/mptsas.c Sun Nov 08 10:11:47 2009 -0800 +++ b/usr/src/uts/common/io/scsi/adapters/mpt_sas/mptsas.c Mon Nov 09 10:42:34 2009 +0800 @@ -490,10 +490,7 @@ }; -#define MPTSAS_MOD_STRING "MPTSAS HBA Driver 00.00.00.18" -#define CDATE "MPTSAS was compiled on "__DATE__ -/* LINTED E_STATIC_UNUSED */ -static char *MPTWASCOMPILEDON = CDATE; +#define MPTSAS_MOD_STRING "MPTSAS HBA Driver 00.00.00.19" static struct modldrv modldrv = { &mod_driverops, /* Type of module. This one is a driver */ @@ -5740,6 +5737,12 @@ if (ptgt == NULL) { /* + * If a Phys Disk was deleted, RAID info needs to be + * updated to reflect the new topology. + */ + (void) mptsas_get_raid_info(mpt); + + /* * Get sas device page 0 by DevHandle to make sure if * SSP/SATA end device exist. */ @@ -6116,7 +6119,7 @@ uint8_t num_entries, expstatus, phy; uint8_t phystatus, physport, state, i; uint8_t start_phy_num, link_rate; - uint16_t dev_handle; + uint16_t dev_handle, reason_code; uint16_t enc_handle, expd_handle; char string[80], curr[80], prev[80]; mptsas_topo_change_list_t *topo_head = NULL; @@ -6219,13 +6222,22 @@ &sas_topo_change_list->PHY[i].PhyStatus); dev_handle = ddi_get16(mpt->m_acc_reply_frame_hdl, &sas_topo_change_list->PHY[i].AttachedDevHandle); - if (phystatus & MPI2_EVENT_SAS_TOPO_PHYSTATUS_VACANT) { + reason_code = phystatus & MPI2_EVENT_SAS_TOPO_RC_MASK; + /* + * Filter out processing of Phy Vacant Status unless + * the reason code is "Not Responding". Process all + * other combinations of Phy Status and Reason Codes. + */ + if ((phystatus & + MPI2_EVENT_SAS_TOPO_PHYSTATUS_VACANT) && + (reason_code != + MPI2_EVENT_SAS_TOPO_RC_TARG_NOT_RESPONDING)) { continue; } curr[0] = 0; prev[0] = 0; string[0] = 0; - switch (phystatus & MPI2_EVENT_SAS_TOPO_RC_MASK) { + switch (reason_code) { case MPI2_EVENT_SAS_TOPO_RC_TARG_ADDED: { NDBG20(("mptsas%d phy %d physical_port %d "