diff options
| author | Mark Cave-Ayland | 2015-06-04 23:59:35 +0200 |
|---|---|---|
| committer | John Snow | 2015-06-05 02:25:39 +0200 |
| commit | ac58fe7b2c67a9be142beacd4c6ee51f3264d90f (patch) | |
| tree | b85869189c41fceb9f9e7410145613acf1585f05 /include | |
| parent | macio: switch pmac_dma_read() over to new offset/len implementation (diff) | |
| download | qemu-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.h | 3 |
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; }; |
