48 lines
2.0 KiB
Diff
48 lines
2.0 KiB
Diff
|
|
From a1afd7b993903510f946a979ff31ccf21b34006c Mon Sep 17 00:00:00 2001
|
||
|
|
From: zhujun2 <zhujun2_yewu@cmss.chinamobile.com>
|
||
|
|
Date: Thu, 11 Apr 2024 00:39:56 -0700
|
||
|
|
Subject: [PATCH] virtio-mem: Fix the bitmap index of the section offset
|
||
|
|
|
||
|
|
vmem->bitmap indexes the memory region of the virtio-mem backend at a
|
||
|
|
granularity of block_size. To calculate the index of target section offset,
|
||
|
|
the block_size should be divided instead of the bitmap_size.
|
||
|
|
|
||
|
|
Fixes: 2044969f0b ("virtio-mem: Implement RamDiscardManager interface")
|
||
|
|
Signed-off-by: Chenyi Qiang <chenyi.qiang@intel.com>
|
||
|
|
Message-Id: <20221216062231.11181-1-chenyi.qiang@intel.com>
|
||
|
|
Reviewed-by: David Hildenbrand <david@redhat.com>
|
||
|
|
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
|
||
|
|
Cc: qemu-stable@nongnu.org
|
||
|
|
Signed-off-by: David Hildenbrand <david@redhat.com>
|
||
|
|
(cherry picked from commit b11cf32e07a2f7ff0d171b89497381a04c9d07e0)
|
||
|
|
Signed-off-by: zhujun2 <zhujun2_yewu@cmss.chinamobile.com>
|
||
|
|
---
|
||
|
|
hw/virtio/virtio-mem.c | 4 ++--
|
||
|
|
1 file changed, 2 insertions(+), 2 deletions(-)
|
||
|
|
|
||
|
|
diff --git a/hw/virtio/virtio-mem.c b/hw/virtio/virtio-mem.c
|
||
|
|
index becac0d93b..4dac2c051b 100644
|
||
|
|
--- a/hw/virtio/virtio-mem.c
|
||
|
|
+++ b/hw/virtio/virtio-mem.c
|
||
|
|
@@ -205,7 +205,7 @@ static int virtio_mem_for_each_plugged_section(const VirtIOMEM *vmem,
|
||
|
|
uint64_t offset, size;
|
||
|
|
int ret = 0;
|
||
|
|
|
||
|
|
- first_bit = s->offset_within_region / vmem->bitmap_size;
|
||
|
|
+ first_bit = s->offset_within_region / vmem->block_size;
|
||
|
|
first_bit = find_next_bit(vmem->bitmap, vmem->bitmap_size, first_bit);
|
||
|
|
while (first_bit < vmem->bitmap_size) {
|
||
|
|
MemoryRegionSection tmp = *s;
|
||
|
|
@@ -237,7 +237,7 @@ static int virtio_mem_for_each_unplugged_section(const VirtIOMEM *vmem,
|
||
|
|
uint64_t offset, size;
|
||
|
|
int ret = 0;
|
||
|
|
|
||
|
|
- first_bit = s->offset_within_region / vmem->bitmap_size;
|
||
|
|
+ first_bit = s->offset_within_region / vmem->block_size;
|
||
|
|
first_bit = find_next_zero_bit(vmem->bitmap, vmem->bitmap_size, first_bit);
|
||
|
|
while (first_bit < vmem->bitmap_size) {
|
||
|
|
MemoryRegionSection tmp = *s;
|
||
|
|
--
|
||
|
|
2.27.0
|
||
|
|
|