svn commit: r283990 - in stable/10/sys/dev/mpr: . mpi
Stephen McConnell
slm at FreeBSD.org
Thu Jun 4 16:27:24 UTC 2015
Author: slm
Date: Thu Jun 4 16:27:18 2015
New Revision: 283990
URL: https://svnweb.freebsd.org/changeset/base/283990
Log:
MFC: r283661
- Updated all files with 2015 Avago copyright, and updated LSI's copyright
dates.
- Changed all of the PCI device strings from LSI to Avago Technologies (LSI).
- Added a sysctl variable to control how StartStopUnit behavior works. User can
select to spin down disks based on if disk is SSD or HDD.
- Inquiry data is required to tell if a disk will support SSU at shutdown or
not. Due to the addition of mprssas_async, which gets Advanced Info but not
Inquiry data, the setting of supports_SSU was moved to the
mprsas_scsiio_complete function, which snoops for any Inquiry commands. And,
since disks are shutdown as a target and not a LUN, this process was
simplified by basing it on targets and not LUNs.
- Added a sysctl variable that sets the amount of time to retry after sending a
failed SATA ID command. This helps with some bad disks and large disks that
require a lot of time to spin up. Part of this change was to add a callout to
handle timeouts with the SATA ID command. The callout function is called
mprsas_ata_id_timeout(). (Fixes PR 191348)
- Changed the way resets work by allowing I/O to continue to devices that are
not currently under a reset condition. This uses devq's instead of simq's and
makes use of the MPSSAS_TARGET_INRESET flag. This change also adds a function
called mprsas_prepare_tm().
- Some changes were made to reduce code duplication when getting a SAS address
for a SATA disk.
- Fixed some formatting and whitespace.
- Bump version of mpr driver to 9.255.01.00-fbsd
PR: 191348
Modified:
stable/10/sys/dev/mpr/mpi/mpi2.h
stable/10/sys/dev/mpr/mpi/mpi2_cnfg.h
stable/10/sys/dev/mpr/mpi/mpi2_hbd.h
stable/10/sys/dev/mpr/mpi/mpi2_history.txt
stable/10/sys/dev/mpr/mpi/mpi2_init.h
stable/10/sys/dev/mpr/mpi/mpi2_ioc.h
stable/10/sys/dev/mpr/mpi/mpi2_ra.h
stable/10/sys/dev/mpr/mpi/mpi2_raid.h
stable/10/sys/dev/mpr/mpi/mpi2_sas.h
stable/10/sys/dev/mpr/mpi/mpi2_targ.h
stable/10/sys/dev/mpr/mpi/mpi2_tool.h
stable/10/sys/dev/mpr/mpi/mpi2_type.h
stable/10/sys/dev/mpr/mpr.c
stable/10/sys/dev/mpr/mpr_config.c
stable/10/sys/dev/mpr/mpr_ioctl.h
stable/10/sys/dev/mpr/mpr_mapping.c
stable/10/sys/dev/mpr/mpr_mapping.h
stable/10/sys/dev/mpr/mpr_pci.c
stable/10/sys/dev/mpr/mpr_sas.c
stable/10/sys/dev/mpr/mpr_sas.h
stable/10/sys/dev/mpr/mpr_sas_lsi.c
stable/10/sys/dev/mpr/mpr_user.c
stable/10/sys/dev/mpr/mprvar.h
Directory Properties:
stable/10/ (props changed)
Modified: stable/10/sys/dev/mpr/mpi/mpi2.h
==============================================================================
--- stable/10/sys/dev/mpr/mpi/mpi2.h Thu Jun 4 15:02:05 2015 (r283989)
+++ stable/10/sys/dev/mpr/mpi/mpi2.h Thu Jun 4 16:27:18 2015 (r283990)
@@ -1,5 +1,6 @@
/*-
- * Copyright (c) 2013 LSI Corp.
+ * Copyright (c) 2012-2015 LSI Corp.
+ * Copyright (c) 2013-2015 Avago Technologies
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -26,13 +27,14 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * LSI MPT-Fusion Host Adapter FreeBSD
+ * Avago Technologies (LSI) MPT-Fusion Host Adapter FreeBSD
*
* $FreeBSD$
*/
/*
- * Copyright (c) 2000-2013 LSI Corporation.
+ * Copyright (c) 2000-2015 LSI Corporation.
+ * Copyright (c) 2013-2015 Avago Technologies
*
*
* Name: mpi2.h
Modified: stable/10/sys/dev/mpr/mpi/mpi2_cnfg.h
==============================================================================
--- stable/10/sys/dev/mpr/mpi/mpi2_cnfg.h Thu Jun 4 15:02:05 2015 (r283989)
+++ stable/10/sys/dev/mpr/mpi/mpi2_cnfg.h Thu Jun 4 16:27:18 2015 (r283990)
@@ -1,5 +1,6 @@
/*-
- * Copyright (c) 2013 LSI Corp.
+ * Copyright (c) 2012-2015 LSI Corp.
+ * Copyright (c) 2013-2015 Avago Technologies
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -26,13 +27,14 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * LSI MPT-Fusion Host Adapter FreeBSD
+ * Avago Technologies (LSI) MPT-Fusion Host Adapter FreeBSD
*
* $FreeBSD$
*/
/*
- * Copyright (c) 2000-2013 LSI Corporation.
+ * Copyright (c) 2000-2015 LSI Corporation.
+ * Copyright (c) 2013-2015 Avago Technologies
*
*
* Name: mpi2_cnfg.h
Modified: stable/10/sys/dev/mpr/mpi/mpi2_hbd.h
==============================================================================
--- stable/10/sys/dev/mpr/mpi/mpi2_hbd.h Thu Jun 4 15:02:05 2015 (r283989)
+++ stable/10/sys/dev/mpr/mpi/mpi2_hbd.h Thu Jun 4 16:27:18 2015 (r283990)
@@ -1,5 +1,6 @@
/*-
- * Copyright (c) 2013 LSI Corp.
+ * Copyright (c) 2012-2015 LSI Corp.
+ * Copyright (c) 2013-2015 Avago Technologies
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -26,13 +27,14 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * LSI MPT-Fusion Host Adapter FreeBSD
+ * Avago Technologies (LSI) MPT-Fusion Host Adapter FreeBSD
*
* $FreeBSD$
*/
/*
- * Copyright (c) 2009-2011 LSI Corporation.
+ * Copyright (c) 2009-2015 LSI Corporation.
+ * Copyright (c) 2013-2015 Avago Technologies
*
*
* Name: mpi2_hbd.h
Modified: stable/10/sys/dev/mpr/mpi/mpi2_history.txt
==============================================================================
--- stable/10/sys/dev/mpr/mpi/mpi2_history.txt Thu Jun 4 15:02:05 2015 (r283989)
+++ stable/10/sys/dev/mpr/mpi/mpi2_history.txt Thu Jun 4 16:27:18 2015 (r283990)
@@ -1,5 +1,6 @@
/*-
- * Copyright (c) 2013 LSI Corp.
+ * Copyright (c) 2012-2015 LSI Corp.
+ * Copyright (c) 2013-2015 Avago Technologies
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -26,7 +27,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * LSI MPT-Fusion Host Adapter FreeBSD
+ * Avago Technologies (LSI) MPT-Fusion Host Adapter FreeBSD
*
* $FreeBSD$
*/
@@ -35,7 +36,8 @@
Fusion-MPT MPI 2.0 / 2.5 Header File Change History
==============================
- Copyright (c) 2000-2013 LSI Corporation.
+ Copyright (c) 2000-2015 LSI Corporation.
+ Copyright (c) 2013-2015 Avago Technologies
---------------------------------------
Header Set Release Version: 02.00.33
Modified: stable/10/sys/dev/mpr/mpi/mpi2_init.h
==============================================================================
--- stable/10/sys/dev/mpr/mpi/mpi2_init.h Thu Jun 4 15:02:05 2015 (r283989)
+++ stable/10/sys/dev/mpr/mpi/mpi2_init.h Thu Jun 4 16:27:18 2015 (r283990)
@@ -1,5 +1,6 @@
/*-
- * Copyright (c) 2013 LSI Corp.
+ * Copyright (c) 2012-2015 LSI Corp.
+ * Copyright (c) 2013-2015 Avago Technologies
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -26,13 +27,14 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * LSI MPT-Fusion Host Adapter FreeBSD
+ * Avago Technologies (LSI) MPT-Fusion Host Adapter FreeBSD
*
* $FreeBSD$
*/
/*
- * Copyright (c) 2000-2013 LSI Corporation.
+ * Copyright (c) 2000-2015 LSI Corporation.
+ * Copyright (c) 2013-2015 Avago Technologies
*
*
* Name: mpi2_init.h
Modified: stable/10/sys/dev/mpr/mpi/mpi2_ioc.h
==============================================================================
--- stable/10/sys/dev/mpr/mpi/mpi2_ioc.h Thu Jun 4 15:02:05 2015 (r283989)
+++ stable/10/sys/dev/mpr/mpi/mpi2_ioc.h Thu Jun 4 16:27:18 2015 (r283990)
@@ -1,5 +1,6 @@
/*-
- * Copyright (c) 2013 LSI Corp.
+ * Copyright (c) 2012-2015 LSI Corp.
+ * Copyright (c) 2013-2015 Avago Technologies
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -26,13 +27,14 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * LSI MPT-Fusion Host Adapter FreeBSD
+ * Avago Technologies (LSI) MPT-Fusion Host Adapter FreeBSD
*
* $FreeBSD$
*/
/*
- * Copyright (c) 2000-2013 LSI Corporation.
+ * Copyright (c) 2000-2015 LSI Corporation.
+ * Copyright (c) 2013-2015 Avago Technologies
*
*
* Name: mpi2_ioc.h
Modified: stable/10/sys/dev/mpr/mpi/mpi2_ra.h
==============================================================================
--- stable/10/sys/dev/mpr/mpi/mpi2_ra.h Thu Jun 4 15:02:05 2015 (r283989)
+++ stable/10/sys/dev/mpr/mpi/mpi2_ra.h Thu Jun 4 16:27:18 2015 (r283990)
@@ -1,5 +1,6 @@
/*-
- * Copyright (c) 2013 LSI Corp.
+ * Copyright (c) 2012-2015 LSI Corp.
+ * Copyright (c) 2013-2015 Avago Technologies
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -26,13 +27,14 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * LSI MPT-Fusion Host Adapter FreeBSD
+ * Avago Technologies (LSI) MPT-Fusion Host Adapter FreeBSD
*
* $FreeBSD$
*/
/*
- * Copyright (c) 2009 LSI Corporation.
+ * Copyright (c) 2012-2015 LSI Corporation.
+ * Copyright (c) 2013-2015 Avago Technologies
*
*
* Name: mpi2_ra.h
Modified: stable/10/sys/dev/mpr/mpi/mpi2_raid.h
==============================================================================
--- stable/10/sys/dev/mpr/mpi/mpi2_raid.h Thu Jun 4 15:02:05 2015 (r283989)
+++ stable/10/sys/dev/mpr/mpi/mpi2_raid.h Thu Jun 4 16:27:18 2015 (r283990)
@@ -1,5 +1,6 @@
/*-
- * Copyright (c) 2013 LSI Corp.
+ * Copyright (c) 2012-2015 LSI Corp.
+ * Copyright (c) 2013-2015 Avago Technologies
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -26,13 +27,14 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * LSI MPT-Fusion Host Adapter FreeBSD
+ * Avago Technologies (LSI) MPT-Fusion Host Adapter FreeBSD
*
* $FreeBSD$
*/
/*
- * Copyright (c) 2000-2013 LSI Corporation.
+ * Copyright (c) 2000-2015 LSI Corporation.
+ * Copyright (c) 2013-2015 Avago Technologies
*
*
* Name: mpi2_raid.h
Modified: stable/10/sys/dev/mpr/mpi/mpi2_sas.h
==============================================================================
--- stable/10/sys/dev/mpr/mpi/mpi2_sas.h Thu Jun 4 15:02:05 2015 (r283989)
+++ stable/10/sys/dev/mpr/mpi/mpi2_sas.h Thu Jun 4 16:27:18 2015 (r283990)
@@ -1,5 +1,6 @@
/*-
- * Copyright (c) 2013 LSI Corp.
+ * Copyright (c) 2012-2015 LSI Corp.
+ * Copyright (c) 2013-2015 Avago Technologies
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -26,13 +27,14 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * LSI MPT-Fusion Host Adapter FreeBSD
+ * Avago Technologies (LSI) MPT-Fusion Host Adapter FreeBSD
*
* $FreeBSD$
*/
/*
- * Copyright (c) 2000-2013 LSI Corporation.
+ * Copyright (c) 2000-2015 LSI Corporation.
+ * Copyright (c) 2013-2015 Avago Technologies
*
*
* Name: mpi2_sas.h
Modified: stable/10/sys/dev/mpr/mpi/mpi2_targ.h
==============================================================================
--- stable/10/sys/dev/mpr/mpi/mpi2_targ.h Thu Jun 4 15:02:05 2015 (r283989)
+++ stable/10/sys/dev/mpr/mpi/mpi2_targ.h Thu Jun 4 16:27:18 2015 (r283990)
@@ -1,5 +1,6 @@
/*-
- * Copyright (c) 2013 LSI Corp.
+ * Copyright (c) 2012-2015 LSI Corp.
+ * Copyright (c) 2013-2015 Avago Technologies
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -26,13 +27,14 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * LSI MPT-Fusion Host Adapter FreeBSD
+ * Avago Technologies (LSI) MPT-Fusion Host Adapter FreeBSD
*
* $FreeBSD$
*/
/*
- * Copyright (c) 2000-2012 LSI Corporation.
+ * Copyright (c) 2000-2015 LSI Corporation.
+ * Copyright (c) 2013-2015 Avago Technologies
*
*
* Name: mpi2_targ.h
Modified: stable/10/sys/dev/mpr/mpi/mpi2_tool.h
==============================================================================
--- stable/10/sys/dev/mpr/mpi/mpi2_tool.h Thu Jun 4 15:02:05 2015 (r283989)
+++ stable/10/sys/dev/mpr/mpi/mpi2_tool.h Thu Jun 4 16:27:18 2015 (r283990)
@@ -1,5 +1,6 @@
/*-
- * Copyright (c) 2013 LSI Corp.
+ * Copyright (c) 2012-2015 LSI Corp.
+ * Copyright (c) 2013-2015 Avago Technologies
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -26,13 +27,14 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * LSI MPT-Fusion Host Adapter FreeBSD
+ * Avago Technologies (LSI) MPT-Fusion Host Adapter FreeBSD
*
* $FreeBSD$
*/
/*
- * Copyright (c) 2000-2013 LSI Corporation.
+ * Copyright (c) 2000-2015 LSI Corporation.
+ * Copyright (c) 2013-2015 Avago Technologies
*
*
* Name: mpi2_tool.h
Modified: stable/10/sys/dev/mpr/mpi/mpi2_type.h
==============================================================================
--- stable/10/sys/dev/mpr/mpi/mpi2_type.h Thu Jun 4 15:02:05 2015 (r283989)
+++ stable/10/sys/dev/mpr/mpi/mpi2_type.h Thu Jun 4 16:27:18 2015 (r283990)
@@ -1,5 +1,6 @@
/*-
- * Copyright (c) 2013 LSI Corp.
+ * Copyright (c) 2012-2015 LSI Corp.
+ * Copyright (c) 2013-2015 Avago Technologies
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -26,13 +27,14 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * LSI MPT-Fusion Host Adapter FreeBSD
+ * Avago Technologies (LSI) MPT-Fusion Host Adapter FreeBSD
*
* $FreeBSD$
*/
/*
- * Copyright (c) 2000-2007 LSI Corporation.
+ * Copyright (c) 2000-2015 LSI Corporation.
+ * Copyright (c) 2013-2015 Avago Technologies
*
*
* Name: mpi2_type.h
Modified: stable/10/sys/dev/mpr/mpr.c
==============================================================================
--- stable/10/sys/dev/mpr/mpr.c Thu Jun 4 15:02:05 2015 (r283989)
+++ stable/10/sys/dev/mpr/mpr.c Thu Jun 4 16:27:18 2015 (r283990)
@@ -1,6 +1,7 @@
/*-
* Copyright (c) 2009 Yahoo! Inc.
- * Copyright (c) 2012-2014 LSI Corp.
+ * Copyright (c) 2011-2015 LSI Corp.
+ * Copyright (c) 2013-2015 Avago Technologies
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -24,12 +25,14 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
+ * Avago Technologies (LSI) MPT-Fusion Host Adapter FreeBSD
+ *
*/
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
-/* Communications core for LSI MPT2 */
+/* Communications core for Avago Technologies (LSI) MPT3 */
/* TODO Move headers to mprvar */
#include <sys/types.h>
@@ -72,7 +75,6 @@ __FBSDID("$FreeBSD$");
#include <dev/mpr/mpr_ioctl.h>
#include <dev/mpr/mprvar.h>
#include <dev/mpr/mpr_table.h>
-#include <dev/mpr/mpr_sas.h>
static int mpr_diag_reset(struct mpr_softc *sc, int sleep_flag);
static int mpr_init_queues(struct mpr_softc *sc);
@@ -352,11 +354,9 @@ mpr_transition_operational(struct mpr_so
static int
mpr_iocfacts_allocate(struct mpr_softc *sc, uint8_t attaching)
{
- int error, i;
+ int error;
Mpi2IOCFactsReply_t saved_facts;
uint8_t saved_mode, reallocating;
- struct mprsas_lun *lun, *lun_tmp;
- struct mprsas_target *targ;
mpr_dprint(sc, MPR_TRACE, "%s\n", __func__);
@@ -513,27 +513,7 @@ mpr_iocfacts_allocate(struct mpr_softc *
*/
if (reallocating) {
mpr_iocfacts_free(sc);
-
- /*
- * The number of targets is based on IOC Facts, so free all of
- * the allocated LUNs for each target and then the target buffer
- * itself.
- */
- for (i=0; i< saved_facts.MaxTargets; i++) {
- targ = &sc->sassc->targets[i];
- SLIST_FOREACH_SAFE(lun, &targ->luns, lun_link,
- lun_tmp) {
- free(lun, M_MPR);
- }
- }
- free(sc->sassc->targets, M_MPR);
-
- sc->sassc->targets = malloc(sizeof(struct mprsas_target) *
- sc->facts->MaxTargets, M_MPR, M_WAITOK|M_ZERO);
- if (!sc->sassc->targets) {
- panic("%s failed to alloc targets with error %d\n",
- __func__, ENOMEM);
- }
+ mprsas_realloc_targets(sc, saved_facts.MaxTargets);
}
/*
@@ -775,7 +755,7 @@ mpr_reinit(struct mpr_softc *sc)
/* the end of discovery will release the simq, so we're done. */
mpr_dprint(sc, MPR_INFO, "%s finished sc %p post %u free %u\n",
__func__, sc, sc->replypostindex, sc->replyfreeindex);
- mprsas_release_simq_reinit(sassc);
+ mprsas_release_simq_reinit(sassc);
return 0;
}
@@ -816,7 +796,8 @@ mpr_wait_db_ack(struct mpr_softc *sc, in
* 0.5 milisecond
*/
if (mtx_owned(&sc->mpr_mtx) && sleep_flag == CAN_SLEEP)
- msleep(&sc->msleep_fake_chan, &sc->mpr_mtx, 0, "mprdba", hz/1000);
+ msleep(&sc->msleep_fake_chan, &sc->mpr_mtx, 0, "mprdba",
+ hz/1000);
else if (sleep_flag == CAN_SLEEP)
pause("mprdba", hz/1000);
else
@@ -982,7 +963,7 @@ mpr_enqueue_request(struct mpr_softc *sc
reply_descriptor rd;
MPR_FUNCTRACE(sc);
- mpr_dprint(sc, MPR_TRACE, "%s SMID %u cm %p ccb %p\n", __func__,
+ mpr_dprint(sc, MPR_TRACE, "SMID %u cm %p ccb %p\n",
cm->cm_desc.Default.SMID, cm, cm->cm_ccb);
if (sc->mpr_flags & MPR_FLAGS_ATTACH_DONE && !(sc->mpr_flags &
@@ -1372,6 +1353,8 @@ mpr_get_tunables(struct mpr_softc *sc)
sc->disable_msix = 0;
sc->disable_msi = 0;
sc->max_chains = MPR_CHAIN_FRAMES;
+ sc->enable_ssu = MPR_SSU_ENABLE_SSD_DISABLE_HDD;
+ sc->spinup_wait_time = DEFAULT_SPINUP_WAIT;
/*
* Grab the global variables.
@@ -1380,6 +1363,8 @@ mpr_get_tunables(struct mpr_softc *sc)
TUNABLE_INT_FETCH("hw.mpr.disable_msix", &sc->disable_msix);
TUNABLE_INT_FETCH("hw.mpr.disable_msi", &sc->disable_msi);
TUNABLE_INT_FETCH("hw.mpr.max_chains", &sc->max_chains);
+ TUNABLE_INT_FETCH("hw.mpr.enable_ssu", &sc->enable_ssu);
+ TUNABLE_INT_FETCH("hw.mpr.spinup_wait_time", &sc->spinup_wait_time);
/* Grab the unit-instance variables */
snprintf(tmpstr, sizeof(tmpstr), "dev.mpr.%d.debug_level",
@@ -1402,6 +1387,14 @@ mpr_get_tunables(struct mpr_softc *sc)
snprintf(tmpstr, sizeof(tmpstr), "dev.mpr.%d.exclude_ids",
device_get_unit(sc->mpr_dev));
TUNABLE_STR_FETCH(tmpstr, sc->exclude_ids, sizeof(sc->exclude_ids));
+
+ snprintf(tmpstr, sizeof(tmpstr), "dev.mpr.%d.enable_ssu",
+ device_get_unit(sc->mpr_dev));
+ TUNABLE_INT_FETCH(tmpstr, &sc->enable_ssu);
+
+ snprintf(tmpstr, sizeof(tmpstr), "dev.mpr.%d.spinup_wait_time",
+ device_get_unit(sc->mpr_dev));
+ TUNABLE_INT_FETCH(tmpstr, &sc->spinup_wait_time);
}
static void
@@ -1474,11 +1467,20 @@ mpr_setup_sysctl(struct mpr_softc *sc)
OID_AUTO, "max_chains", CTLFLAG_RD,
&sc->max_chains, 0,"maximum chain frames that will be allocated");
+ SYSCTL_ADD_INT(sysctl_ctx, SYSCTL_CHILDREN(sysctl_tree),
+ OID_AUTO, "enable_ssu", CTLFLAG_RW, &sc->enable_ssu, 0,
+ "enable SSU to SATA SSD/HDD at shutdown");
+
#if __FreeBSD_version >= 900030
SYSCTL_ADD_UQUAD(sysctl_ctx, SYSCTL_CHILDREN(sysctl_tree),
OID_AUTO, "chain_alloc_fail", CTLFLAG_RD,
&sc->chain_alloc_fail, "chain allocation failures");
#endif //FreeBSD_version >= 900030
+
+ SYSCTL_ADD_INT(sysctl_ctx, SYSCTL_CHILDREN(sysctl_tree),
+ OID_AUTO, "spinup_wait_time", CTLFLAG_RD,
+ &sc->spinup_wait_time, DEFAULT_SPINUP_WAIT, "seconds to wait for "
+ "spinup after SATA ID error");
}
int
@@ -2096,7 +2098,7 @@ mpr_update_events(struct mpr_softc *sc,
(reply->IOCStatus & MPI2_IOCSTATUS_MASK) != MPI2_IOCSTATUS_SUCCESS)
error = ENXIO;
- if(reply)
+ if (reply)
mpr_print_event(sc, reply);
mpr_dprint(sc, MPR_TRACE, "%s finished error %d\n", __func__, error);
@@ -2163,8 +2165,8 @@ mpr_deregister_events(struct mpr_softc *
* Add a chain element as the next SGE for the specified command.
* Reset cm_sge and cm_sgesize to indicate all the available space. Chains are
* only required for IEEE commands. Therefore there is no code for commands
- * that have the MPR_CM_FLAGS_SGE_SIMPLE flag set (and those commands shouldn't
- * be requesting chains).
+ * that have the MPR_CM_FLAGS_SGE_SIMPLE flag set (and those commands
+ * shouldn't be requesting chains).
*/
static int
mpr_add_chain(struct mpr_command *cm, int segsleft)
@@ -2246,9 +2248,9 @@ mpr_add_chain(struct mpr_command *cm, in
/*
* Add one scatter-gather element to the scatter-gather list for a command.
- * Maintain cm_sglsize and cm_sge as the remaining size and pointer to the next
- * SGE to fill in, respectively. In Gen3, the MPI SGL does not have a chain,
- * so don't consider any chain additions.
+ * Maintain cm_sglsize and cm_sge as the remaining size and pointer to the
+ * next SGE to fill in, respectively. In Gen3, the MPI SGL does not have a
+ * chain, so don't consider any chain additions.
*/
int
mpr_push_sge(struct mpr_command *cm, MPI2_SGE_SIMPLE64 *sge, size_t len,
@@ -2660,7 +2662,7 @@ mpr_request_polled(struct mpr_softc *sc,
}
}
- if(error) {
+ if (error) {
mpr_dprint(sc, MPR_FAULT, "Calling Reinit from %s\n", __func__);
rc = mpr_reinit(sc);
mpr_dprint(sc, MPR_FAULT, "Reinit %s\n", (rc == 0) ?
@@ -2717,9 +2719,12 @@ mpr_read_config_page(struct mpr_softc *s
cm->cm_data = params->buffer;
cm->cm_length = params->length;
- cm->cm_sge = &req->PageBufferSGE;
- cm->cm_sglsize = sizeof(MPI2_SGE_IO_UNION);
- cm->cm_flags = MPR_CM_FLAGS_SGE_SIMPLE | MPR_CM_FLAGS_DATAIN;
+ if (cm->cm_data != NULL) {
+ cm->cm_sge = &req->PageBufferSGE;
+ cm->cm_sglsize = sizeof(MPI2_SGE_IO_UNION);
+ cm->cm_flags = MPR_CM_FLAGS_SGE_SIMPLE | MPR_CM_FLAGS_DATAIN;
+ } else
+ cm->cm_sge = NULL;
cm->cm_desc.Default.RequestFlags = MPI2_REQ_DESCRIPT_FLAGS_DEFAULT_TYPE;
cm->cm_complete_data = params;
@@ -2776,9 +2781,12 @@ mpr_config_complete(struct mpr_softc *sc
goto done;
}
params->status = reply->IOCStatus;
- if (params->hdr.Ext.ExtPageType != 0) {
+ if (params->hdr.Struct.PageType == MPI2_CONFIG_PAGETYPE_EXTENDED) {
params->hdr.Ext.ExtPageType = reply->ExtPageType;
params->hdr.Ext.ExtPageLength = reply->ExtPageLength;
+ params->hdr.Ext.PageType = reply->Header.PageType;
+ params->hdr.Ext.PageNumber = reply->Header.PageNumber;
+ params->hdr.Ext.PageVersion = reply->Header.PageVersion;
} else {
params->hdr.Struct.PageType = reply->Header.PageType;
params->hdr.Struct.PageNumber = reply->Header.PageNumber;
Modified: stable/10/sys/dev/mpr/mpr_config.c
==============================================================================
--- stable/10/sys/dev/mpr/mpr_config.c Thu Jun 4 15:02:05 2015 (r283989)
+++ stable/10/sys/dev/mpr/mpr_config.c Thu Jun 4 16:27:18 2015 (r283990)
@@ -1,5 +1,6 @@
/*-
- * Copyright (c) 2011-2014 LSI Corp.
+ * Copyright (c) 2011-2015 LSI Corp.
+ * Copyright (c) 2013-2015 Avago Technologies
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -23,7 +24,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * LSI MPT-Fusion Host Adapter FreeBSD
+ * Avago Technologies (LSI) MPT-Fusion Host Adapter FreeBSD
*/
#include <sys/cdefs.h>
Modified: stable/10/sys/dev/mpr/mpr_ioctl.h
==============================================================================
--- stable/10/sys/dev/mpr/mpr_ioctl.h Thu Jun 4 15:02:05 2015 (r283989)
+++ stable/10/sys/dev/mpr/mpr_ioctl.h Thu Jun 4 16:27:18 2015 (r283990)
@@ -27,12 +27,13 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * LSI MPT-Fusion Host Adapter FreeBSD userland interface
+ * Avago Technologies (LSI) MPT-Fusion Host Adapter FreeBSD userland interface
*
* $FreeBSD$
*/
/*-
- * Copyright (c) 2011-2014 LSI Corp.
+ * Copyright (c) 2011-2015 LSI Corp.
+ * Copyright (c) 2013-2015 Avago Technologies
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -56,7 +57,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * LSI MPT-Fusion Host Adapter FreeBSD
+ * Avago Technologies (LSI) MPT-Fusion Host Adapter FreeBSD
*
* $FreeBSD$
*/
Modified: stable/10/sys/dev/mpr/mpr_mapping.c
==============================================================================
--- stable/10/sys/dev/mpr/mpr_mapping.c Thu Jun 4 15:02:05 2015 (r283989)
+++ stable/10/sys/dev/mpr/mpr_mapping.c Thu Jun 4 16:27:18 2015 (r283990)
@@ -1,5 +1,6 @@
/*-
- * Copyright (c) 2011-2014 LSI Corp.
+ * Copyright (c) 2011-2015 LSI Corp.
+ * Copyright (c) 2013-2015 Avago Technologies
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -23,7 +24,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * LSI MPT-Fusion Host Adapter FreeBSD
+ * Avago Technologies (LSI) MPT-Fusion Host Adapter FreeBSD
*/
#include <sys/cdefs.h>
@@ -326,11 +327,13 @@ _mapping_get_high_missing_mt_idx(struct
{
u32 map_idx, high_idx = MPR_ENCTABLE_BAD_IDX;
u8 high_missing_count = 0;
- u32 start_idx, end_idx, start_idx_ir = 0, end_idx_ir;
+ u32 start_idx, end_idx, start_idx_ir, end_idx_ir;
struct dev_mapping_table *mt_entry;
u16 ioc_pg8_flags = le16toh(sc->ioc_pg8.Flags);
start_idx = 0;
+ start_idx_ir = 0;
+ end_idx_ir = 0;
end_idx = sc->max_devices;
if (ioc_pg8_flags & MPI2_IOCPAGE8_FLAGS_RESERVED_TARGETID_0)
start_idx = 1;
@@ -887,14 +890,14 @@ _mapping_get_dev_info(struct mpr_softc *
u16 ioc_pg8_flags = le16toh(sc->ioc_pg8.Flags);
Mpi2ConfigReply_t mpi_reply;
Mpi2SasDevicePage0_t sas_device_pg0;
- u8 entry, enc_idx, phy_idx;
+ u8 entry, enc_idx, phy_idx, sata_end_device;
u32 map_idx, index, device_info;
struct _map_phy_change *phy_change, *tmp_phy_change;
uint64_t sas_address;
struct enc_mapping_table *et_entry;
struct dev_mapping_table *mt_entry;
u8 add_code = MPI2_EVENT_SAS_TOPO_RC_TARG_ADDED;
- int rc;
+ int rc = 1;
for (entry = 0; entry < topo_change->num_entries; entry++) {
phy_change = &topo_change->phy_details[entry];
@@ -908,41 +911,36 @@ _mapping_get_dev_info(struct mpr_softc *
continue;
}
+ /*
+ * Always get SATA Identify information because this is used
+ * to determine if Start/Stop Unit should be sent to the drive
+ * when the system is shutdown.
+ */
device_info = le32toh(sas_device_pg0.DeviceInfo);
- if ((ioc_pg8_flags & MPI2_IOCPAGE8_FLAGS_MASK_MAPPING_MODE) ==
- MPI2_IOCPAGE8_FLAGS_DEVICE_PERSISTENCE_MAPPING) {
- if ((device_info & MPI2_SAS_DEVICE_INFO_END_DEVICE) &&
- (device_info & MPI2_SAS_DEVICE_INFO_SATA_DEVICE)) {
- rc = mprsas_get_sas_address_for_sata_disk(sc,
- &sas_address, phy_change->dev_handle,
- device_info);
- if (rc) {
- printf("%s: failed to compute the "
- "hashed SAS Address for SATA "
- "device with handle 0x%04x\n",
- __func__, phy_change->dev_handle);
- sas_address =
- sas_device_pg0.SASAddress.High;
- sas_address = (sas_address << 32) |
- sas_device_pg0.SASAddress.Low;
- }
+ sas_address = sas_device_pg0.SASAddress.High;
+ sas_address = (sas_address << 32) |
+ sas_device_pg0.SASAddress.Low;
+ sata_end_device = 0;
+ if ((device_info & MPI2_SAS_DEVICE_INFO_END_DEVICE) &&
+ (device_info & MPI2_SAS_DEVICE_INFO_SATA_DEVICE)) {
+ sata_end_device = 1;
+ rc = mprsas_get_sas_address_for_sata_disk(sc,
+ &sas_address, phy_change->dev_handle, device_info,
+ &phy_change->is_SATA_SSD);
+ if (rc) {
+ mpr_dprint(sc, MPR_ERROR, "%s: failed to get "
+ "disk type (SSD or HDD) and SAS Address "
+ "for SATA device with handle 0x%04x\n",
+ __func__, phy_change->dev_handle);
+ } else {
mpr_dprint(sc, MPR_INFO, "SAS Address for SATA "
"device = %jx\n", sas_address);
- } else {
- sas_address =
- sas_device_pg0.SASAddress.High;
- sas_address = (sas_address << 32) |
- sas_device_pg0.SASAddress.Low;
}
- } else {
- sas_address = sas_device_pg0.SASAddress.High;
- sas_address = (sas_address << 32) |
- sas_device_pg0.SASAddress.Low;
}
+
phy_change->physical_id = sas_address;
phy_change->slot = le16toh(sas_device_pg0.Slot);
- phy_change->device_info =
- le32toh(sas_device_pg0.DeviceInfo);
+ phy_change->device_info = le32toh(sas_device_pg0.DeviceInfo);
if ((ioc_pg8_flags & MPI2_IOCPAGE8_FLAGS_MASK_MAPPING_MODE) ==
MPI2_IOCPAGE8_FLAGS_ENCLOSURE_SLOT_MAPPING) {
@@ -950,10 +948,10 @@ _mapping_get_dev_info(struct mpr_softc *
topo_change->enc_handle);
if (enc_idx == MPR_ENCTABLE_BAD_IDX) {
phy_change->is_processed = 1;
- printf("%s: failed to add the device with "
- "handle 0x%04x because the enclosure is "
- "not in the mapping table\n", __func__,
- phy_change->dev_handle);
+ mpr_dprint(sc, MPR_MAPPING, "%s: failed to add "
+ "the device with handle 0x%04x because the "
+ "enclosure is not in the mapping table\n",
+ __func__, phy_change->dev_handle);
continue;
}
if (!((phy_change->device_info &
Modified: stable/10/sys/dev/mpr/mpr_mapping.h
==============================================================================
--- stable/10/sys/dev/mpr/mpr_mapping.h Thu Jun 4 15:02:05 2015 (r283989)
+++ stable/10/sys/dev/mpr/mpr_mapping.h Thu Jun 4 16:27:18 2015 (r283990)
@@ -1,5 +1,6 @@
/*-
- * Copyright (c) 2011-2014 LSI Corp.
+ * Copyright (c) 2011-2015 LSI Corp.
+ * Copyright (c) 2013-2015 Avago Technologies
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -23,7 +24,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * LSI MPT-Fusion Host Adapter FreeBSD
+ * Avago Technologies (LSI) MPT-Fusion Host Adapter FreeBSD
*
* $FreeBSD$
*/
@@ -38,6 +39,7 @@
* @dev_handle: device handle for the device pointed by this entry
* @slot: slot ID
* @is_processed: Flag to indicate whether this entry is processed or not
+ * @is_SATA_SSD: 1 if this is a SATA device AND an SSD, 0 otherwise
*/
struct _map_phy_change {
uint64_t physical_id;
@@ -46,6 +48,8 @@ struct _map_phy_change {
uint16_t slot;
uint8_t reason;
uint8_t is_processed;
+ uint8_t is_SATA_SSD;
+ uint8_t reserved;
};
/**
@@ -66,6 +70,6 @@ struct _map_topology_change {
extern int
mprsas_get_sas_address_for_sata_disk(struct mpr_softc *ioc,
- u64 *sas_address, u16 handle, u32 device_info);
+ u64 *sas_address, u16 handle, u32 device_info, u8 *is_SATA_SSD);
#endif
Modified: stable/10/sys/dev/mpr/mpr_pci.c
==============================================================================
--- stable/10/sys/dev/mpr/mpr_pci.c Thu Jun 4 15:02:05 2015 (r283989)
+++ stable/10/sys/dev/mpr/mpr_pci.c Thu Jun 4 16:27:18 2015 (r283990)
@@ -27,7 +27,7 @@
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
-/* PCI/PCI-X/PCIe bus interface for the LSI MPT2 controllers */
+/* PCI/PCI-X/PCIe bus interface for the Avago Tech (LSI) MPT3 controllers */
/* TODO Move headers to mprvar */
#include <sys/types.h>
@@ -99,17 +99,17 @@ struct mpr_ident {
const char *desc;
} mpr_identifiers[] = {
{ MPI2_MFGPAGE_VENDORID_LSI, MPI25_MFGPAGE_DEVID_SAS3004,
- 0xffff, 0xffff, 0, "LSI SAS3004" },
+ 0xffff, 0xffff, 0, "Avago Technologies (LSI) SAS3004" },
{ MPI2_MFGPAGE_VENDORID_LSI, MPI25_MFGPAGE_DEVID_SAS3008,
- 0xffff, 0xffff, 0, "LSI SAS3008" },
+ 0xffff, 0xffff, 0, "Avago Technologies (LSI) SAS3008" },
{ MPI2_MFGPAGE_VENDORID_LSI, MPI25_MFGPAGE_DEVID_SAS3108_1,
- 0xffff, 0xffff, 0, "LSI SAS3108_1" },
+ 0xffff, 0xffff, 0, "Avago Technologies (LSI) SAS3108_1" },
{ MPI2_MFGPAGE_VENDORID_LSI, MPI25_MFGPAGE_DEVID_SAS3108_2,
- 0xffff, 0xffff, 0, "LSI SAS3108_2" },
+ 0xffff, 0xffff, 0, "Avago Technologies (LSI) SAS3108_2" },
{ MPI2_MFGPAGE_VENDORID_LSI, MPI25_MFGPAGE_DEVID_SAS3108_5,
- 0xffff, 0xffff, 0, "LSI SAS3108_5" },
+ 0xffff, 0xffff, 0, "Avago Technologies (LSI) SAS3108_5" },
{ MPI2_MFGPAGE_VENDORID_LSI, MPI25_MFGPAGE_DEVID_SAS3108_6,
- 0xffff, 0xffff, 0, "LSI SAS3108_6" },
+ 0xffff, 0xffff, 0, "Avago Technologies (LSI) SAS3108_6" },
{ 0, 0, 0, 0, 0, NULL }
};
Modified: stable/10/sys/dev/mpr/mpr_sas.c
==============================================================================
--- stable/10/sys/dev/mpr/mpr_sas.c Thu Jun 4 15:02:05 2015 (r283989)
+++ stable/10/sys/dev/mpr/mpr_sas.c Thu Jun 4 16:27:18 2015 (r283990)
@@ -1,6 +1,7 @@
/*-
* Copyright (c) 2009 Yahoo! Inc.
- * Copyright (c) 2011-2014 LSI Corp.
+ * Copyright (c) 2011-2015 LSI Corp.
+ * Copyright (c) 2013-2015 Avago Technologies
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -23,12 +24,15 @@
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
+ *
+ * Avago Technologies (LSI) MPT-Fusion Host Adapter FreeBSD
+ *
*/
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
-/* Communications core for LSI MPT2 */
+/* Communications core for Avago Technologies (LSI) MPT3 */
/* TODO Move headers to mprvar */
#include <sys/types.h>
@@ -122,14 +126,10 @@ static void mprsas_scsiio_complete(struc
static void mprsas_action_resetdev(struct mprsas_softc *, union ccb *);
static void mprsas_resetdev_complete(struct mpr_softc *,
struct mpr_command *);
-static int mprsas_send_abort(struct mpr_softc *sc, struct mpr_command *tm,
+static int mprsas_send_abort(struct mpr_softc *sc, struct mpr_command *tm,
struct mpr_command *cm);
-static int mprsas_send_reset(struct mpr_softc *sc, struct mpr_command *tm,
- uint8_t type);
static void mprsas_async(void *callback_arg, uint32_t code,
struct cam_path *path, void *arg);
-static void mprsas_prepare_ssu(struct mpr_softc *sc, struct cam_path *path,
- struct ccb_getdev *cgd);
#if (__FreeBSD_version < 901503) || \
((__FreeBSD_version >= 1000000) && (__FreeBSD_version < 1000006))
static void mprsas_check_eedp(struct mpr_softc *sc, struct cam_path *path,
@@ -142,13 +142,12 @@ static void mprsas_portenable_complete(s
struct mpr_command *cm);
#if __FreeBSD_version >= 900026
-static void
-mprsas_smpio_complete(struct mpr_softc *sc, struct mpr_command *cm);
+static void mprsas_smpio_complete(struct mpr_softc *sc,
+ struct mpr_command *cm);
static void mprsas_send_smpcmd(struct mprsas_softc *sassc,
- union ccb *ccb, uint64_t sasaddr);
-static void
-mprsas_action_smpio(struct mprsas_softc *sassc, union ccb *ccb);
-#endif
+ union ccb *ccb, uint64_t sasaddr);
+static void mprsas_action_smpio(struct mprsas_softc *sassc, union ccb *ccb);
+#endif //FreeBSD_version >= 900026
struct mprsas_target *
mprsas_find_target_by_handle(struct mprsas_softc *sassc, int start,
@@ -230,7 +229,7 @@ mprsas_startup_decrement(struct mprsas_s
}
}
-/* LSI's firmware requires us to stop sending commands when we're doing task
+/* The firmware requires us to stop sending commands when we're doing task
* management, so refcount the TMs and keep the simq frozen when any are in
* use.
*/
@@ -241,35 +240,31 @@ mprsas_alloc_tm(struct mpr_softc *sc)
MPR_FUNCTRACE(sc);
tm = mpr_alloc_high_priority_command(sc);
- if (tm != NULL) {
- if (sc->sassc->tm_count++ == 0) {
- mpr_dprint(sc, MPR_RECOVERY,
- "%s freezing simq\n", __func__);
- xpt_freeze_simq(sc->sassc->sim, 1);
- }
- mpr_dprint(sc, MPR_RECOVERY, "%s tm_count %u\n", __func__,
- sc->sassc->tm_count);
- }
return tm;
}
void
mprsas_free_tm(struct mpr_softc *sc, struct mpr_command *tm)
{
- mpr_dprint(sc, MPR_TRACE, "%s", __func__);
+ MPR_FUNCTRACE(sc);
if (tm == NULL)
return;
- /* if there are no TMs in use, we can release the simq. We use our
- * own refcount so that it's easier for a diag reset to cleanup and
- * release the simq.
- */
- if (--sc->sassc->tm_count == 0) {
- mpr_dprint(sc, MPR_RECOVERY, "%s releasing simq\n", __func__);
- xpt_release_simq(sc->sassc->sim, 1);
+ /*
+ * For TM's the devq is frozen for the device. Unfreeze it here and
+ * free the resources used for freezing the devq. Must clear the
+ * INRESET flag as well or scsi I/O will not work.
+ */
+ if (tm->cm_targ != NULL) {
+ tm->cm_targ->flags &= ~MPRSAS_TARGET_INRESET;
+ }
+ if (tm->cm_ccb) {
+ mpr_dprint(sc, MPR_INFO, "Unfreezing devq for target ID %d\n",
+ tm->cm_targ->tid);
+ xpt_release_devq(tm->cm_ccb->ccb_h.path, 1, TRUE);
+ xpt_free_path(tm->cm_ccb->ccb_h.path);
+ xpt_free_ccb(tm->cm_ccb);
}
- mpr_dprint(sc, MPR_RECOVERY, "%s tm_count %u\n", __func__,
- sc->sassc->tm_count);
mpr_free_high_priority_command(sc, tm);
}
@@ -298,8 +293,8 @@ mprsas_rescan_target(struct mpr_softc *s
return;
}
- if (xpt_create_path(&ccb->ccb_h.path, NULL, pathid,
- targetid, CAM_LUN_WILDCARD) != CAM_REQ_CMP) {
+ if (xpt_create_path(&ccb->ccb_h.path, NULL, pathid, targetid,
+ CAM_LUN_WILDCARD) != CAM_REQ_CMP) {
mpr_dprint(sc, MPR_ERROR, "unable to create path for rescan\n");
xpt_free_ccb(ccb);
return;
@@ -473,11 +468,16 @@ mprsas_prepare_volume_remove(struct mprs
MPI2_REQ_DESCRIPT_FLAGS_HIGH_PRIORITY;
cm->cm_complete = mprsas_remove_volume;
cm->cm_complete_data = (void *)(uintptr_t)handle;
+
+ mpr_dprint(sc, MPR_INFO, "%s: Sending reset for target ID %d\n",
+ __func__, targ->tid);
+ mprsas_prepare_for_tm(sc, cm, targ, CAM_LUN_WILDCARD);
+
mpr_map_command(sc, cm);
}
/*
- * The MPT2 firmware performs debounce on the link to avoid transient link
+ * The MPT3 firmware performs debounce on the link to avoid transient link
* errors and false removals. When it does decide that link has been lost
* and a device needs to go away, it expects that the host will perform a
* target reset and then an op remove. The reset has the side-effect of
@@ -532,6 +532,11 @@ mprsas_prepare_remove(struct mprsas_soft
MPI2_REQ_DESCRIPT_FLAGS_HIGH_PRIORITY;
cm->cm_complete = mprsas_remove_device;
cm->cm_complete_data = (void *)(uintptr_t)handle;
+
+ mpr_dprint(sc, MPR_INFO, "%s: Sending reset for target ID %d\n",
+ __func__, targ->tid);
+ mprsas_prepare_for_tm(sc, cm, targ, CAM_LUN_WILDCARD);
+
mpr_map_command(sc, cm);
}
@@ -596,10 +601,10 @@ mprsas_remove_device(struct mpr_softc *s
mpr_map_command(sc, tm);
- mpr_dprint(sc, MPR_XINFO, "clearing target %u handle 0x%04x\n",
+ mpr_dprint(sc, MPR_INFO, "clearing target %u handle 0x%04x\n",
targ->tid, handle);
if (targ->encl_level_valid) {
- mpr_dprint(sc, MPR_XINFO, "At enclosure level %d, slot %d, "
+ mpr_dprint(sc, MPR_INFO, "At enclosure level %d, slot %d, "
"connector name (%4s)\n", targ->encl_level, targ->encl_slot,
targ->connector_name);
}
@@ -608,7 +613,7 @@ mprsas_remove_device(struct mpr_softc *s
mpr_dprint(sc, MPR_XINFO, "Completing missed command %p\n", tm);
ccb = tm->cm_complete_data;
- ccb->ccb_h.status = CAM_DEV_NOT_THERE;
+ mprsas_set_ccbstatus(ccb, CAM_DEV_NOT_THERE);
mprsas_scsiio_complete(sc, tm);
}
}
@@ -726,7 +731,7 @@ mpr_attach_sas(struct mpr_softc *sc)
*** DIFF OUTPUT TRUNCATED AT 1000 LINES ***
More information about the svn-src-stable-10
mailing list