diff options
author | Kenneth R Westerback <krw@cvs.openbsd.org> | 2010-10-12 00:53:33 +0000 |
---|---|---|
committer | Kenneth R Westerback <krw@cvs.openbsd.org> | 2010-10-12 00:53:33 +0000 |
commit | a00c37d04e43794430c084035699e18c19d2826a (patch) | |
tree | 8d718c1a941578299947619c3be3908455fdae96 /sys | |
parent | e04f4ebd8cfdde3e5c356d99ac819b3964ac1fcc (diff) |
Force openings to 1 for devices that can't do tagged i/o, i.e. more
than 1 i/o active at once. This reduces the chances that concurrent
i/o's for such devices will confuse the device or the adapter code.
It also eliminates a reason for adapter code to maintain its own
queues.
Tweak all drivers that fake INQUIRY results to set the SID_CmdQue
flag, thus continuing to claim to be able to do tagged i/o.
Positive feedback from matthew@ and marco@ for an earlier version.
ok dlg@
Diffstat (limited to 'sys')
-rw-r--r-- | sys/arch/sparc64/dev/vdsk.c | 3 | ||||
-rw-r--r-- | sys/dev/ata/atascsi.c | 3 | ||||
-rw-r--r-- | sys/dev/i2o/ioprbs.c | 3 | ||||
-rw-r--r-- | sys/dev/ic/aac.c | 3 | ||||
-rw-r--r-- | sys/dev/ic/ami.c | 3 | ||||
-rw-r--r-- | sys/dev/ic/cac.c | 3 | ||||
-rw-r--r-- | sys/dev/ic/gdt_common.c | 3 | ||||
-rw-r--r-- | sys/dev/pci/ips.c | 3 | ||||
-rw-r--r-- | sys/dev/softraid.c | 3 | ||||
-rw-r--r-- | sys/scsi/scsiconf.c | 8 | ||||
-rw-r--r-- | sys/scsi/scsiconf.h | 4 |
11 files changed, 27 insertions, 12 deletions
diff --git a/sys/arch/sparc64/dev/vdsk.c b/sys/arch/sparc64/dev/vdsk.c index 80eecb1c9f3..5dd6103a0f6 100644 --- a/sys/arch/sparc64/dev/vdsk.c +++ b/sys/arch/sparc64/dev/vdsk.c @@ -1,4 +1,4 @@ -/* $OpenBSD: vdsk.c,v 1.24 2010/06/28 18:31:01 krw Exp $ */ +/* $OpenBSD: vdsk.c,v 1.25 2010/10/12 00:53:32 krw Exp $ */ /* * Copyright (c) 2009 Mark Kettenis * @@ -1076,6 +1076,7 @@ vdsk_scsi_inquiry(struct scsi_xfer *xs) inq.version = 0x05; /* SPC-3 */ inq.response_format = 2; inq.additional_length = 32; + inq.flags |= SID_CmdQue; bcopy("SUN ", inq.vendor, sizeof(inq.vendor)); bcopy("Virtual Disk ", inq.product, sizeof(inq.product)); snprintf(buf, sizeof(buf), "%u.%u ", sc->sc_major, sc->sc_minor); diff --git a/sys/dev/ata/atascsi.c b/sys/dev/ata/atascsi.c index 4e65cd39f58..a4e60466714 100644 --- a/sys/dev/ata/atascsi.c +++ b/sys/dev/ata/atascsi.c @@ -1,4 +1,4 @@ -/* $OpenBSD: atascsi.c,v 1.96 2010/09/23 11:44:22 dlg Exp $ */ +/* $OpenBSD: atascsi.c,v 1.97 2010/10/12 00:53:32 krw Exp $ */ /* * Copyright (c) 2007 David Gwynne <dlg@openbsd.org> @@ -596,6 +596,7 @@ atascsi_disk_inquiry(struct scsi_xfer *xs) inq.version = 0x05; /* SPC-3 */ inq.response_format = 2; inq.additional_length = 32; + inq.flags |= SID_CmdQue; bcopy("ATA ", inq.vendor, sizeof(inq.vendor)); ata_swapcopy(ap->ap_identify.model, inq.product, sizeof(inq.product)); diff --git a/sys/dev/i2o/ioprbs.c b/sys/dev/i2o/ioprbs.c index 2eb36da18e2..f3e63671d40 100644 --- a/sys/dev/i2o/ioprbs.c +++ b/sys/dev/i2o/ioprbs.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ioprbs.c,v 1.23 2010/09/20 06:17:49 krw Exp $ */ +/* $OpenBSD: ioprbs.c,v 1.24 2010/10/12 00:53:32 krw Exp $ */ /* * Copyright (c) 2001 Niklas Hallqvist @@ -731,6 +731,7 @@ ioprbs_internal_cache_cmd(xs) inq.version = 2; inq.response_format = 2; inq.additional_length = 32; + inq.flags |= SID_CmdQue; strlcpy(inq.vendor, "I2O", sizeof inq.vendor); snprintf(inq.product, sizeof inq.product, "Container #%02d", target); diff --git a/sys/dev/ic/aac.c b/sys/dev/ic/aac.c index 5bcff17e5fa..d7490836a91 100644 --- a/sys/dev/ic/aac.c +++ b/sys/dev/ic/aac.c @@ -1,4 +1,4 @@ -/* $OpenBSD: aac.c,v 1.50 2010/09/21 05:28:58 krw Exp $ */ +/* $OpenBSD: aac.c,v 1.51 2010/10/12 00:53:32 krw Exp $ */ /*- * Copyright (c) 2000 Michael Smith @@ -2448,6 +2448,7 @@ aac_internal_cache_cmd(struct scsi_xfer *xs) inq.version = 2; inq.response_format = 2; inq.additional_length = 32; + inq.flags |= SID_CmdQue; strlcpy(inq.vendor, "Adaptec", sizeof inq.vendor); snprintf(inq.product, sizeof inq.product, "Container #%02d", target); diff --git a/sys/dev/ic/ami.c b/sys/dev/ic/ami.c index 14af0c05ec0..b0c4573da51 100644 --- a/sys/dev/ic/ami.c +++ b/sys/dev/ic/ami.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ami.c,v 1.216 2010/09/24 01:32:09 dlg Exp $ */ +/* $OpenBSD: ami.c,v 1.217 2010/10/12 00:53:32 krw Exp $ */ /* * Copyright (c) 2001 Michael Shalayeff @@ -1393,6 +1393,7 @@ ami_scsi_cmd(struct scsi_xfer *xs) inq.version = 2; inq.response_format = 2; inq.additional_length = 32; + inq.flags |= SID_CmdQue; strlcpy(inq.vendor, "AMI ", sizeof(inq.vendor)); snprintf(inq.product, sizeof(inq.product), "Host drive #%02d", target); diff --git a/sys/dev/ic/cac.c b/sys/dev/ic/cac.c index e6169ea840f..328041b7ac7 100644 --- a/sys/dev/ic/cac.c +++ b/sys/dev/ic/cac.c @@ -1,4 +1,4 @@ -/* $OpenBSD: cac.c,v 1.41 2010/09/20 06:17:49 krw Exp $ */ +/* $OpenBSD: cac.c,v 1.42 2010/10/12 00:53:32 krw Exp $ */ /* $NetBSD: cac.c,v 1.15 2000/11/08 19:20:35 ad Exp $ */ /* @@ -630,6 +630,7 @@ cac_scsi_cmd(xs) inq.version = 2; inq.response_format = 2; inq.additional_length = 32; + inq.flags |= SID_CmdQue; strlcpy(inq.vendor, "Compaq ", sizeof inq.vendor); switch (CAC_GET1(dinfo->mirror)) { case 0: p = "RAID0"; break; diff --git a/sys/dev/ic/gdt_common.c b/sys/dev/ic/gdt_common.c index 4c018c97708..47eeccad850 100644 --- a/sys/dev/ic/gdt_common.c +++ b/sys/dev/ic/gdt_common.c @@ -1,4 +1,4 @@ -/* $OpenBSD: gdt_common.c,v 1.54 2010/09/20 06:17:49 krw Exp $ */ +/* $OpenBSD: gdt_common.c,v 1.55 2010/10/12 00:53:32 krw Exp $ */ /* * Copyright (c) 1999, 2000, 2003 Niklas Hallqvist. All rights reserved. @@ -963,6 +963,7 @@ gdt_internal_cache_cmd(struct scsi_xfer *xs) inq.version = 2; inq.response_format = 2; inq.additional_length = 32; + inq.flags |= SID_CmdQue; strlcpy(inq.vendor, "ICP ", sizeof inq.vendor); snprintf(inq.product, sizeof inq.product, "Host drive #%02d", target); diff --git a/sys/dev/pci/ips.c b/sys/dev/pci/ips.c index 3ea223970af..346e66ef29a 100644 --- a/sys/dev/pci/ips.c +++ b/sys/dev/pci/ips.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ips.c,v 1.103 2010/09/20 06:17:49 krw Exp $ */ +/* $OpenBSD: ips.c,v 1.104 2010/10/12 00:53:32 krw Exp $ */ /* * Copyright (c) 2006, 2007, 2009 Alexander Yurchenko <grange@openbsd.org> @@ -934,6 +934,7 @@ ips_scsi_cmd(struct scsi_xfer *xs) inq.version = 2; inq.response_format = 2; inq.additional_length = 32; + inq.flags |= SID_CmdQue; strlcpy(inq.vendor, "IBM", sizeof(inq.vendor)); snprintf(inq.product, sizeof(inq.product), "LD%d RAID%d", target, drive->raid); diff --git a/sys/dev/softraid.c b/sys/dev/softraid.c index df9d63562a9..16c78026a85 100644 --- a/sys/dev/softraid.c +++ b/sys/dev/softraid.c @@ -1,4 +1,4 @@ -/* $OpenBSD: softraid.c,v 1.214 2010/09/23 18:49:39 oga Exp $ */ +/* $OpenBSD: softraid.c,v 1.215 2010/10/12 00:53:32 krw Exp $ */ /* * Copyright (c) 2007, 2008, 2009 Marco Peereboom <marco@peereboom.us> * Copyright (c) 2008 Chris Kuethe <ckuethe@openbsd.org> @@ -3473,6 +3473,7 @@ sr_raid_inquiry(struct sr_workunit *wu) inq.version = 2; inq.response_format = 2; inq.additional_length = 32; + inq.flags |= SID_CmdQue; strlcpy(inq.vendor, sd->sd_meta->ssdi.ssd_vendor, sizeof(inq.vendor)); strlcpy(inq.product, sd->sd_meta->ssdi.ssd_product, diff --git a/sys/scsi/scsiconf.c b/sys/scsi/scsiconf.c index fe1262ded9b..839f43624c0 100644 --- a/sys/scsi/scsiconf.c +++ b/sys/scsi/scsiconf.c @@ -1,4 +1,4 @@ -/* $OpenBSD: scsiconf.c,v 1.166 2010/09/08 00:58:05 dlg Exp $ */ +/* $OpenBSD: scsiconf.c,v 1.167 2010/10/12 00:53:32 krw Exp $ */ /* $NetBSD: scsiconf.c,v 1.57 1996/05/02 01:09:01 neil Exp $ */ /* @@ -1008,6 +1008,12 @@ scsi_probedev(struct scsibus_softc *scsi, int target, int lun) sc_link->quirks |= finger->quirks; /* + * If the device can't use tags, >1 opening may confuse it. + */ + if (ISSET(sc_link->quirks, SDEV_NOTAGS)) + sc_link->openings = 1; + + /* * note what BASIC type of device it is */ if ((inqbuf->dev_qual2 & SID_REMOVABLE) != 0) diff --git a/sys/scsi/scsiconf.h b/sys/scsi/scsiconf.h index 21be0e0f57f..3b98b3e50ad 100644 --- a/sys/scsi/scsiconf.h +++ b/sys/scsi/scsiconf.h @@ -1,4 +1,4 @@ -/* $OpenBSD: scsiconf.h,v 1.140 2010/09/20 00:19:47 dlg Exp $ */ +/* $OpenBSD: scsiconf.h,v 1.141 2010/10/12 00:53:32 krw Exp $ */ /* $NetBSD: scsiconf.h,v 1.35 1997/04/02 02:29:38 mycroft Exp $ */ /* @@ -585,7 +585,7 @@ void scsi_remove_link(struct scsibus_softc *, struct scsi_link *); extern const u_int8_t version_to_spc[]; -#define SCSISPC(x)(version_to_spc[(x) & SID_ANSII]) +#define SCSISPC(x) (version_to_spc[(x) & SID_ANSII]) struct scsi_xfer * scsi_xs_get(struct scsi_link *, int); void scsi_xs_exec(struct scsi_xfer *); |