In 'map_page' we need to check the return value of 'dma_memory_map' to ensure the we actully maped something. Otherwise, we will hit an assert in 'address_space_unmap'. This is because we can't find the MR with the NULL buffer. This is the LP#1884693:
-->https://bugs.launchpad.net/qemu/+bug/1884693 Reported-by: Alexander Bulekov <alx...@bu.edu> Signed-off-by: Li Qiang <liq...@163.com> --- hw/ide/ahci.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/hw/ide/ahci.c b/hw/ide/ahci.c index 009120f88b..63e9fccdbe 100644 --- a/hw/ide/ahci.c +++ b/hw/ide/ahci.c @@ -250,6 +250,11 @@ static void map_page(AddressSpace *as, uint8_t **ptr, uint64_t addr, } *ptr = dma_memory_map(as, addr, &len, DMA_DIRECTION_FROM_DEVICE); + + if (!*ptr) { + return; + } + if (len < wanted) { dma_memory_unmap(as, *ptr, len, DMA_DIRECTION_FROM_DEVICE, len); *ptr = NULL; -- 2.17.1