svn commit: r225175 - projects/zfsd/head/sys/cam/scsi
Alexander Motin
mav at FreeBSD.org
Thu Aug 25 12:09:41 UTC 2011
Author: mav
Date: Thu Aug 25 12:09:40 2011
New Revision: 225175
URL: http://svn.freebsd.org/changeset/base/225175
Log:
Make emulate_array_devices global to not bother with locking and kenv.
This also makes it writable sysctl.
Modified:
projects/zfsd/head/sys/cam/scsi/scsi_enc.c
projects/zfsd/head/sys/cam/scsi/scsi_enc_safte.c
Modified: projects/zfsd/head/sys/cam/scsi/scsi_enc.c
==============================================================================
--- projects/zfsd/head/sys/cam/scsi/scsi_enc.c Thu Aug 25 11:39:32 2011 (r225174)
+++ projects/zfsd/head/sys/cam/scsi/scsi_enc.c Thu Aug 25 12:09:40 2011 (r225175)
@@ -40,6 +40,7 @@ __FBSDID("$FreeBSD$");
#include <sys/queue.h>
#include <sys/sx.h>
#include <sys/systm.h>
+#include <sys/sysctl.h>
#include <sys/types.h>
#include <machine/stdarg.h>
@@ -76,6 +77,9 @@ static periph_start_t enc_start;
static void enc_async(void *, uint32_t, struct cam_path *, void *);
static enctyp enc_type(struct ccb_getdev *);
+SYSCTL_NODE(_kern_cam, OID_AUTO, enc, CTLFLAG_RD, 0,
+ "CAM Enclosure Services driver");
+
static struct periph_driver encdriver = {
enc_init, "enc",
TAILQ_HEAD_INITIALIZER(encdriver.units), /* generation */ 0
Modified: projects/zfsd/head/sys/cam/scsi/scsi_enc_safte.c
==============================================================================
--- projects/zfsd/head/sys/cam/scsi/scsi_enc_safte.c Thu Aug 25 11:39:32 2011 (r225174)
+++ projects/zfsd/head/sys/cam/scsi/scsi_enc_safte.c Thu Aug 25 12:09:40 2011 (r225175)
@@ -37,6 +37,7 @@ __FBSDID("$FreeBSD: head/sys/cam/scsi/sc
#include <sys/queue.h>
#include <sys/sx.h>
#include <sys/systm.h>
+#include <sys/sysctl.h>
#include <sys/types.h>
#include <cam/cam.h>
@@ -162,7 +163,6 @@ enum {
};
struct scfg {
- int emulate_array_devices;
/*
* Cached Configuration
*/
@@ -214,6 +214,12 @@ static char *safte_2little = "Too Little
return (EIO); \
}
+int emulate_array_devices = 1;
+SYSCTL_DECL(_kern_cam_enc);
+SYSCTL_INT(_kern_cam_enc, OID_AUTO, emulate_array_devices, CTLFLAG_RW,
+ &emulate_array_devices, 0, "Emulate Array Devices for SAF-TE");
+TUNABLE_INT("kern.cam.enc.emulate_array_devices", &emulate_array_devices);
+
static int
safte_fill_read_buf_io(enc_softc_t *enc, struct enc_fsm_state *state,
union ccb *ccb, uint8_t *buf)
@@ -302,7 +308,7 @@ safte_process_config(enc_softc_t *enc, s
cfg->slotoff = (uint8_t) r;
for (i = 0; i < cfg->Nslots; i++)
enc->enc_cache.elm_map[r++].enctype =
- cfg->emulate_array_devices ? ELMTYP_ARRAY_DEV :
+ emulate_array_devices ? ELMTYP_ARRAY_DEV :
ELMTYP_DEVICE;
enc_update_request(enc, SAFTE_UPDATE_READGFLAGS);
@@ -488,7 +494,7 @@ safte_process_status(enc_softc_t *enc, s
*/
for (i = 0; i < cfg->Nslots; i++) {
SAFT_BAIL(r, xfer_len);
- if (!cfg->emulate_array_devices)
+ if (cache->elm_map[cfg->slotoff + i].enctype == ELMTYP_DEVICE)
cache->elm_map[cfg->slotoff + i].encstat[1] = buf[r];
r++;
}
@@ -660,7 +666,7 @@ safte_process_slotstatus(enc_softc_t *en
oid = cfg->slotoff;
for (r = i = 0; i < cfg->Nslots; i++, r += 4) {
SAFT_BAIL(r+3, xfer_len);
- if (cfg->emulate_array_devices)
+ if (cache->elm_map[oid].enctype == ELMTYP_ARRAY_DEV)
cache->elm_map[oid].encstat[1] = 0;
cache->elm_map[oid].encstat[2] &= SESCTL_RQSID;
cache->elm_map[oid].encstat[3] = 0;
@@ -687,7 +693,7 @@ safte_process_slotstatus(enc_softc_t *en
cache->elm_map[oid].encstat[3] |= SESCTL_RQSFLT;
if (buf[r+0] & 0x40)
cache->elm_map[oid].encstat[0] |= SESCTL_PRDFAIL;
- if (cfg->emulate_array_devices) {
+ if (cache->elm_map[oid].enctype == ELMTYP_ARRAY_DEV) {
if (buf[r+0] & 0x04)
cache->elm_map[oid].encstat[1] |= 0x02;
if (buf[r+0] & 0x08)
@@ -763,7 +769,7 @@ safte_fill_control_request(enc_softc_t *
ep->priv |= 0x02;
if ((ep->priv & 0x46) == 0)
ep->priv |= 0x01; /* no errors */
- if (cfg->emulate_array_devices) {
+ if (ep->enctype == ELMTYP_ARRAY_DEV) {
if (req->elm_stat[1] & 0x01)
ep->priv |= 0x200;
if (req->elm_stat[1] & 0x02)
@@ -1103,7 +1109,6 @@ int
safte_softc_init(enc_softc_t *enc, int doinit)
{
struct scfg *cfg;
- char buf[32];
if (doinit == 0) {
safte_softc_cleanup(enc->periph);
@@ -1124,10 +1129,6 @@ safte_softc_init(enc_softc_t *enc, int d
enc->enc_cache.enc_status = 0;
TAILQ_INIT(&cfg->requests);
- cfg->emulate_array_devices = 1;
- snprintf(buf, sizeof(buf), "kern.cam.enc.%d.emulate_array_devices",
- enc->periph->unit_number);
- TUNABLE_INT_FETCH(buf, &cfg->emulate_array_devices);
return (0);
}
More information about the svn-src-projects
mailing list