mirror of https://github.com/xemu-project/xemu.git
virtio-mem: Skip most of virtio_mem_unplug_all() without plugged memory
Already when starting QEMU we perform one system reset that ends up triggering virtio_mem_unplug_all() with no actual memory plugged yet. That, in turn will trigger ram_block_discard_range() and perform some other actions that are not required in that case. Let's optimize virtio_mem_unplug_all() for the case that no memory is plugged. This will be beneficial for x-ignore-shared support as well. Message-ID: <20230706075612.67404-3-david@redhat.com> Tested-by: Mario Casquero <mcasquer@redhat.com> Reviewed-by: Juan Quintela <quintela@redhat.com> Reviewed-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: David Hildenbrand <david@redhat.com>
This commit is contained in:
parent
1d44ff586f
commit
836f657b6a
|
@ -621,20 +621,20 @@ static int virtio_mem_unplug_all(VirtIOMEM *vmem)
|
|||
{
|
||||
RAMBlock *rb = vmem->memdev->mr.ram_block;
|
||||
|
||||
if (virtio_mem_is_busy()) {
|
||||
return -EBUSY;
|
||||
}
|
||||
|
||||
if (ram_block_discard_range(rb, 0, qemu_ram_get_used_length(rb))) {
|
||||
return -EBUSY;
|
||||
}
|
||||
virtio_mem_notify_unplug_all(vmem);
|
||||
|
||||
bitmap_clear(vmem->bitmap, 0, vmem->bitmap_size);
|
||||
if (vmem->size) {
|
||||
if (virtio_mem_is_busy()) {
|
||||
return -EBUSY;
|
||||
}
|
||||
if (ram_block_discard_range(rb, 0, qemu_ram_get_used_length(rb))) {
|
||||
return -EBUSY;
|
||||
}
|
||||
virtio_mem_notify_unplug_all(vmem);
|
||||
|
||||
bitmap_clear(vmem->bitmap, 0, vmem->bitmap_size);
|
||||
vmem->size = 0;
|
||||
notifier_list_notify(&vmem->size_change_notifiers, &vmem->size);
|
||||
}
|
||||
|
||||
trace_virtio_mem_unplugged_all();
|
||||
virtio_mem_resize_usable_region(vmem, vmem->requested_size, true);
|
||||
return 0;
|
||||
|
|
Loading…
Reference in New Issue