[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-block] [PATCH v2 08/15] ahci: correct ncq sector count
From: |
John Snow |
Subject: |
[Qemu-block] [PATCH v2 08/15] ahci: correct ncq sector count |
Date: |
Wed, 1 Jul 2015 12:19:31 -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>
---
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-block] [PATCH v2 04/15] ahci: refactor process_ncq_command, (continued)
- [Qemu-block] [PATCH v2 04/15] ahci: refactor process_ncq_command, John Snow, 2015/07/01
- [Qemu-block] [PATCH v2 05/15] ahci: factor ncq_finish out of ncq_cb, John Snow, 2015/07/01
- [Qemu-block] [PATCH v2 07/15] ahci: correct types in NCQTransferState, John Snow, 2015/07/01
- [Qemu-block] [PATCH v2 06/15] ahci: add rwerror=stop support for ncq, John Snow, 2015/07/01
- [Qemu-block] [PATCH v2 01/15] ide: add limit to .prepare_buf(), John Snow, 2015/07/01
- [Qemu-block] [PATCH v2 09/15] qtest/ahci: halted NCQ test, John Snow, 2015/07/01
- [Qemu-block] [PATCH v2 02/15] ahci: stash ncq command, John Snow, 2015/07/01
- [Qemu-block] [PATCH v2 10/15] ahci: add cmd header to ncq transfer state, John Snow, 2015/07/01
- [Qemu-block] [PATCH v2 08/15] ahci: correct ncq sector count,
John Snow <=
- [Qemu-block] [PATCH v2 12/15] ahci: ncq migration, John Snow, 2015/07/01
- [Qemu-block] [PATCH v2 13/15] ahci: Do not map cmd_fis to generate response, John Snow, 2015/07/01
- [Qemu-block] [PATCH v2 14/15] qtest/ahci: halted ncq migration test, John Snow, 2015/07/01
- [Qemu-block] [PATCH v2 11/15] ahci: add get_cmd_header helper, John Snow, 2015/07/01
- [Qemu-block] [PATCH v2 15/15] ahci: fix sdb fis semantics, John Snow, 2015/07/01
- Re: [Qemu-block] [PATCH v2 00/15] ahci: ncq cleanup, part 2, Stefan Hajnoczi, 2015/07/02
- Re: [Qemu-block] [Qemu-devel] [PATCH v2 00/15] ahci: ncq cleanup, part 2, John Snow, 2015/07/02