--- qemu/hw/ide/atapi.c 2018/04/24 19:30:25 1.1.1.2 +++ qemu/hw/ide/atapi.c 2018/04/24 19:51:00 1.1.1.3 @@ -352,14 +352,8 @@ static void ide_atapi_cmd_read_dma_cb(vo s->bus->dma->aiocb = bdrv_aio_readv(s->bs, (int64_t)s->lba << 2, &s->bus->dma->qiov, n * 4, ide_atapi_cmd_read_dma_cb, s); - if (!s->bus->dma->aiocb) { - /* Note: media not present is the most likely case */ - ide_atapi_cmd_error(s, NOT_READY, - ASC_MEDIUM_NOT_PRESENT); - goto eot; - } - return; + eot: bdrv_acct_done(s->bs, &s->acct); s->bus->dma->ops->add_status(s->bus->dma, BM_STATUS_INT); @@ -889,8 +883,11 @@ static void cmd_start_stop_unit(IDEState ide_atapi_cmd_error(s, sense, ASC_MEDIA_REMOVAL_PREVENTED); return; } - bdrv_eject(s->bs, !start); - s->tray_open = !start; + + if (s->tray_open != !start) { + bdrv_eject(s->bs, !start); + s->tray_open = !start; + } } ide_atapi_cmd_ok(s);