The legacy ide command execution layer will clear any errors outstanding
before execution, but the NCQ layer doesn't.
Even on success, this register will remain clogged.

Clear it out before each NCQ command so the guest can tell if the
error code produced after completion is meaningful or not.

Signed-off-by: John Snow <js...@redhat.com>
---
 hw/ide/ahci.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/hw/ide/ahci.c b/hw/ide/ahci.c
index 6bded67..e63ba9b 100644
--- a/hw/ide/ahci.c
+++ b/hw/ide/ahci.c
@@ -1048,6 +1048,8 @@ static void process_ncq_command(AHCIState *s, int port, 
uint8_t *cmd_fis,
             ncq_tfs->lba, ncq_tfs->lba + ncq_tfs->sector_count - 1,
             ide_state->nb_sectors - 1);
 
+    ide_state->error = 0;
+
     switch(ncq_fis->command) {
         case READ_FPDMA_QUEUED:
             DPRINTF(port, "NCQ reading %d sectors from LBA %"PRId64", "
-- 
2.1.0


Reply via email to