diff options
author | Chenyi Qiang <chenyi.qiang@intel.com> | 2025-06-12 16:27:43 +0800 |
---|---|---|
committer | Peter Xu <peterx@redhat.com> | 2025-06-23 16:03:59 -0400 |
commit | ff1211154c45c9f7f82116ae9a8c72a848e4a8b5 (patch) | |
tree | 3a98fc18ec47c6188428bde5b22586e196707293 /include | |
parent | f47a672a72acd6e2712031f0bc4d4f3ae4b6302c (diff) | |
download | qemu-ff1211154c45c9f7f82116ae9a8c72a848e4a8b5.zip qemu-ff1211154c45c9f7f82116ae9a8c72a848e4a8b5.tar.gz qemu-ff1211154c45c9f7f82116ae9a8c72a848e4a8b5.tar.bz2 |
memory: Change memory_region_set_ram_discard_manager() to return the result
Modify memory_region_set_ram_discard_manager() to return -EBUSY if a
RamDiscardManager is already set in the MemoryRegion. The caller must
handle this failure, such as having virtio-mem undo its actions and fail
the realize() process. Opportunistically move the call earlier to avoid
complex error handling.
This change is beneficial when introducing a new RamDiscardManager
instance besides virtio-mem. After
ram_block_coordinated_discard_require(true) unlocks all
RamDiscardManager instances, only one instance is allowed to be set for
one MemoryRegion at present.
Suggested-by: David Hildenbrand <david@redhat.com>
Reviewed-by: David Hildenbrand <david@redhat.com>
Reviewed-by: Pankaj Gupta <pankaj.gupta@amd.com>
Tested-by: Alexey Kardashevskiy <aik@amd.com>
Reviewed-by: Alexey Kardashevskiy <aik@amd.com>
Reviewed-by: Xiaoyao Li <xiaoyao.li@intel.com>
Signed-off-by: Chenyi Qiang <chenyi.qiang@intel.com>
Link: https://lore.kernel.org/r/20250612082747.51539-3-chenyi.qiang@intel.com
Signed-off-by: Peter Xu <peterx@redhat.com>
Diffstat (limited to 'include')
-rw-r--r-- | include/system/memory.h | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/include/system/memory.h b/include/system/memory.h index da97753..60983d4 100644 --- a/include/system/memory.h +++ b/include/system/memory.h @@ -2499,13 +2499,13 @@ static inline bool memory_region_has_ram_discard_manager(MemoryRegion *mr) * * This function must not be called for a mapped #MemoryRegion, a #MemoryRegion * that does not cover RAM, or a #MemoryRegion that already has a - * #RamDiscardManager assigned. + * #RamDiscardManager assigned. Return 0 if the rdm is set successfully. * * @mr: the #MemoryRegion * @rdm: #RamDiscardManager to set */ -void memory_region_set_ram_discard_manager(MemoryRegion *mr, - RamDiscardManager *rdm); +int memory_region_set_ram_discard_manager(MemoryRegion *mr, + RamDiscardManager *rdm); /** * memory_region_find: translate an address/size relative to a |