summaryrefslogtreecommitdiffstats
path: root/sys/cam
diff options
context:
space:
mode:
authorken <ken@FreeBSD.org>2012-06-28 19:39:30 +0000
committerken <ken@FreeBSD.org>2012-06-28 19:39:30 +0000
commit064fbb4fb693810d1336ebcdf36a7da8dc7cc47d (patch)
treeec357a4133a6044d5ed7443486758d7dada4b4b6 /sys/cam
parent1ebfb4a3f7aa1863fd806c0a54db3528e8d47b87 (diff)
downloadFreeBSD-src-064fbb4fb693810d1336ebcdf36a7da8dc7cc47d.zip
FreeBSD-src-064fbb4fb693810d1336ebcdf36a7da8dc7cc47d.tar.gz
Add a loader tunable, kern.cam.ctl.disable, that will disable
loading CTL. This may be useful in very low memory installations. MFC after: 3 days
Diffstat (limited to 'sys/cam')
-rw-r--r--sys/cam/ctl/ctl.c10
-rw-r--r--sys/cam/ctl/ctl_backend.c5
-rw-r--r--sys/cam/ctl/ctl_frontend_cam_sim.c5
-rw-r--r--sys/cam/ctl/ctl_frontend_internal.c5
-rw-r--r--sys/cam/ctl/scsi_ctl.c9
5 files changed, 33 insertions, 1 deletions
diff --git a/sys/cam/ctl/ctl.c b/sys/cam/ctl/ctl.c
index 957ed80..5b67b8f 100644
--- a/sys/cam/ctl/ctl.c
+++ b/sys/cam/ctl/ctl.c
@@ -308,7 +308,6 @@ static struct scsi_control_page control_page_changeable = {
/*aen_holdoff_period*/{0, 0}
};
-SYSCTL_NODE(_kern_cam, OID_AUTO, ctl, CTLFLAG_RD, 0, "CAM Target Layer");
/*
* XXX KDM move these into the softc.
@@ -318,7 +317,12 @@ static int persis_offset;
static uint8_t ctl_pause_rtr;
static int ctl_is_single;
static int index_to_aps_page;
+int ctl_disable = 0;
+SYSCTL_NODE(_kern_cam, OID_AUTO, ctl, CTLFLAG_RD, 0, "CAM Target Layer");
+SYSCTL_INT(_kern_cam_ctl, OID_AUTO, disable, CTLFLAG_RDTUN, &ctl_disable, 0,
+ "Disable CTL");
+TUNABLE_INT("kern.cam.ctl.disable", &ctl_disable);
/*
* Serial number (0x80), device id (0x83), and supported pages (0x00)
@@ -949,6 +953,10 @@ ctl_init(void)
ctl_pause_rtr = 0;
rcv_sync_msg = 0;
+ /* If we're disabled, don't initialize. */
+ if (ctl_disable != 0)
+ return;
+
control_softc = malloc(sizeof(*control_softc), M_DEVBUF, M_WAITOK);
softc = control_softc;
diff --git a/sys/cam/ctl/ctl_backend.c b/sys/cam/ctl/ctl_backend.c
index 5234c4a..863e9c7 100644
--- a/sys/cam/ctl/ctl_backend.c
+++ b/sys/cam/ctl/ctl_backend.c
@@ -62,6 +62,7 @@ __FBSDID("$FreeBSD$");
#include <cam/ctl/ctl_debug.h>
extern struct ctl_softc *control_softc;
+extern int ctl_disable;
int
ctl_backend_register(struct ctl_backend_driver *be)
@@ -71,6 +72,10 @@ ctl_backend_register(struct ctl_backend_driver *be)
ctl_softc = control_softc;
+ /* Don't continue if CTL is disabled */
+ if (ctl_disable != 0)
+ return (0);
+
mtx_lock(&ctl_softc->ctl_lock);
/*
* Sanity check, make sure this isn't a duplicate registration.
diff --git a/sys/cam/ctl/ctl_frontend_cam_sim.c b/sys/cam/ctl/ctl_frontend_cam_sim.c
index 058c2c2..4a75202 100644
--- a/sys/cam/ctl/ctl_frontend_cam_sim.c
+++ b/sys/cam/ctl/ctl_frontend_cam_sim.c
@@ -119,6 +119,7 @@ struct cfcs_softc cfcs_softc;
* amount of SCSI sense data that we will report to CAM.
*/
static int cfcs_max_sense = sizeof(struct scsi_sense_data);
+extern int ctl_disable;
SYSINIT(cfcs_init, SI_SUB_CONFIGURE, SI_ORDER_FOURTH, cfcs_init, NULL);
SYSCTL_NODE(_kern_cam, OID_AUTO, ctl2cam, CTLFLAG_RD, 0,
@@ -138,6 +139,10 @@ cfcs_init(void)
#endif
int retval;
+ /* Don't continue if CTL is disabled */
+ if (ctl_disable != 0)
+ return (0);
+
softc = &cfcs_softc;
retval = 0;
bzero(softc, sizeof(*softc));
diff --git a/sys/cam/ctl/ctl_frontend_internal.c b/sys/cam/ctl/ctl_frontend_internal.c
index 5231564..46f9f33 100644
--- a/sys/cam/ctl/ctl_frontend_internal.c
+++ b/sys/cam/ctl/ctl_frontend_internal.c
@@ -187,6 +187,7 @@ struct cfi_softc {
MALLOC_DEFINE(M_CTL_CFI, "ctlcfi", "CTL CFI");
static struct cfi_softc fetd_internal_softc;
+extern int ctl_disable;
void cfi_init(void);
void cfi_shutdown(void) __unused;
@@ -231,6 +232,10 @@ cfi_init(void)
retval = 0;
+ /* If we're disabled, don't initialize */
+ if (ctl_disable != 0)
+ return;
+
if (sizeof(struct cfi_lun_io) > CTL_PORT_PRIV_SIZE) {
printf("%s: size of struct cfi_lun_io %zd > "
"CTL_PORT_PRIV_SIZE %d\n", __func__,
diff --git a/sys/cam/ctl/scsi_ctl.c b/sys/cam/ctl/scsi_ctl.c
index 044b9a9..ab51f01 100644
--- a/sys/cam/ctl/scsi_ctl.c
+++ b/sys/cam/ctl/scsi_ctl.c
@@ -227,12 +227,17 @@ static struct periph_driver ctlfe_driver =
PERIPHDRIVER_DECLARE(ctl, ctlfe_driver);
extern struct ctl_softc *control_softc;
+extern int ctl_disable;
int
ctlfeinitialize(void)
{
cam_status status;
+ /* Don't initialize if we're disabled */
+ if (ctl_disable != 0)
+ return (0);
+
STAILQ_INIT(&ctlfe_softc_list);
mtx_init(&ctlfe_list_mtx, ctlfe_mtx_desc, NULL, MTX_DEF);
@@ -263,6 +268,10 @@ ctlfeinit(void)
{
cam_status status;
+ /* Don't initialize if we're disabled */
+ if (ctl_disable != 0)
+ return;
+
STAILQ_INIT(&ctlfe_softc_list);
mtx_init(&ctlfe_list_mtx, ctlfe_mtx_desc, NULL, MTX_DEF);
OpenPOWER on IntegriCloud