[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 09/16] ahci: correct ncq sector count
From: |
John Snow |
Subject: |
[Qemu-devel] [PATCH 09/16] ahci: correct ncq sector count |
Date: |
Mon, 22 Jun 2015 20:21:08 -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 7fcc6a2..043b959 100644
--- a/hw/ide/ahci.c
+++ b/hw/ide/ahci.c
@@ -1085,8 +1085,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] [PATCH 05/16] ahci: factor ncq_finish out of ncq_cb, (continued)
- [Qemu-devel] [PATCH 05/16] ahci: factor ncq_finish out of ncq_cb, John Snow, 2015/06/22
- [Qemu-devel] [PATCH 06/16] ahci: record ncq failures, John Snow, 2015/06/22
- Re: [Qemu-devel] [PATCH 06/16] ahci: record ncq failures, Stefan Hajnoczi, 2015/06/26
- Re: [Qemu-devel] [PATCH 06/16] ahci: record ncq failures, John Snow, 2015/06/26
- Re: [Qemu-devel] [Qemu-block] [PATCH 06/16] ahci: record ncq failures, Stefan Hajnoczi, 2015/06/29
- Re: [Qemu-devel] [Qemu-block] [PATCH 06/16] ahci: record ncq failures, Stefan Hajnoczi, 2015/06/29
- Re: [Qemu-devel] [Qemu-block] [PATCH 06/16] ahci: record ncq failures, John Snow, 2015/06/29
- Re: [Qemu-devel] [Qemu-block] [PATCH 06/16] ahci: record ncq failures, John Snow, 2015/06/29
[Qemu-devel] [PATCH 07/16] ahci: kick NCQ queue, John Snow, 2015/06/22
[Qemu-devel] [PATCH 08/16] ahci: correct types in NCQTransferState, John Snow, 2015/06/22
[Qemu-devel] [PATCH 09/16] ahci: correct ncq sector count,
John Snow <=
[Qemu-devel] [PATCH 10/16] qtest/ahci: halted NCQ test, John Snow, 2015/06/22
[Qemu-devel] [PATCH 01/16] ide: add limit to .prepare_buf(), John Snow, 2015/06/22
[Qemu-devel] [PATCH 13/16] ahci: add get_cmd_header helper, John Snow, 2015/06/22
[Qemu-devel] [PATCH 11/16] ahci: add cmd header to ncq transfer state, John Snow, 2015/06/22