qemu-e2k/hw/ide
Niklas Cassel 9f89423537 hw/ide/ahci: fix broken SError handling
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>
2023-09-06 22:48:04 -04:00
..
ahci_internal.h hw/ide: spelling fixes 2023-08-31 19:47:43 +02:00
ahci-allwinner.c
ahci.c hw/ide/ahci: fix broken SError handling 2023-09-06 22:48:04 -04:00
atapi.c
cmd646.c hw/ide: spelling fixes 2023-08-31 19:47:43 +02:00
core.c hw/ide/core: set ERR_STAT in unsupported command completion 2023-09-06 22:48:04 -04:00
ich.c
ioport.c
isa.c
Kconfig
macio.c
meson.build meson: Replace softmmu_ss -> system_ss 2023-06-20 10:01:30 +02:00
microdrive.c
mmio.c
pci.c hw/ide/pci: Replace some magic numbers by constants 2023-07-11 00:11:25 +02:00
piix.c hw/ide/piix: properly initialize the BMIBA register 2023-07-14 11:10:57 +02:00
qdev.c
sii3112.c hw/ide: Extract bmdma_status_writeb() 2023-07-11 00:11:25 +02:00
trace-events
trace.h
via.c hw/ide: Extract bmdma_status_writeb() 2023-07-11 00:11:25 +02:00