summaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorMark Cave-Ayland2015-06-04 23:59:35 +0200
committerJohn Snow2015-06-05 02:25:39 +0200
commitac58fe7b2c67a9be142beacd4c6ee51f3264d90f (patch)
treeb85869189c41fceb9f9e7410145613acf1585f05 /include
parentmacio: switch pmac_dma_read() over to new offset/len implementation (diff)
downloadqemu-ac58fe7b2c67a9be142beacd4c6ee51f3264d90f.tar.gz
qemu-ac58fe7b2c67a9be142beacd4c6ee51f3264d90f.tar.xz
qemu-ac58fe7b2c67a9be142beacd4c6ee51f3264d90f.zip
macio: switch pmac_dma_write() over to new offset/len implementation
In particular, this fixes a bug whereby chains of overlapping head/tail chains would incorrectly write over each other's remainder cache. This is the access pattern used by OS X/Darwin and fixes an issue with a corrupt Darwin installation in my local tests. While we are here, rename the DBDMA_io struct property remainder to head_remainder for clarification. Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk> Reviewed-by: John Snow <jsnow@redhat.com> Message-id: 1433455177-21243-3-git-send-email-mark.cave-ayland@ilande.co.uk Signed-off-by: John Snow <jsnow@redhat.com>
Diffstat (limited to 'include')
-rw-r--r--include/hw/ppc/mac_dbdma.h3
1 files changed, 2 insertions, 1 deletions
diff --git a/include/hw/ppc/mac_dbdma.h b/include/hw/ppc/mac_dbdma.h
index c5803279da..7f247fa4f1 100644
--- a/include/hw/ppc/mac_dbdma.h
+++ b/include/hw/ppc/mac_dbdma.h
@@ -40,7 +40,8 @@ struct DBDMA_io {
/* DMA is in progress, don't start another one */
bool processing;
/* unaligned last sector of a request */
- uint8_t remainder[0x200];
+ uint8_t head_remainder[0x200];
+ uint8_t tail_remainder[0x200];
int remainder_len;
QEMUIOVector iov;
};