| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
| |
both disks, or if we should suppress the slave drive. Default to
suppressing the slave, in the case that this REQIURED tuple turns out
to not actually be present...
|
|
|
|
|
| |
crash on detached channel resume. Add placeholder for possible type-specific
suspend/resume routines.
|
|
|
|
|
| |
Reviewed by: jhb
MFC after: 3 days
|
|
|
|
|
|
|
| |
Doing it on old SATA controllers like Promise PDC20375 SATA150 breaks
their operation.
Tested by: marcus on PDC20375
|
|
|
|
|
|
| |
moused(8) looks for "uhub/ums" to decide if needs to load the module.
Reported by: Garrett Cooper
|
|
|
|
|
|
|
|
|
|
|
| |
ready status. Most of controllers managed to issue coommand and set BUSY
bit almost simultaneously, before we will read it, but at least JMicron JMB363
don't. Ignore timeout errors to keep old behavior when error there was
impossible.
For me this fixes timeout errors on the first command after channel attach
or reinit. Boot in my case is not affected, as there is much time passing
between reset and next command giving reset time to complete.
|
|
|
|
|
|
|
|
| |
done in other places. Until we have no support for command queueing we have
no any benefit from FBS, while enabling it only here somehow leads to
"port not ready" errors on Intel 63XXESB2 controller.
Tested by: Larry Rosenman <ler AT lerctr.org>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
and partially r188903. Revert breaks new drives detection on reinit to the
state as it was before me, but fixes series of new bugs reported by some
people.
Unconditional queueing of ata_completed() calls can lead to deadlock if
due to timeout ata_reinit() was called at the same thread by previous
ata_completed(). Calling of ata_identify() on ata_reinit() in current
implementation opens numerous races and deadlocks.
Problems I was touching here are still exist and should be addresed, but
probably in different way.
|
|
|
|
|
|
|
|
|
|
|
| |
drivers' probe routines. It allows not to sleep and so not drop Giant inside
ata_identify() critical section and so avoid crash if it reentered on
request timeout. Reentering of probe call checked inside of it.
Give device own knowledge about it's type (ata/atapi/atapicam). It is not
a good idea to ask channel status for device type inside ata_getparam().
Add softc memory deallocation on device destruction.
|
| |
|
|
|
|
|
|
|
| |
mtx_lock() is not needed there as callout initialized with callout_init_mtx().
Sorry.
Submitted by: Ian Dowse
|
|
|
|
| |
I think it should be suitable for debugging.
|
|
|
|
| |
during commit 3 years ago.
|
|
|
|
|
|
|
|
|
|
| |
kernel dumping case.
ata_completed() may initiate ata_reinit() on error, that may lead to drives
attach or detach. Attach and detach are sending requests to drives and sleep
waiting for results. But ata_finish() can be called directly from
interrupt handler where sleeping is prohibited, so we must break this chain
somewhere. This place seems to fit best.
|
|
|
|
| |
broken by r188694.
|
| |
|
| |
|
| |
|
|
|
|
| |
Submitted by: gavin
|
| |
|
| |
|
|
|
|
|
| |
devices return incorrect values in lower part confusing detection, while
higher part itself gives enough information for proper detetion.
|
|
|
|
| |
much time to spin-up.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
- protect againtst recursions,
- add new devices detection using ata_identify().
Improve ata_identify():
- do not add duplicate device if device already exist.
Rework SATA hot-plug events handling. Instead of unsafe duplicate
implementation use common ata_reinit() to handle all state changes.
All together this gives quite stable and robust cold- and hot-plug operation,
invariant to false, lost and duplicate events.
|
|
|
|
| |
devices per channel.
|
|
|
|
|
| |
power-down peer transmitter, then disable completely.
Side effect of this is saving about 0.5W of power per detached device.
|
|
|
|
|
| |
acd code to create new provider (?), but not from an expected
context, which results in a panic (GEOM topology not held).
|
| |
|
|
|
|
|
|
| |
ATA specification declares minimal reset time of 5us. SATA keeps it, but
requires devices to handle commands transmitted even one by one without
any gap.
|
|
|
|
| |
PHY reset causes drive connect/disconnect events, unwanted at this moment.
|
|
|
|
| |
Submitted by: avg
|
|
|
|
|
|
|
| |
as ATA RAID, but generic ATAPCI driver unable to detect drives there. AHCI
driver reported to handle them fine. Linux does the same.
Submitted by: Andrey V. Elsukov on stable@
|
|
|
|
|
| |
Spares and rebuilds are not supported, so this code should be considered
for entertainment purposes only.
|
|
|
|
|
|
| |
ata_detach() to implement IOCATAATTACH/IOCATADETACH ioctls.
This will permit channel drivers to properly shutdown port hardware on channel
detach and init it on attach.
|
|
|
|
| |
Some dmainit call fixes for previous commit.
|
|
|
|
|
|
|
|
| |
join allocate() and dmainit() atapci subdriver's channel initialization
methods into single ch_attach() method.
As opposite to ch_attach() add new ch_detach() method to deallocate/disable
channel.
|
| |
|
| |
|
|
|
|
| |
Submitted by: ganbold
|
|
|
|
|
|
|
| |
This should fix, for example, cache flush timeout error on shutdown, if
some drives are not mounted.
PR: kern/111023
|
| |
|
|
|
|
| |
to report request completion, expecially when it is not reliable.
|
|
|
|
| |
for some reason, stealing our events.
|
|
|
|
|
|
| |
to not allocate them after the recent ata channels enumeration changes.
It allows to save some resources, not bother user with unexisting hardware
and not check unimplemented ports status on every interrupt.
|
| |
|
|
|
|
|
|
|
| |
Works fine with AHCI and theoretically other MSI capable devices.
At this moment support disabled by default. To enable it, set
"hint.atapci.X.msi=1" device hint.
|
|
|
|
| |
when port multiplicator supported, but absent.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
- specification claims that 1 second is just a maximum controller reset time;
implement controller reset properly to save almost 1 second of boot, and
about half second of resume time;
- enable channel interrupts only after channel status reset to fix duplicate
device creation on resume due to unwanted device connection event;
- as described in specification, wait for disk ready status after channel
power-up; it is not so important when disk already touched by BIOS, but
solves device not ready problems on resume and probably some other cases.
- uncomment channel stop/start on soft-reset as it is declared mandatory by
specification; it was commented due to some random drive detection problems
on VIA and JMicron controllers, but I hope it is fixed by previous point.
|
|
|
|
|
|
|
|
| |
Move channel softc initialization from ata_XXX_probe() to ata_XXX_attach().
Instead of calculating ata channel number as position in child device list,
pass it's real number directly from controller probe routine using ivars.
It is simpler and IMHO more correct.
|
|
|
|
| |
to int.
|