diff options
Diffstat (limited to 'hw/ide/core.c')
-rw-r--r-- | hw/ide/core.c | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/hw/ide/core.c b/hw/ide/core.c index 6fd6dc2477..87d5cdf6ef 100644 --- a/hw/ide/core.c +++ b/hw/ide/core.c @@ -771,6 +771,16 @@ static void ide_atapi_cmd_check_status(IDEState *s) ide_set_irq(s->bus); } +static void ide_flush_cb(void *opaque, int ret) +{ + IDEState *s = opaque; + + /* XXX: how do we signal I/O errors here? */ + + s->status = READY_STAT | SEEK_STAT; + ide_set_irq(s->bus); +} + static inline void cpu_to_ube16(uint8_t *buf, int val) { buf[0] = val >> 8; @@ -1969,9 +1979,9 @@ void ide_ioport_write(void *opaque, uint32_t addr, uint32_t val) case WIN_FLUSH_CACHE: case WIN_FLUSH_CACHE_EXT: if (s->bs) - bdrv_flush(s->bs); - s->status = READY_STAT | SEEK_STAT; - ide_set_irq(s->bus); + bdrv_aio_flush(s->bs, ide_flush_cb, s); + else + ide_flush_cb(s, 0); break; case WIN_STANDBY: case WIN_STANDBY2: |