summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormav <mav@FreeBSD.org>2015-11-13 19:43:58 +0000
committermav <mav@FreeBSD.org>2015-11-13 19:43:58 +0000
commit91c252f3d0bf80eb5f1511a357184a499b5e4b28 (patch)
tree2d340bc0314e4c8e6d873d248fcf5ddd38cf671d
parent325eed831d541e151ac572740e260d510bccc8da (diff)
downloadFreeBSD-src-91c252f3d0bf80eb5f1511a357184a499b5e4b28.zip
FreeBSD-src-91c252f3d0bf80eb5f1511a357184a499b5e4b28.tar.gz
MFC r289817: Disable full bus scan by CAM for FC adapters.
FC port database code already notifies CAM about all devices. Additional full scan is just a waste of time, that by definition won't find anything that is not present in port database.
-rw-r--r--sys/dev/isp/isp_freebsd.c17
-rw-r--r--sys/dev/isp/isp_freebsd.h1
-rw-r--r--sys/dev/isp/isp_pci.c3
3 files changed, 9 insertions, 12 deletions
diff --git a/sys/dev/isp/isp_freebsd.c b/sys/dev/isp/isp_freebsd.c
index 0af745e..85ac00f 100644
--- a/sys/dev/isp/isp_freebsd.c
+++ b/sys/dev/isp/isp_freebsd.c
@@ -54,7 +54,6 @@ int isp_fabric_hysteresis = 5;
int isp_loop_down_limit = 60; /* default loop down limit */
int isp_quickboot_time = 7; /* don't wait more than N secs for loop up */
int isp_gone_device_time = 30; /* grace time before reporting device lost */
-int isp_autoconfig = 1; /* automatically attach/detach devices */
static const char prom3[] = "Chan %d [%u] PortID 0x%06x Departed because of %s";
static void isp_freeze_loopdown(ispsoftc_t *, int, char *);
@@ -418,6 +417,9 @@ isp_freeze_loopdown(ispsoftc_t *isp, int chan, char *msg)
if (fc->simqfrozen == 0) {
isp_prt(isp, ISP_LOGDEBUG0, "%s: freeze simq (loopdown) chan %d", msg, chan);
fc->simqfrozen = SIMQFRZ_LOOPDOWN;
+#if __FreeBSD_version >= 1000039
+ xpt_hold_boot();
+#endif
xpt_freeze_simq(fc->sim, 1);
} else {
isp_prt(isp, ISP_LOGDEBUG0, "%s: mark frozen (loopdown) chan %d", msg, chan);
@@ -436,6 +438,9 @@ isp_unfreeze_loopdown(ispsoftc_t *isp, int chan)
if (wasfrozen && fc->simqfrozen == 0) {
isp_prt(isp, ISP_LOG_SANCFG|ISP_LOGDEBUG0, "%s: Chan %d releasing simq", __func__, chan);
xpt_release_simq(fc->sim, 1);
+#if __FreeBSD_version >= 1000039
+ xpt_release_boot();
+#endif
}
}
}
@@ -4602,10 +4607,6 @@ isp_make_here(ispsoftc_t *isp, fcportdb_t *fcp, int chan, int tgt)
union ccb *ccb;
struct isp_fc *fc = ISP_FC_PC(isp, chan);
- if (isp_autoconfig == 0) {
- return;
- }
-
/*
* Allocate a CCB, create a wildcard path for this target and schedule a rescan.
*/
@@ -4629,9 +4630,6 @@ isp_make_gone(ispsoftc_t *isp, fcportdb_t *fcp, int chan, int tgt)
struct cam_path *tp;
struct isp_fc *fc = ISP_FC_PC(isp, chan);
- if (isp_autoconfig == 0) {
- return;
- }
if (xpt_create_path(&tp, NULL, cam_sim_path(fc->sim), tgt, CAM_LUN_WILDCARD) == CAM_REQ_CMP) {
xpt_async(AC_LOST_DEVICE, tp, NULL);
xpt_free_path(tp);
@@ -5516,6 +5514,9 @@ isp_action(struct cam_sim *sim, union ccb *ccb)
fcparam *fcp = FCPARAM(isp, bus);
cpi->hba_misc = PIM_NOBUSRESET | PIM_UNMAPPED;
+#if __FreeBSD_version >= 1000039
+ cpi->hba_misc |= PIM_NOSCAN;
+#endif
/*
* Because our loop ID can shift from time to time,
diff --git a/sys/dev/isp/isp_freebsd.h b/sys/dev/isp/isp_freebsd.h
index 78b597f..39f4d52 100644
--- a/sys/dev/isp/isp_freebsd.h
+++ b/sys/dev/isp/isp_freebsd.h
@@ -734,7 +734,6 @@ extern int isp_fabric_hysteresis;
extern int isp_loop_down_limit;
extern int isp_gone_device_time;
extern int isp_quickboot_time;
-extern int isp_autoconfig;
/*
* Platform private flags
diff --git a/sys/dev/isp/isp_pci.c b/sys/dev/isp/isp_pci.c
index 3889d1a..bf17374 100644
--- a/sys/dev/isp/isp_pci.c
+++ b/sys/dev/isp/isp_pci.c
@@ -489,9 +489,6 @@ isp_get_generic_options(device_t dev, ispsoftc_t *isp)
if (tval > 0 && tval < 127) {
isp_nvports = tval;
}
- tval = 1;
- (void) resource_int_value(device_get_name(dev), device_get_unit(dev), "autoconfig", &tval);
- isp_autoconfig = tval;
tval = 7;
(void) resource_int_value(device_get_name(dev), device_get_unit(dev), "quickboot_time", &tval);
isp_quickboot_time = tval;
OpenPOWER on IntegriCloud