]> git.proxmox.com Git - qemu.git/commitdiff
ide: Reset BMIDEA bit when the bus master is stopped
authorKevin Wolf <kwolf@redhat.com>
Wed, 13 Mar 2013 15:53:06 +0000 (16:53 +0100)
committerKevin Wolf <kwolf@redhat.com>
Wed, 8 May 2013 13:28:49 +0000 (15:28 +0200)
The device is supposed to reset the Bus Master IDE Active bit in the
status register when 0 is written to the Start/Stop Bus Master bit in
the command register.

In the common cases this happens automatically because bdrv_drain_all()
flushes the requests, but with a large PRDT it could remain set.

Signed-off-by: Kevin Wolf <kwolf@redhat.com>
hw/ide/pci.c

index a310975391f6eff7eadbe3f7168d0fd6b32149b4..635a364dd86d067eb87c9f837feb109f85b5f5ff 100644 (file)
@@ -312,6 +312,7 @@ void bmdma_cmd_writeb(BMDMAState *bm, uint32_t val)
                 bdrv_drain_all();
                 assert(bm->bus->dma->aiocb == NULL);
             }
+            bm->status &= ~BM_STATUS_DMAING;
         } else {
             bm->cur_addr = bm->addr;
             if (!(bm->status & BM_STATUS_DMAING)) {