[PATCH v2 16/16] virtio-mem: Mark memslot alias memory regions unmergeable

David Hildenbrand posted 16 patches 1 year, 3 months ago
Maintainers: Paolo Bonzini <pbonzini@redhat.com>, David Hildenbrand <david@redhat.com>, Igor Mammedov <imammedo@redhat.com>, Xiao Guangrong <xiaoguangrong.eric@gmail.com>, "Michael S. Tsirkin" <mst@redhat.com>, Richard Henderson <richard.henderson@linaro.org>, Peter Xu <peterx@redhat.com>, "Philippe Mathieu-Daudé" <philmd@linaro.org>, Eduardo Habkost <eduardo@habkost.net>, Marcel Apfelbaum <marcel.apfelbaum@gmail.com>, Yanan Wang <wangyanan55@huawei.com>
There is a newer version of this series
[PATCH v2 16/16] virtio-mem: Mark memslot alias memory regions unmergeable
Posted by David Hildenbrand 1 year, 3 months ago
Let's mark the memslot alias memory regions as unmergable, such that
flatview and vhost won't merge adjacent memory region aliases and we can
atomically map/unmap individual aliases without affecting adjacent
alias memory regions.

This handles vhost and vfio in multiple-memslot mode correctly (which do
not support atomic memslot updates) and avoids the temporary removal of
large memslots, which can be an expensive operation. For example, vfio
might have to unpin + repin a lot of memory, which is undesired.

Signed-off-by: David Hildenbrand <david@redhat.com>
---
 hw/virtio/virtio-mem.c | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/hw/virtio/virtio-mem.c b/hw/virtio/virtio-mem.c
index 724fcb189a..50770b577a 100644
--- a/hw/virtio/virtio-mem.c
+++ b/hw/virtio/virtio-mem.c
@@ -959,6 +959,12 @@ static void virtio_mem_prepare_memslots(VirtIOMEM *vmem)
         memory_region_init_alias(&vmem->memslots[idx], OBJECT(vmem), name,
                                  &vmem->memdev->mr, memslot_offset,
                                  memslot_size);
+        /*
+         * We want to be able to atomically and efficiently activate/deactivate
+         * individual memslots without affecting adjacent memslots in memory
+         * notifiers.
+         */
+        memory_region_set_unmergeable(&vmem->memslots[idx], true);
     }
 }
 
-- 
2.41.0
Re: [PATCH v2 16/16] virtio-mem: Mark memslot alias memory regions unmergeable
Posted by Philippe Mathieu-Daudé 1 year, 3 months ago
On 25/8/23 15:21, David Hildenbrand wrote:
> Let's mark the memslot alias memory regions as unmergable, such that
> flatview and vhost won't merge adjacent memory region aliases and we can
> atomically map/unmap individual aliases without affecting adjacent
> alias memory regions.
> 
> This handles vhost and vfio in multiple-memslot mode correctly (which do
> not support atomic memslot updates) and avoids the temporary removal of
> large memslots, which can be an expensive operation. For example, vfio
> might have to unpin + repin a lot of memory, which is undesired.
> 
> Signed-off-by: David Hildenbrand <david@redhat.com>
> ---
>   hw/virtio/virtio-mem.c | 6 ++++++
>   1 file changed, 6 insertions(+)

Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>