Home | History | Annotate | Download | only in ata
History log of /src/sys/dev/ata/ata_subr.c
RevisionDateAuthorComments
 1.13  23-Dec-2020  skrll Add missing '\n' in debug
 1.12  19-Dec-2020  jmcneill ata_timeout: restore spl in ATACH_RECOVERING path
 1.11  02-May-2020  thorpej branches: 1.11.2;
Back out changes to use a threadpool for now; it's causing trouble
for some folks on Thinkpads.
 1.10  25-Apr-2020  thorpej Rather than creating a kthread-per-channel, use a threadpool and a
threadpool-job-per-channel for the in-thread-context work that needs
to be done (which is rare).

On one of my test systems, this results in the total number of LWPs
after multi-user boot dropping from 116 to 78.
 1.9  04-Apr-2020  jdolecek branches: 1.9.2;
stop xfer timeouts during recovery, all xfers will be requeued anyway

this avoids race with the timeout routine when processing the xfers
for requeueing

should fix PR kern/54790 by Izumi Tsutsui
 1.8  07-Nov-2018  jdolecek branches: 1.8.4;
don't touch the queue structure in ata_queue_active() if atabus is already
detached from the channel

fixes panic on null pointer derefence during shutdown reported privately
by Launey Thomas
 1.7  22-Oct-2018  jdolecek Merge jdolecek-ncqfixes branch

- ata_xfer's are dynamicall allocated as needed using a pool, no longer
limited to number of possible openings supported by controller; dump
and recovery paths use dedicated pre-allocated storage
- moved callouts and condvars from ata_xfer to queue or channel, so that
ata_xfer does not need special initialization
- slot allocation now done when xfer is being activated, uncoupled
from memory allocation; active slots are no longer tracked by controller
code
- channel and drive reset is done always via the atabus thread, and
now executes with channel locked the whole time
- NCQ recovery moved to shared function, and run via the thread also
- added some workarounds for buggy error recovery AHCI emulation in QEMU
and Parallels

designed to primarily fix kern/52614, but might also help with kern/47041
and kern/53183
 1.6  10-Aug-2018  jdolecek branches: 1.6.2;
fix race in wd_lastclose() on systems with two ide disks on same
channel, which happened when one disk had pending I/O while the other
disk executed the final disk flush - need to restart bufq processing
once xfer is freed in this case

it could happen e.g. on boot when system executes fsck on different
partitions on the two drives in parallell and hence open and closes
the disk devices repeatedly

add KASSERT() for empty bufq on wd_lastclose(), and fix similar issue
also on suspend/standby path

this was introduced by the NCQ merge and not dksubr - before the merge
each drive had their own xfer, so they could not block each other

fixes PR kern/52783 by Onno van der Linden; many thanks for extensive
help with tracking this down
 1.5  06-Aug-2018  jdolecek add wddebug() which dumps some status for attached disks; indended for
debugging of PR kern/52783
 1.4  20-Oct-2017  jdolecek branches: 1.4.2; 1.4.4; 1.4.6;
move ata_queue_alloc(1) and ata_queue_free() calls to ata_channel_init()
and ata_channel_destroy() respectively, to make attachment code simpler,
and to make it easier to spot special queue manipulation like cmdide(4)

on topic of PR kern/52606
 1.3  19-Oct-2017  jdolecek more detailed debug info; also sync DEBUG_* values in wd.c with ata.c
 1.2  17-Oct-2017  jdolecek reintroduce ATACH_IRQ_WAIT flag for attachments using wdcintr(), only
process the interrupt when the flag is set - this fixes spurious interrupt
during post-reset drive setup in wdc_ata_bio_start(), and wdc_atapi_start()

while those functions set WDCTL_IDS, this seems to be ignored by certain
(maybe all) PCI-IDE controllers; usually the implicit KERNEL_LOCK() would
prevent the interrupt anyway, but not when the start routine is started
from the atabus thread, which doesn't take it

fixes 'panic: wdc_ata_bio_intr: bad state' reported on current-users
by Chavdar Ivanov
 1.1  10-Oct-2017  jdolecek split off functions used by 'wd* at umass?' into separate file, unfortunately
the previous approach with NATABUS doesn't work for kernels which include
MODULAR, but not atabus - such as macppc and evbarm
 1.4.6.2  08-Apr-2020  martin Merge changes from current as of 20200406
 1.4.6.1  10-Jun-2019  christos Sync with HEAD
 1.4.4.2  26-Nov-2018  pgoyette Sync with HEAD, resolve a couple of conflicts
 1.4.4.1  06-Sep-2018  pgoyette Sync with HEAD

Resolve a couple of conflicts (result of the uimin/uimax changes)
 1.4.2.2  03-Dec-2017  jdolecek update from HEAD
 1.4.2.1  20-Oct-2017  jdolecek file ata_subr.c was added on branch tls-maxphys on 2017-12-03 11:36:59 +0000
 1.6.2.8  11-Oct-2018  jdolecek refactor shared parts of the SATA error recovery into new function
ata_recovery_resume() and use for ahcisata/siisata/mvsata, also replace
per-controller hold/unhold with generic version

move the shared recovery code into separate file ata_recovery.c
 1.6.2.7  06-Oct-2018  jdolecek actually, just make dump use the same queue skip as recovery, and remove the
no longer necessary ata_queue_reset() call from wd(4)

also for PR kern/47041
 1.6.2.6  22-Sep-2018  jdolecek remove explicit ata_channel_start() calls, it's no longer necessary
now that ata_xfer's are allocated via pool and not really limited;
replace by just a callout to restart the processing for rare cases
where system runs out of memory
 1.6.2.5  22-Sep-2018  jdolecek separate ata_xfer slot allocation and the memory allocation, so that
there can be more queued xfers than number of supported slots by controller,
and use a pool instead of custom pre-allocation

primarily to help PR kern/52614

remove no longer needed custom wd(4) logic for flush cache

switch also wd(4) trim/suspend/setcache/wdioctlstrategy to sleep waiting
for the memory, they are all called from process context and this
avoids spurious failures
 1.6.2.4  17-Sep-2018  jdolecek convert from malloc()/free() to kmem_zalloc()/kmem_free()
 1.6.2.3  17-Sep-2018  jdolecek switch from TAILQ to SIMPLEQ for ata_xfer pending queue to save
space, don't need doubly linked queue
 1.6.2.2  17-Sep-2018  jdolecek move low-level protocol handlers hooks from ata_xfer to separate struct,
initialized statically

primarily to reduce ata_xfer struct size, but also improves readibility,
and enforces consistency
 1.6.2.1  31-Aug-2018  jdolecek refactor ata_xfer to be just dumb structure; move all callouts/condvars out

retry callout to wd(4); reset callout and the active/cmd finish condvars
to channel queue; change code using the condvars so it works if there
are multiple waiters

simplify the async wait code for cmds, replace ata_wait_xfer()/ata_wake_xfer()
with ata_wait_cmd()

fix the callout_invoking/ack race handling code for timeouts to
actually have chance to work; change mvsata(4) to use generic timeout func

towards resolution of kern/52614
 1.8.4.1  08-Feb-2022  martin Pull up following revision(s) (requested by jdolecek in ticket #1426):

sys/dev/ata/ata_recovery.c: revision 1.3
sys/dev/ata/ata_subr.c: revision 1.9

stop xfer timeouts during recovery, all xfers will be requeued anyway
this avoids race with the timeout routine when processing the xfers
for requeueing

should fix PR kern/54790 by Izumi Tsutsui
 1.9.2.1  25-Apr-2020  bouyer Sync with bouyer-xenpvh-base2 (HEAD)
 1.11.2.1  03-Jan-2021  thorpej Sync w/ HEAD.

RSS XML Feed