History log of /src/sys/dev/ata/ata_subr.c |
Revision | | Date | Author | Comments |
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.
|