summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarcelo Tosatti <mtosatti@redhat.com>2010-01-20 18:01:49 +0100
committerAnthony Liguori <aliguori@us.ibm.com>2010-01-26 15:42:02 -0600
commit42ee76fe82093ba914f0dc83d2decbcf68866144 (patch)
treed58c91e6d6e75bf9006cd45923603503416d5fbd
parentd5e4acf7dfa1786c3825632362f5a73631d1eb55 (diff)
downloadqemu-42ee76fe82093ba914f0dc83d2decbcf68866144.tar.gz
qemu-42ee76fe82093ba914f0dc83d2decbcf68866144.tar.bz2
qemu-42ee76fe82093ba914f0dc83d2decbcf68866144.zip
ide save/restore current transfer fields
If migration takes place between write of the bmdma address register and write of the command register (to initiate DMA), the destination will not properly start the DMA op, hanging the guest: ata1.00: exception Emask 0x0 SAct 0x0 SErr 0x0 action 0x6 frozen ata1.00: cmd c8/00:16:41:00:00/00:00:00:00:00/e0 tag 0 dma 11264 in res 40/00:00:00:00:00/00:00:00:00:00/00 Emask 0x4 (timeout) ata1.00: status: { DRDY } Fix by sending current transfer information in the migration data. We need to update ide version to 4 for this to work. As we don't have subsectios, we need to chain the update increase until vmstate_ide_pci (quintela) Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com> Signed-off-by: Juan Quintela <quintela@redhat.com> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
-rw-r--r--hw/ide/pci.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/hw/ide/pci.c b/hw/ide/pci.c
index 780fc5f115..4d95cc5e22 100644
--- a/hw/ide/pci.c
+++ b/hw/ide/pci.c
@@ -123,7 +123,7 @@ void bmdma_addr_writel(void *opaque, uint32_t addr, uint32_t val)
static const VMStateDescription vmstate_bmdma = {
.name = "ide bmdma",
- .version_id = 3,
+ .version_id = 4,
.minimum_version_id = 0,
.minimum_version_id_old = 0,
.fields = (VMStateField []) {
@@ -133,6 +133,10 @@ static const VMStateDescription vmstate_bmdma = {
VMSTATE_INT64(sector_num, BMDMAState),
VMSTATE_UINT32(nsector, BMDMAState),
VMSTATE_UINT8(unit, BMDMAState),
+ VMSTATE_UINT32_V(cur_addr, BMDMAState, 4),
+ VMSTATE_UINT32_V(cur_prd_last, BMDMAState, 4),
+ VMSTATE_UINT32_V(cur_prd_addr, BMDMAState, 4),
+ VMSTATE_UINT32_V(cur_prd_len, BMDMAState, 4),
VMSTATE_END_OF_LIST()
}
};
@@ -152,7 +156,7 @@ static int ide_pci_post_load(void *opaque, int version_id)
const VMStateDescription vmstate_ide_pci = {
.name = "ide",
- .version_id = 3,
+ .version_id = 4,
.minimum_version_id = 0,
.minimum_version_id_old = 0,
.post_load = ide_pci_post_load,