return 0;
}
-static void vfio_ram_discard_register_listener(VFIOContainerBase *bcontainer,
- MemoryRegionSection *section)
+static bool vfio_ram_discard_register_listener(VFIOContainerBase *bcontainer,
+ MemoryRegionSection *section,
+ Error **errp)
{
RamDiscardManager *rdm = memory_region_get_ram_discard_manager(section->mr);
int target_page_size = qemu_target_page_size();
if (vrdl_mappings + max_memslots - vrdl_count >
bcontainer->dma_max_mappings) {
- warn_report("%s: possibly running out of DMA mappings. E.g., try"
+ error_setg(errp, "%s: possibly running out of DMA mappings. E.g., try"
" increasing the 'block-size' of virtio-mem devies."
" Maximum possible DMA mappings: %d, Maximum possible"
" memslots: %d", __func__, bcontainer->dma_max_mappings,
max_memslots);
+ return false;
}
}
+ return true;
}
static void vfio_ram_discard_unregister_listener(VFIOContainerBase *bcontainer,
*/
if (memory_region_has_ram_discard_manager(section->mr)) {
if (!cpr_remap) {
- vfio_ram_discard_register_listener(bcontainer, section);
+ if (!vfio_ram_discard_register_listener(bcontainer, section, &err)) {
+ goto fail;
+ }
} else if (!vfio_cpr_ram_discard_register_listener(bcontainer,
section)) {
error_setg(&err,