Home | History | Annotate | Download | only in scsipi
History log of /src/sys/dev/scsipi/scsi_base.c
RevisionDateAuthorComments
 1.93  03-May-2019  mlelstv Avoid null pointer deref in printing xfer mode when no target driver
is attached. Fixes kern/54157.
 1.92  17-Jun-2017  mlelstv branches: 1.92.6;
The atapibus detach path did hold the channel mutex while calling into autoconf,
which would trigger a panic when unplugging a USB ATAPI CDROM.

Align detach code for scsibus and atapibus to fix this.

Also avoid races when detaching devices by replacing callout_stop with
callout_halt.
 1.91  20-Nov-2016  mlelstv branches: 1.91.8;
Make scsipi framework MPSAFE.

Data structures are now protected by a per-adapter mutex at IPL_BIO
that is created by the scsibus or atapibus instance when the adapter
is configured.
The enable reference counter and the channel freeze counter which are
currently used by HBA code before the adapter is configured, are made
atomic.
The target drivers are now all tagged as D_MPSAFE.

Almost all HBA drivers still require the kernel lock to present,
so all callbacks into HBA code are still protected by kernel lock
unless the driver is tagged as SCSIPI_ADAPT_MPSAFE.

TODO: refactor sd and cd to use dksubr.
 1.90  20-Apr-2012  bouyer branches: 1.90.2; 1.90.16; 1.90.20;
Add a bustype_async_event_xfer_mode() callback to scsipi_bustype (which can
be NULL), so that transport-specific details of transfer mode setting/printing
can be handled more easily.
Move scsipi_async_event_xfer_mode() and scsipi_print_xfer_mode() to
scsi_base.c and split in parallel scsi and FC/SAS parts.
size of struct scsipi_bustype has changed, welcome to 6.99.5
 1.89  28-Apr-2008  martin branches: 1.89.34; 1.89.38;
Remove clause 3 and 4 from TNF licenses
 1.88  05-Apr-2008  cegger branches: 1.88.2; 1.88.4;
use aprint_*_dev and device_xname
 1.87  16-Nov-2006  christos branches: 1.87.48;
__unused removal on arguments; approved by core.
 1.86  12-Oct-2006  christos - sprinkle __unused on function decls.
- fix a couple of unused bugs
- no more -Wno-unused for i386
 1.85  11-Dec-2005  christos branches: 1.85.20; 1.85.22;
merge ktrace-lwp.
 1.84  18-Sep-2004  mycroft Standardize some variable names and the calling pattern for scsipi_command().
Use void pointer casts.
 1.83  17-Sep-2004  mycroft Remove the "xfer" argument to scsipi_command().
 1.82  17-Sep-2004  mycroft Change the way bustype_cmd is used. Rather than having it be responsible for
calling scsipi_make_xs() and scsipi_execute_xs(), instead push these into
scsipi_command. Make bustype_cmd and PHOLD/PRELE be called from
scsipi_execute_xs(). This allows us to create a xfer structure -- possibly on
the stack -- and call scsipi_execute_xs() directly.
 1.81  09-Sep-2004  bouyer Make the xxstart() functions reentrant again, as some drivers HBA can call
scsipi_done() from their scsipi_request().
For this, add a struct scsipi_xfer * argument to scsipi_command().
If not NULL scsipi_command() will use this to enqueue this xfer, otherwise
it'll try to allocate a new one. This scsipi_xfer has to be allocated
and initialised by scsipi_make_xs() or equivalent.
In xxstart(), allocate a scsipi_xfer using scsipi_make_xs(), and if not NULL,
dequeue the buffer before calling scsipi_command(). This makes sure that
scsipi_command() will not fail, and also makes sure that xxstart() won't
be called again between the BUFQ_PEEK() and BUFQ_GET().

Fix "dequeued wrong buf" panics reported by Juergen Hannken-Illjes in
private mail and Andreas Wrede on current-users@.
Thanks to Jason Thorpe and Chuck Silver for review, and Andreas Wrede for
testing the patch.
 1.80  27-Aug-2004  bouyer Improve handling of memory shortage, to fix problems like:
sd3(mpt0:0:1:0): unable to allocate scsipi_xfer
sd3: not queued, error 12
Havard Eidnes's analysis of this problem is that the scsipi_xfer pool is
competing for resources with other pools, including the the inode and vnode
pools which can grow quite large.

*_scsipi_cmd(): don't biodone the buffer if scsipi_make_xs() fails, let the
caller deal with the problem
start function of block devices drivers: dequeue the buffer after the
scsipi_command() call. If scsipi_command() fails with ENOMEM don't dequeue
the buffer, and schedule a callout to call the start function after
some delay.
scsipi_init(): prime the scsipi_xfer_pool with one page. This ensure that
there is always some scsipi_xfer to play with. If scsipi_command() fails
because of pool_get(), we're sure there will be resources available later,
when the pending commands have completed.

Reviewed by Jason Thorpe and Havard Eidnes.
Todo: remove the "unable to allocate scsipi_xfer" and "not queued, error %d"
printfs, but I choose to keep them for now, to help make sure the code does
what it should.
 1.79  21-Aug-2004  thorpej Use ANSI function decls and make use of static.
 1.78  05-Aug-2004  bouyer scsi_kill_pending(): don't kill the commands in periph_xferq here.
The controller is handling them, calling scsipi_done() here will end up in the
xfer being scsipi_done()'ed a second time when it completes in the controller
code. In addition, the way the loop was done here would end up in an infinite
loop, because the channel kernel thread needs to run to remove a command from
this queue.

scsibusdetach(): scsipi_done() all commands from periph_xferq. The controller
is already gone, and these commands will never complete.
Shut down the channel (which will cause the kenrel thread to exit) after
detaching the childs, as they will need the kernel thread for
scsipi_wait_drain().

Fix kernel hang or deadlock when detaching devices (either by scsictl detach
or unplug) with active commands.
 1.77  15-Nov-2001  lukem branches: 1.77.16; 1.77.18;
don't need <sys/types.h> when including <sys/param.h>
 1.76  13-Nov-2001  lukem add RCSIDs
 1.75  18-Jul-2001  thorpej bzero -> memset
 1.74  25-Apr-2001  bouyer branches: 1.74.2;
Pull up the thorpej_scsipi branch to main branch.
This is a completely rewritten scsipi_xfer execution engine, and the
associated changes to HBA drivers. Overview of changes & features:
- All xfers are queued in the mid-layer, rather than doing so in an
ad-hoc fashion in individual adapter drivers.
- Adapter/channel resource management in the mid-layer, avoids even trying
to start running an xfer if the adapter/channel doesn't have the resources.
- Better communication between the mid-layer and the adapters.
- Asynchronous event notification mechanism from adapter to mid-layer and
peripherals.
- Better peripheral queue management: freeze/thaw, sorted requeueing during
recovery, etc.
- Clean separation of peripherals, adapters, and adapter channels (no more
scsipi_link).
- Kernel thread for each scsipi_channel makes error recovery much easier
(no more dealing with interrupt context when recovering from an error).
- Mid-layer support for tagged queueing: commands can have the tag type
set explicitly, tag IDs are allocated in the mid-layer (thus eliminating
the need to use buggy tag ID allocation schemes in many adapter drivers).
- support for QUEUE FULL and CHECK CONDITION status in mid-layer; the command
will be requeued, or a REQUEST SENSE will be sent as appropriate.

Just before the merge syssrc has been tagged with thorpej_scsipi_beforemerge
 1.73  03-Apr-2000  enami branches: 1.73.6;
When killing pending xfers on device detach, we can't expect scsipi_done
to remove all xfers from the pending queue. It removes only xfers for
asynchronous transactions. So, simply loop over all pending xfers
with calling scsipi_done and wait xfers to drain. Addresses PR#9703.
 1.72  17-Mar-2000  soren scsiprint() is needed even without scsibus'es, so move it to scsi_base.c .
 1.71  17-Jan-2000  bouyer Use SCSIPIRETRIES instead of hard-coded value '2' for number of retries in
common routines. Define SCSIPIRETRIES as 4, so that the command will finally
succeed after several consecutive downgrades from UDMA2 to PIO4.
 1.70  20-Oct-1999  enami Cancel active transfers on aic/wdc detach.
Also makes LS-120 drive works for me again.
 1.69  30-Sep-1999  thorpej branches: 1.69.2; 1.69.4; 1.69.6;
Cleanup the scsipi_xfer flags:
- `flags' is now gone, replaced with `xs_control' and `xs_status'.
- Massive cleanup of the control flags. Now we explicitly say that
a job is to complete asynchronously, rather than relying on side-effects,
and use a new flag to now that device discovery is being performed.
- Do SCSI device discovery interrupt-driven.
 1.68  28-Aug-1999  thorpej If scsipi_make_xs() fails, make sure to flag the buffer as error'd,
if provided, and biodone() it. Callers of scsipi_command() expect
this to be done.
 1.67  12-Jun-1999  pk scsipi_free_xs() wants to be called at splbio; do it.
 1.66  17-Nov-1998  bouyer branches: 1.66.4; 1.66.6; 1.66.8;
Rename scsi_interpret_sense() to scsipi_interpret_sense() and move it from
scsi_base.c to scsipi_base.c. Rename the functions from scsi_verbose.c
too, and rename the file itself. Cleaup includes too (scsi_*.h should not
be #included in scsipi_*.h files, which are supposed to be
common to atapi and scsi).
 1.65  15-Aug-1998  mycroft Assign my copyrights to TNF.
 1.64  30-Jul-1998  mjacob branches: 1.64.2;
opt_scsiverbose.h now is opt_scsi.h and contains the defopted
SCSIVERBOSE and the new ST_ENABLE_EARLYWARN.
 1.63  15-Jul-1998  mjacob part of fix for kern/3835: use of enumerated returns from target sense handlers
 1.62  11-Jul-1998  mjacob Clarify that Sense Key 1 is a "RECOVERED ERROR"- not just an error.
 1.61  01-Jul-1998  mjacob Use new Sense Key defines (for clarity)
 1.60  28-Mar-1998  christos Split out the verbose printing of scsi messages, so that user programs
can use the printing routines.
 1.59  05-Feb-1998  mrg initial import of the new virtual memory system, UVM, into -current.

UVM was written by chuck cranor <chuck@maria.wustl.edu>, with some
minor portions derived from the old Mach code. i provided some help
getting swap and paging working, and other bug fixes/ideas. chuck
silvers <chuq@chuq.com> also provided some other fixes.

this is the rest of the MI portion changes.

this will be KNF'd shortly. :-)
 1.58  15-Jan-1998  cgd add support for an ATAPI attachment for 'sd'.
fix 'cd' driver's NCD_SCSI bogosity (was using testing wrong macro!)
clean up in various ways:
* make common atapi_mode_{sense,select}() functions.
* put ATAPI data structures in more sensible headers, split up by
device type.
* include headers a bit more carefully.
* pass flags to attachment-specific cd functions, and use them.
* get rid of SCSI bits in scsipi_base.h's scsipi_make_xs(), move
them into the correct place in scsi_base.c.
* fix minor typo in struct name in scsipiconf.h (which was apparently
never used except in a #define later in the same file).
* use __attribute__ to force 4-byte alignment for xs command store,
so that architectures trying to bus_space_write_multi_N() (where
N > 1) that data to a controller won't lose.
* clean up a few comments in typos, and make a few #defines easier to
understand/maintain.
* rename cd_link.h to cdvar.h (via repository copy). This is exactly
what a 'var' file is supposed to be.
 1.57  30-Dec-1997  is EACCESS->EROFS, for the write on readonly medium error.
 1.56  23-Nov-1997  enami Remove newline after printing FRU CODE instead of removing
newline before printing SKSV information.
 1.55  18-Oct-1997  thorpej Implement two macros, scsipi_command() and scsipi_command_direct(), and
use them to hide the structure of the function pointers we jump through
to issue a command.
 1.54  08-Oct-1997  mjacob Slight formatting change.
 1.53  08-Oct-1997  mjacob The bit pointer field is a 3 bit value- not 4.
 1.52  02-Oct-1997  mjacob kern/3022: make sure that printing sense info in SCSIDEBUG case starts at
the right place and contains the right number of bytes.
 1.51  01-Oct-1997  mjacob Silly boy.... don't print out sense info if the command was marked SCSI_SILENT,
and print the opcode with a leading 0x if you're printing in hex.
 1.50  01-Oct-1997  enami Cosmetic changes to keep coding style consistency in this directory;

- Indent with tab of width 8.
- Use four column to indent continuation line.
- Fold long line if possible.
- Use return (xx) instead of return xx.
- Compare pointer against NULL instead of testing like boolean.
- Delete whitespace at the end of line.
- Delete whitespace in front of function call operator.
- Delete whitespace after cast.
- Dereference a pointer to function explicitly.
- Add an empty line after local variable declaration.
- Use NULL instead of (char *)0.
- Dont use block for single statement.
 1.49  13-Sep-1997  enami Declare SCSIVERBOSE by defopt in files.scsipi. Include opt_scsiverbose.h
in scsi_base.c and st.c.
 1.48  05-Sep-1997  bouyer Restore indentation of SCSIVERBOSE output.
 1.47  27-Aug-1997  bouyer branches: 1.47.2;
Merge scsipi branch in the mainline. This add support for ATAPI devices
(currently only CD-ROM drives on i386). The sys/dev/scsipi system provides 2
busses to which devices can attach (scsibus and atapibus). This needed to
change some include files and structure names in the low level scsi drivers.
 1.46  20-Aug-1997  mjacob Add in (enabled by SCSIVERBOSE option since it adds a fair amount of string
gup to the kernel) more detailed SCSI error printing, based off of final
SCSI-2 specification. This will also print out things like progress indicator
errors, and will also dump out additional sense bytes that haven't been decoded.

Also, turned the error message 'DELAYED' to 'DEFERRED' since that's more
accurate.
 1.45  04-Aug-1997  fair %x -> 0x%x
 1.44  09-Jun-1997  matthias branches: 1.44.4;
In case of a SCSI-error print the extended sense information and not
some sort of random garbage.
 1.43  02-Apr-1997  mycroft Push the buffer cleanup code into scsi_done(), and split it so that biodone()
is called *after* the driver `done' routine. This fixes disk I/O statistics
on SCSI devices.

Also, calling the `done' routine with a `complete' argument of 0 and actually
having it do anything meaningful loses in at least 3 ways, so just nuke the
argument altogether and don't call it this way. If the driver needs to do
some error handling, that's what `err_handler' is for.
 1.42  20-Mar-1997  thorpej Back out part of the previous patch - not only does stuffing a sizeof()
into 8 bits generate (bogus) warnings on some architectures, but the
change to pad on "scsi inquiry" is no longer needed, apparently.
Thanks to Matthias Pfaller for pointing the latter out to me.
 1.41  18-Mar-1997  thorpej Two changes from Ian Dall <ian.dall@dsto.defence.gov.au>:
- Deal with devices that ignore the length specified in the
inquiry command.
- Allow asynchronous requests without using a buf (key off NOSLEEP instead).
 1.40  12-Oct-1996  christos revert previous kprintf change
 1.39  10-Oct-1996  christos printf -> kprintf, sprintf -> ksprintf
 1.38  03-Sep-1996  thorpej Store the SCSI version in the scsi_link, and set the LUN in the CDB
if the version is <= SCSI-2. This should help some older SCSI
devices that previously needed the "NOLUNS" quirk. While this is
not strictly necessary on SCSI-2 devices, the spec allows it,
so we set it for SCSI-2 devices "just in case". See section 7.2.2 of
Draft X3T9.2 Rev 10L for details.
 1.37  05-Jul-1996  christos - Apply PR/2535: Add support for flex scsi disks.
- Add a quirk called SCSI_NOMODESENSE for drives like the iomega jaz,
that don't support mode sense.
 1.36  03-May-1996  christos - SCSIDEBUG printf() fixes.
 1.35  22-Apr-1996  christos remove include of <sys/cpu.h>
 1.34  19-Mar-1996  mycroft Define a full set of [234][bl]tol() and lto[234][bl]() conversion functions,
inlined.
Use sized types in protocol structures.
Make the definition of scsi_sense_data less ugly.
 1.33  14-Feb-1996  christos scsi prototypes
 1.32  31-Jan-1996  briggs Handle COMMAND ABORTED by forcing a retry. PR#2003, but with some more
diagnostic info.
 1.31  12-Jan-1996  thorpej Handle cases like the following:
- controller calls scsi_done() with error XS_TIMEOUT
- scsi_done() calls sddone()
- sddone() calls disk_unbusy()
- scsi_done() calls controller to retry command (missing the
call to disk_busy())
- controller calls scsi_done()
- scsi_done() calls sddone()
- sddone() calls disk_busy(), which panics because of the imbalance.
Bug noticed by Leo Weppleman, who also suggested this fix; pass an additional
boolean argument ("complete") to the device's "done" routine, with a
value of `0' passed from the previous call to "done", and add an additional
call to "done" when the xfer resources are freed.
 1.30  26-Sep-1995  thorpej Don't declare Debugger(). It's handled in <sys/systm.h>.
#include <sys/systm.h> where necessary, as suggested by Jonathan Stone.
Fixes PR #1511.
 1.29  03-May-1995  mycroft Make the byte-shifting code consistent.
 1.28  26-Jan-1995  mycroft Update copyrights.
 1.27  26-Jan-1995  mycroft Redo the `wait for spin up' code. The Mach 3 method clearly doesn't work.
Also, rearrange the first open sequences a bit; SDEV_OPEN is no longer magic.
 1.26  16-Jan-1995  mycroft Trivial simplification.
 1.25  13-Jan-1995  mycroft Add a DIAGNOSTIC check.
 1.24  30-Dec-1994  mycroft Fix some oversights in the debugging code.
 1.23  29-Dec-1994  mycroft Fix a couple of things in the sense printing code.
 1.22  28-Dec-1994  mycroft Numerous changes. Many bugs fixed, better autoconfig, a few new features.
 1.21  01-Dec-1994  mycroft Remove some redundant code.
 1.20  01-Dec-1994  mycroft Remove unneeded override of SCSI_NOSLEEP.
 1.19  01-Dec-1994  mycroft Uncomment call to scsi_user_done(), and remove a duplicate biodone() (and
another si_free()).
 1.18  22-Nov-1994  deraadt C botch repair from bostic
 1.17  21-Nov-1994  mycroft Replace dev_unit with device_softc in scsi_link. Change argument to foostart()
to void*.
 1.16  30-Aug-1994  deraadt remove an un-aligned access
 1.15  29-Jun-1994  deraadt branches: 1.15.2;
knf
 1.14  29-Jun-1994  cgd New RCS ID's, take two. they're more aesthecially pleasant, and use 'NetBSD'
 1.13  09-May-1994  chopps remove union's from sense_data struct, conditionaly define RAW_PART
 1.12  20-Apr-1994  mycroft Maintain the xs free list with LIST_*().
 1.11  11-Apr-1994  mycroft Fix various types. Remove some outdated flags. Actually sleep a bit if
there are too many commands pending on the controller.
 1.10  11-Apr-1994  mycroft Combine scsi_start_unit() and scsi_stop_unit(), and increase the start
timeout (again).
 1.9  29-Mar-1994  mycroft New SCSI system, based on Julian's more recent work.
 1.8  16-Feb-1994  mycroft Increase the timeout for start_unit.
 1.7  14-Feb-1994  mycroft PARANOID --> DIAGNOSTIC for inexpensive tests.
 1.6  01-Feb-1994  mycroft Add scsi_stop_unit(), from Mac code. Other minor nits.
 1.5  13-Dec-1993  mycroft 0xfe000000 --> KERNBASE
 1.4  27-Nov-1993  mycroft Remove remaining sleep()s.
 1.3  25-Nov-1993  mycroft Patch from Julian to fix hangage when opening a device multiple times.
 1.2  24-Nov-1993  mycroft Still under construction...
 1.1  24-Nov-1993  mycroft Under construction...
 1.15.2.1  06-Oct-1994  mycroft Update from trunk.
 1.44.4.1  23-Aug-1997  thorpej Update marc-pcmcia branch from trunk.
 1.47.2.5  14-Oct-1997  thorpej Update marc-pcmcia branch from trunk.
 1.47.2.4  16-Sep-1997  thorpej Update marc-pcmcia branch from trunk.
 1.47.2.3  06-Sep-1997  thorpej Update marc-pcmcia branch from trunk.
 1.47.2.2  27-Aug-1997  thorpej Update marc-pcmcia branch from trunk.
 1.47.2.1  27-Aug-1997  thorpej file scsi_base.c was added on branch marc-pcmcia on 1997-08-27 23:33:10 +0000
 1.64.2.2  30-Jul-1998  mjacob opt_scsiverbose.h now is opt_scsi.h and contains the defopted
SCSIVERBOSE and the new ST_ENABLE_EARLYWARN.
 1.64.2.1  30-Jul-1998  mjacob file scsi_base.c was added on branch eeh-paddr_t on 1998-07-30 00:49:21 +0000
 1.66.8.1  30-Nov-1999  itojun bring in latest KAME (as of 19991130, KAME/NetBSD141) into kame branch
just for reference purposes.
This commit includes 1.4 -> 1.4.1 sync for kame branch.

The branch does not compile at all (due to the lack of ALTQ and some other
source code). Please do not try to modify the branch, this is just for
referenre purposes.

synchronization to latest KAME will take place on HEAD branch soon.
 1.66.6.1  21-Jun-1999  thorpej Sync w/ -current.
 1.66.4.2  23-Jan-2000  he Pull up revision 1.71 (requested by bouyer):
Use SCSIPIRETRIES instead of hard-coded value '2' for number of
retries in common routines, and define it as 4 so that ATAPI
command will succeed after several downgrade.
 1.66.4.1  24-Jun-1999  perry pullup 1.66->1.67 (pk): deal with missing "raise interrupt level" code
 1.69.6.1  27-Dec-1999  wrstuden Pull up to last week's -current.
 1.69.4.1  15-Nov-1999  fvdl Sync with -current
 1.69.2.4  20-Nov-2000  bouyer Update thorpej_scsipi to -current as of a month ago
A i386 GENERIC kernel compiles without the siop, ahc and bha drivers
(will be updated later). i386 IDE/ATAPI and ncr work, as well as
sparc/esp_sbus. alpha should work as well (untested yet).
siop, ahc and bha will be updated once I've updated the branch to current
-current, as well as machine-dependant code.

Main changes to the scsipi code itself:
- add a scsipi_channel->type to allow umass to attach to both atapibus and
scsibus. Will die when IDE is converted from ata_atapi_attach to
scsipi_channel/scsipi_adapter
- Add a chan_defquirks to scsipi_channel so that adapters can pass a default
set of quirks to be set for each device attached
- add adapt_getgeom and adapt_accesschk callbacks
 1.69.2.3  01-Nov-1999  thorpej Fixup the SC_DEBUG() stuff for the new world order.
 1.69.2.2  20-Oct-1999  thorpej Sync w/ trunk.
 1.69.2.1  19-Oct-1999  thorpej Completely rewritten scsipi_xfer execution engine:
- All xfers are queued in the mid-layer, rather than doing so in an
ad-hoc fashion in individual adapter drivers.
- Adapter/channel resource management in the mid-layer, avoids even trying
to start running an xfer if the adapter/channel doesn't have the resources.
- Better communication between the mid-layer and the adapters.
- Asynchronous event notification mechanism from adapter to mid-layer and
peripherals.
- Better peripheral queue management: freeze/thaw, sorted requeueing during
recovery, etc.
- Clean separation of peripherals, adapters, and adapter channels (no more
scsipi_link).
- Kernel thread for each scsipi_channel makes error recovery much easier
(no more dealing with interrupt context when recovering from an error).
- Mid-layer support for tagged queueing: commands can have the tag type
set explicitly, tag IDs are allocated in the mid-layer (thus eliminating
the need to use buggy tag ID allocation schemes in many adapter drivers).

There is a lot more work to do, but this correctly functions for the most
part on several file servers I run.
 1.73.6.4  08-Jan-2002  nathanw Catch up to -current.
 1.73.6.3  14-Nov-2001  nathanw Catch up to -current.
 1.73.6.2  24-Aug-2001  nathanw Catch up with -current.
 1.73.6.1  21-Jun-2001  nathanw Catch up to -current.
 1.74.2.2  10-Jan-2002  thorpej Sync kqueue branch with -current.
 1.74.2.1  03-Aug-2001  lukem update to -current
 1.77.18.1  11-Sep-2004  he Pull up revisions 1.80-1.81 (via patch, requested by bouyer in ticket #837):
Improve handling of memory shortage, to fix problems like:
sd3(mpt0:0:1:0): unable to allocate scsipi_xfer
sd3: not queued, error 12
The theory is that other consumers of pool memory is causing
this memory shortage in certain somewhat hard to reproduce
situations.
This is done by giving scsipi_command an extra argument to
optionally pass a preallocated scsipi_xfer, and allocating a
scsipi_xfer before dequeueing a buffer in the various *start()
functions. If the allocation of a scsipi_xfer fails, schedule
a callout for delayed invocation of the start function. Also
reserve one page for scsipi_xfer structs, to ensure that we will
eventually have some available once pending commands complete.
Should fix PR#25670.
 1.77.16.5  21-Sep-2004  skrll Fix the sync with head I botched.
 1.77.16.4  18-Sep-2004  skrll Sync with HEAD.
 1.77.16.3  03-Sep-2004  skrll Sync with HEAD
 1.77.16.2  25-Aug-2004  skrll Sync with HEAD.
 1.77.16.1  12-Aug-2004  skrll Sync with HEAD.
 1.85.22.2  10-Dec-2006  yamt sync with head.
 1.85.22.1  22-Oct-2006  yamt sync with head
 1.85.20.1  18-Nov-2006  ad Sync with head.
 1.87.48.1  02-Jun-2008  mjf Sync with HEAD.
 1.88.4.1  16-May-2008  yamt sync with head.
 1.88.2.1  18-May-2008  yamt sync with head.
 1.89.38.1  29-Apr-2012  mrg sync to latest -current.
 1.89.34.1  23-May-2012  yamt sync with head.
 1.90.20.1  07-Jan-2017  pgoyette Sync with HEAD. (Note that most of these changes are simply $NetBSD$
tag issues.)
 1.90.16.2  28-Aug-2017  skrll Sync with HEAD
 1.90.16.1  05-Dec-2016  skrll Sync with HEAD
 1.90.2.1  03-Dec-2017  jdolecek update from HEAD
 1.91.8.1  21-Jun-2017  snj Pull up following revision(s) (requested by mlelstv in ticket #53):
sys/dev/scsipi/atapiconf.c: revision 1.91
sys/dev/scsipi/cd.c: revision 1.341
sys/dev/scsipi/scsi_base.c: revision 1.92
sys/dev/scsipi/scsiconf.c: revision 1.280
sys/dev/scsipi/scsipi_base.c: revisions 1.176, 1.177
sys/dev/scsipi/sd.c: revision 1.325
sys/dev/scsipi/ss.c: revision 1.89
sys/dev/scsipi/st.c: revision 1.231
The atapibus detach path did hold the channel mutex while calling into autoconf,
which would trigger a panic when unplugging a USB ATAPI CDROM.
Align detach code for scsibus and atapibus to fix this.
Also avoid races when detaching devices by replacing callout_stop with
callout_halt.
--
pass config_detach error to caller.
 1.92.6.1  10-Jun-2019  christos Sync with HEAD

RSS XML Feed