From owner-svn-src-projects@FreeBSD.ORG Thu Aug 25 12:09:40 2011 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id E8476106566B; Thu, 25 Aug 2011 12:09:40 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id D7E688FC12; Thu, 25 Aug 2011 12:09:40 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id p7PC9eOY002932; Thu, 25 Aug 2011 12:09:40 GMT (envelope-from mav@svn.freebsd.org) Received: (from mav@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id p7PC9e3w002929; Thu, 25 Aug 2011 12:09:40 GMT (envelope-from mav@svn.freebsd.org) Message-Id: <201108251209.p7PC9e3w002929@svn.freebsd.org> From: Alexander Motin Date: Thu, 25 Aug 2011 12:09:40 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r225175 - projects/zfsd/head/sys/cam/scsi X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 25 Aug 2011 12:09:41 -0000 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 #include #include +#include #include #include @@ -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 #include #include +#include #include #include @@ -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); }