9f89423537
When encountering an NCQ error, you should not write the NCQ tag to the SError register. This is completely wrong. The SError register has a clear definition, where each bit represents a different error, see PxSERR definition in AHCI 1.3.1. If we write a random value (like the NCQ tag) in SError, e.g. Linux will read SError, and will trigger arbitrary error handling depending on the NCQ tag that happened to be executing. In case of success, ncq_cb() will call ncq_finish(). In case of error, ncq_cb() will call ncq_err() (which will clear ncq_tfs->used), and then call ncq_finish(), thus using ncq_tfs->used is sufficient to tell if finished should get set or not. Signed-off-by: Niklas Cassel <niklas.cassel@wdc.com> Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org> Message-id: 20230609140844.202795-9-nks@flawful.org Signed-off-by: John Snow <jsnow@redhat.com> |
||
---|---|---|
.. | ||
ahci_internal.h | ||
ahci-allwinner.c | ||
ahci.c | ||
atapi.c | ||
cmd646.c | ||
core.c | ||
ich.c | ||
ioport.c | ||
isa.c | ||
Kconfig | ||
macio.c | ||
meson.build | ||
microdrive.c | ||
mmio.c | ||
pci.c | ||
piix.c | ||
qdev.c | ||
sii3112.c | ||
trace-events | ||
trace.h | ||
via.c |