[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 28/35] ahci: correct ncq sector count
From: |
John Snow |
Subject: |
[Qemu-devel] [PULL 28/35] ahci: correct ncq sector count |
Date: |
Sat, 4 Jul 2015 02:07:07 -0400 |
uint16_t isn't enough to hold the real sector count, since a value of
zero implies a full 64K sectors, so we need a uint32_t here.
We *could* cheat and pretend that this value is 0-based and fit it in
a uint16_t, but I'd rather waste 2 bytes instead of a future dev's
10 minutes when they forget to +1/-1 accordingly somewhere.
See SATA 3.2, section 13.6.4.1 "READ FPDMA QUEUED".
Signed-off-by: John Snow <address@hidden>
Reviewed-by: Stefan Hajnoczi <address@hidden>
Message-id: address@hidden
---
hw/ide/ahci.c | 7 +++++--
hw/ide/ahci.h | 2 +-
2 files changed, 6 insertions(+), 3 deletions(-)
diff --git a/hw/ide/ahci.c b/hw/ide/ahci.c
index efd07ac..1027a60 100644
--- a/hw/ide/ahci.c
+++ b/hw/ide/ahci.c
@@ -1086,8 +1086,11 @@ static void process_ncq_command(AHCIState *s, int port,
uint8_t *cmd_fis,
DPRINTF(port, "Warn: Unsupported attempt to use Rebuild Assist\n");
}
- ncq_tfs->sector_count = ((uint16_t)ncq_fis->sector_count_high << 8) |
- ncq_fis->sector_count_low;
+ ncq_tfs->sector_count = ((ncq_fis->sector_count_high << 8) |
+ ncq_fis->sector_count_low);
+ if (!ncq_tfs->sector_count) {
+ ncq_tfs->sector_count = 0x10000;
+ }
size = ncq_tfs->sector_count * 512;
ahci_populate_sglist(ad, &ncq_tfs->sglist, size, 0);
diff --git a/hw/ide/ahci.h b/hw/ide/ahci.h
index c728e3a..9090d3d 100644
--- a/hw/ide/ahci.h
+++ b/hw/ide/ahci.h
@@ -256,7 +256,7 @@ typedef struct NCQTransferState {
BlockAIOCB *aiocb;
QEMUSGList sglist;
BlockAcctCookie acct;
- uint16_t sector_count;
+ uint32_t sector_count;
uint64_t lba;
uint8_t tag;
uint8_t cmd;
--
2.1.0
- [Qemu-devel] [PULL 18/35] libqos/ahci: Force all NCQ commands to be LBA48, (continued)
- [Qemu-devel] [PULL 18/35] libqos/ahci: Force all NCQ commands to be LBA48, John Snow, 2015/07/04
- [Qemu-devel] [PULL 19/35] qtest/ahci: simple ncq data test, John Snow, 2015/07/04
- [Qemu-devel] [PULL 20/35] qtest/ahci: ncq migration test, John Snow, 2015/07/04
- [Qemu-devel] [PULL 22/35] ahci: stash ncq command, John Snow, 2015/07/04
- [Qemu-devel] [PULL 23/35] ahci: assert is_ncq for process_ncq, John Snow, 2015/07/04
- [Qemu-devel] [PULL 24/35] ahci: refactor process_ncq_command, John Snow, 2015/07/04
- [Qemu-devel] [PULL 25/35] ahci: factor ncq_finish out of ncq_cb, John Snow, 2015/07/04
- [Qemu-devel] [PULL 21/35] ide: add limit to .prepare_buf(), John Snow, 2015/07/04
- [Qemu-devel] [PULL 26/35] ahci: add rwerror=stop support for ncq, John Snow, 2015/07/04
- [Qemu-devel] [PULL 27/35] ahci: correct types in NCQTransferState, John Snow, 2015/07/04
- [Qemu-devel] [PULL 28/35] ahci: correct ncq sector count,
John Snow <=
- [Qemu-devel] [PULL 29/35] qtest/ahci: halted NCQ test, John Snow, 2015/07/04
- [Qemu-devel] [PULL 31/35] ahci: add get_cmd_header helper, John Snow, 2015/07/04
- [Qemu-devel] [PULL 32/35] ahci: ncq migration, John Snow, 2015/07/04
- [Qemu-devel] [PULL 30/35] ahci: add cmd header to ncq transfer state, John Snow, 2015/07/04
- [Qemu-devel] [PULL 34/35] qtest/ahci: halted ncq migration test, John Snow, 2015/07/04
- [Qemu-devel] [PULL 33/35] ahci: Do not map cmd_fis to generate response, John Snow, 2015/07/04
- [Qemu-devel] [PULL 35/35] ahci: fix sdb fis semantics, John Snow, 2015/07/04
- Re: [Qemu-devel] [PULL 00/35] Ide patches, Peter Maydell, 2015/07/05