PERFORCE change 78841 for review
Scott Long
scottl at FreeBSD.org
Thu Jun 23 04:19:59 GMT 2005
http://perforce.freebsd.org/chv.cgi?CH=78841
Change 78841 by scottl at scottl-junior on 2005/06/23 04:18:58
Partial IFC
Affected files ...
.. //depot/projects/scottl-camlock/src/sys/cam/cam_periph.c#3 integrate
.. //depot/projects/scottl-camlock/src/sys/cam/cam_xpt.c#14 integrate
.. //depot/projects/scottl-camlock/src/sys/cam/scsi/scsi_all.c#3 integrate
.. //depot/projects/scottl-camlock/src/sys/cam/scsi/scsi_cd.c#3 integrate
.. //depot/projects/scottl-camlock/src/sys/cam/scsi/scsi_ch.c#4 integrate
.. //depot/projects/scottl-camlock/src/sys/cam/scsi/scsi_da.c#5 integrate
.. //depot/projects/scottl-camlock/src/sys/cam/scsi/scsi_low.c#4 integrate
.. //depot/projects/scottl-camlock/src/sys/cam/scsi/scsi_sa.c#4 integrate
.. //depot/projects/scottl-camlock/src/sys/cam/scsi/scsi_target.c#4 integrate
Differences ...
==== //depot/projects/scottl-camlock/src/sys/cam/cam_periph.c#3 (text+ko) ====
@@ -28,7 +28,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/cam/cam_periph.c,v 1.58 2005/01/05 22:34:34 imp Exp $");
+__FBSDID("$FreeBSD: src/sys/cam/cam_periph.c,v 1.59 2005/02/20 23:45:49 scottl Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -445,6 +445,10 @@
if (strcmp((*p_drv)->driver_name, periph->periph_name) == 0)
break;
}
+ if (*p_drv == NULL) {
+ printf("camperiphfree: attempt to free non-existant periph\n");
+ return;
+ }
if (periph->periph_dtor != NULL)
periph->periph_dtor(periph);
==== //depot/projects/scottl-camlock/src/sys/cam/cam_xpt.c#14 (text+ko) ====
@@ -28,7 +28,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/cam/cam_xpt.c,v 1.149 2005/02/09 11:44:15 scottl Exp $");
+__FBSDID("$FreeBSD: src/sys/cam/cam_xpt.c,v 1.153 2005/05/11 17:39:33 kan Exp $");
#include <sys/param.h>
#include <sys/bus.h>
@@ -2379,7 +2379,7 @@
break;
}
- if (pdrv == NULL) {
+ if (*pdrv == NULL) {
cdm->status = CAM_DEV_MATCH_ERROR;
return(0);
}
@@ -4871,6 +4871,7 @@
device->qfrozen_cnt = 0;
device->flags = CAM_DEV_UNCONFIGURED;
device->tag_delay_count = 0;
+ device->tag_saved_openings = 0;
device->refcount = 1;
callout_handle_init(&device->c_handle);
@@ -4958,6 +4959,9 @@
if (result == CAM_REQ_CMP && (diff < 0)) {
dev->flags |= CAM_DEV_RESIZE_QUEUE_NEEDED;
}
+ if ((dev->flags & CAM_DEV_TAG_AFTER_COUNT) != 0
+ || (dev->inq_flags & SID_CmdQue) != 0)
+ dev->tag_saved_openings = newopenings;
/* Adjust the global limit */
xpt_max_ccbs += diff;
splx(s);
@@ -5189,7 +5193,6 @@
struct cam_path *path;
cam_status status;
- path = request_ccb->ccb_h.path;
status = xpt_create_path(&path, xpt_periph,
path_id, target_id, lun_id);
if (status != CAM_REQ_CMP) {
@@ -5205,8 +5208,8 @@
free(scan_info, M_TEMP);
request_ccb->ccb_h.status = CAM_REQ_CMP;
xpt_done(request_ccb);
- break;
}
+ break;
}
xpt_setup_ccb(&request_ccb->ccb_h, path,
request_ccb->ccb_h.pinfo.priority);
@@ -5224,7 +5227,6 @@
}
}
-void
xpt_find_quirk(struct cam_ed *device)
{
caddr_t match;
@@ -5854,7 +5856,11 @@
device->flags &= ~CAM_DEV_TAG_AFTER_COUNT;
xpt_freeze_devq(path, /*count*/1);
device->inq_flags |= SID_CmdQue;
- newopenings = min(device->quirk->maxtags, sim->max_tagged_dev_openings);
+ if (device->tag_saved_openings != 0)
+ newopenings = device->tag_saved_openings;
+ else
+ newopenings = min(device->quirk->maxtags,
+ sim->max_tagged_dev_openings);
xpt_dev_ccbq_resize(path, newopenings);
xpt_setup_ccb(&crs.ccb_h, path, /*priority*/1);
crs.ccb_h.func_code = XPT_REL_SIMQ;
@@ -6032,6 +6038,7 @@
if (done_ccb->ccb_h.status == CAM_REQ_CMP) {
done_ccb->ccb_h.func_code = XPT_SCAN_BUS;
done_ccb->ccb_h.cbfcnp = xpt_finishconfig;
+ done_ccb->crcn.flags = 0;
xpt_action(done_ccb);
return;
}
==== //depot/projects/scottl-camlock/src/sys/cam/scsi/scsi_all.c#3 (text+ko) ====
@@ -28,7 +28,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/cam/scsi/scsi_all.c,v 1.46 2005/01/05 22:34:34 imp Exp $");
+__FBSDID("$FreeBSD: src/sys/cam/scsi/scsi_all.c,v 1.48 2005/04/14 03:52:50 mjacob Exp $");
#include <sys/param.h>
@@ -1971,7 +1971,7 @@
* errors on finicky architectures. We don't
* ensure that the sense data is pointer aligned.
*/
- bcopy(&csio->sense_data, sense,
+ bcopy(&csio->sense_data, &sense,
sizeof(struct scsi_sense_data *));
}
} else {
@@ -2312,6 +2312,15 @@
int i;
int num_syncrates;
+ /*
+ * It's a bug if period is zero, but if it is anyway, don't
+ * die with a divide fault- instead return something which
+ * 'approximates' async
+ */
+ if (period_factor == 0) {
+ return (3300);
+ }
+
num_syncrates = sizeof(scsi_syncrates) / sizeof(scsi_syncrates[0]);
/* See if the period is in the "exception" table */
for (i = 0; i < num_syncrates; i++) {
==== //depot/projects/scottl-camlock/src/sys/cam/scsi/scsi_cd.c#3 (text+ko) ====
@@ -46,7 +46,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/cam/scsi/scsi_cd.c,v 1.92 2005/01/30 08:12:36 sobomax Exp $");
+__FBSDID("$FreeBSD: src/sys/cam/scsi/scsi_cd.c,v 1.93 2005/03/26 06:05:06 ken Exp $");
#include "opt_cd.h"
@@ -1929,10 +1929,16 @@
/*
* If we don't have media loaded, check for it. If still don't
* have media loaded, we can only do a load or eject.
+ *
+ * We only care whether media is loaded if this is a cd-specific ioctl
+ * (thus the IOCGROUP check below). Note that this will break if
+ * anyone adds any ioctls into the switch statement below that don't
+ * have their ioctl group set to 'c'.
*/
if (((softc->flags & CD_FLAG_VALID_MEDIA) == 0)
&& ((cmd != CDIOCCLOSE)
- && (cmd != CDIOCEJECT))) {
+ && (cmd != CDIOCEJECT))
+ && (IOCGROUP(cmd) == 'c')) {
error = cdcheckmedia(periph);
if (error != 0) {
cam_periph_unlock(periph);
==== //depot/projects/scottl-camlock/src/sys/cam/scsi/scsi_ch.c#4 (text+ko) ====
@@ -68,7 +68,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/cam/scsi/scsi_ch.c,v 1.41 2005/01/05 22:34:34 imp Exp $");
+__FBSDID("$FreeBSD: src/sys/cam/scsi/scsi_ch.c,v 1.42 2005/03/26 04:21:11 ken Exp $");
#include <sys/param.h>
#include <sys/queue.h>
@@ -1157,6 +1157,8 @@
* Fill in the user status array.
*/
st_hdr = (struct read_element_status_header *)data;
+ pg_hdr = (struct read_element_status_page_header *)((uintptr_t)st_hdr +
+ sizeof(struct read_element_status_header));
avail = scsi_2btoul(st_hdr->count);
if (avail != cesr->cesr_element_count) {
==== //depot/projects/scottl-camlock/src/sys/cam/scsi/scsi_da.c#5 (text+ko) ====
@@ -27,7 +27,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/cam/scsi/scsi_da.c,v 1.173 2005/01/05 22:34:34 imp Exp $");
+__FBSDID("$FreeBSD: src/sys/cam/scsi/scsi_da.c,v 1.180 2005/06/09 17:35:04 pjd Exp $");
#include <sys/param.h>
@@ -203,6 +203,7 @@
{
/*
* Doesn't like the synchronize cache command.
+ * Reported by: Blaz Zupan <blaz at gold.amis.net>
*/
{T_DIRECT, SIP_MEDIA_FIXED, quantum, "MAVERICK 540S", "*"},
/*quirks*/ DA_Q_NO_SYNC_CACHE
@@ -216,6 +217,14 @@
},
{
/*
+ * Doesn't like the synchronize cache command.
+ * Reported by: walter at pelissero.de
+ */
+ {T_DIRECT, SIP_MEDIA_FIXED, quantum, "LPS540S", "*"},
+ /*quirks*/ DA_Q_NO_SYNC_CACHE
+ },
+ {
+ /*
* Doesn't work correctly with 6 byte reads/writes.
* Returns illegal request, and points to byte 9 of the
* 6-byte CDB.
@@ -231,6 +240,14 @@
},
{
/*
+ * Doesn't like the synchronize cache command.
+ * Reported by: walter at pelissero.de
+ */
+ {T_DIRECT, SIP_MEDIA_FIXED, "CONNER", "CP3500*", "*"},
+ /*quirks*/ DA_Q_NO_SYNC_CACHE
+ },
+ {
+ /*
* The CISS RAID controllers do not support SYNC_CACHE
*/
{T_DIRECT, SIP_MEDIA_FIXED, "COMPAQ", "RAID*", "*"},
@@ -314,7 +331,30 @@
* Frontier Labs NEX IA+ Digital Audio Player, rev 1.10/0.01
* PR: kern/70158
*/
- {T_DIRECT, SIP_MEDIA_REMOVABLE, "FL" , "NexIA+*", "*"},
+ {T_DIRECT, SIP_MEDIA_REMOVABLE, "FL" , "Nex*", "*"},
+ /*quirks*/ DA_Q_NO_SYNC_CACHE
+ },
+ {
+ /*
+ * ZICPlay USB MP3 Player with FM
+ * PR: kern/75057
+ */
+ {T_DIRECT, SIP_MEDIA_REMOVABLE, "ACTIONS*" , "USB DISK*", "*"},
+ /*quirks*/ DA_Q_NO_SYNC_CACHE
+ },
+ {
+ /*
+ * TEAC USB floppy mechanisms
+ */
+ {T_DIRECT, SIP_MEDIA_REMOVABLE, "TEAC" , "FD-05*", "*"},
+ /*quirks*/ DA_Q_NO_SYNC_CACHE
+ },
+ {
+ /*
+ * Kingston DataTraveler II+ USB Pen-Drive.
+ * Reported by: Pawel Jakub Dawidek <pjd at FreeBSD.org>
+ */
+ {T_DIRECT, SIP_MEDIA_REMOVABLE, "Kingston" , "DataTraveler II+", "*"},
/*quirks*/ DA_Q_NO_SYNC_CACHE
},
};
==== //depot/projects/scottl-camlock/src/sys/cam/scsi/scsi_low.c#4 (text+ko) ====
@@ -2,7 +2,7 @@
/* $NetBSD$ */
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/cam/scsi/scsi_low.c,v 1.22 2005/01/05 22:34:34 imp Exp $");
+__FBSDID("$FreeBSD: src/sys/cam/scsi/scsi_low.c,v 1.23 2005/03/19 06:32:57 scottl Exp $");
#define SCSI_LOW_STATICS
#define SCSI_LOW_DEBUG
@@ -1421,7 +1421,6 @@
CAM_LUN_WILDCARD) != CAM_REQ_CMP) {
xpt_bus_deregister(cam_sim_path(slp->sl_si.sim));
cam_sim_free(slp->sl_si.sim, /*free_simq*/TRUE);
- free(slp->sl_si.sim, M_DEVBUF);
return ENODEV;
}
==== //depot/projects/scottl-camlock/src/sys/cam/scsi/scsi_sa.c#4 (text+ko) ====
@@ -27,7 +27,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/cam/scsi/scsi_sa.c,v 1.102 2005/01/05 22:34:35 imp Exp $");
+__FBSDID("$FreeBSD: src/sys/cam/scsi/scsi_sa.c,v 1.104 2005/04/14 04:51:18 mjacob Exp $");
#include <sys/param.h>
#include <sys/queue.h>
@@ -810,10 +810,29 @@
}
break;
+ case MTIOCTOP:
+ {
+ struct mtop *mt = (struct mtop *) arg;
+
+ /*
+ * Check to make sure it's an OP we can perform
+ * with no media inserted.
+ */
+ switch (mt->mt_op) {
+ case MTSETBSIZ:
+ case MTSETDNSTY:
+ case MTCOMP:
+ mt = NULL;
+ /* FALLTHROUGH */
+ default:
+ break;
+ }
+ if (mt != NULL) {
+ break;
+ }
+ /* FALLTHROUGH */
+ }
case MTIOCSETEOTMODEL:
- case MTSETBSIZ:
- case MTSETDNSTY:
- case MTCOMP:
/*
* We need to acquire the peripheral here rather
* than at open time because we are sharing writable
@@ -1822,8 +1841,8 @@
* will now attempt to rewind/load it.
*/
softc->flags &= ~SA_FLAG_TAPE_MOUNTED;
- if (CAM_DEBUGGED(ccb->ccb_h.path, CAM_DEBUG_INFO)) {
- xpt_print_path(ccb->ccb_h.path);
+ if (CAM_DEBUGGED(periph->path, CAM_DEBUG_INFO)) {
+ xpt_print_path(periph->path);
printf("error %d on TUR in samount\n", error);
}
}
@@ -1887,7 +1906,7 @@
rblim = (struct scsi_read_block_limits_data *)
malloc(8192, M_TEMP, M_WAITOK);
if (rblim == NULL) {
- xpt_print_path(ccb->ccb_h.path);
+ xpt_print_path(periph->path);
printf("no memory for test read\n");
xpt_release_ccb(ccb);
error = ENOMEM;
@@ -1909,7 +1928,7 @@
softc->device_stats);
QFRLS(ccb);
if (error) {
- xpt_print_path(ccb->ccb_h.path);
+ xpt_print_path(periph->path);
printf("unable to rewind after test read\n");
xpt_release_ccb(ccb);
goto exit;
@@ -2074,7 +2093,7 @@
if ((softc->max_blk < softc->media_blksize) ||
(softc->min_blk > softc->media_blksize &&
softc->media_blksize)) {
- xpt_print_path(ccb->ccb_h.path);
+ xpt_print_path(periph->path);
printf("BLOCK LIMITS (%d..%d) could not match current "
"block settings (%d)- adjusting\n", softc->min_blk,
softc->max_blk, softc->media_blksize);
@@ -2109,7 +2128,7 @@
error = sasetparams(periph, SA_PARAM_BLOCKSIZE,
softc->media_blksize, 0, 0, SF_NO_PRINT);
if (error) {
- xpt_print_path(ccb->ccb_h.path);
+ xpt_print_path(periph->path);
printf("unable to set fixed blocksize to %d\n",
softc->media_blksize);
goto exit;
@@ -2136,7 +2155,7 @@
softc->last_media_blksize = 512;
goto tryagain;
}
- xpt_print_path(ccb->ccb_h.path);
+ xpt_print_path(periph->path);
printf("unable to set variable blocksize\n");
goto exit;
}
@@ -2194,7 +2213,7 @@
if (error == 0) {
softc->buffer_mode = SMH_SA_BUF_MODE_SIBUF;
} else {
- xpt_print_path(ccb->ccb_h.path);
+ xpt_print_path(periph->path);
printf("unable to set buffered mode\n");
}
error = 0; /* not an error */
==== //depot/projects/scottl-camlock/src/sys/cam/scsi/scsi_target.c#4 (text+ko) ====
@@ -28,7 +28,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/cam/scsi/scsi_target.c,v 1.65 2005/02/12 04:51:19 scottl Exp $");
+__FBSDID("$FreeBSD: src/sys/cam/scsi/scsi_target.c,v 1.66 2005/03/31 12:19:41 phk Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -1035,6 +1035,7 @@
return;
*dev = make_dev(&targ_cdevsw, unit2minor(u), UID_ROOT, GID_WHEEL,
0600, "targ%d", u);
+ dev_ref(*dev);
(*dev)->si_flags |= SI_CHEAPCLONE;
}
More information about the p4-projects
mailing list