[PATCH] hw/arm/virt: use pflash image real size when mapping

haibinzhang (张海斌) posted 1 patch 3 years, 7 months ago
Failed in applying to current master (apply log)
hw/arm/virt.c | 22 ++++++++++++++++++++--
1 file changed, 20 insertions(+), 2 deletions(-)
[PATCH] hw/arm/virt: use pflash image real size when mapping
Posted by haibinzhang (张海斌) 3 years, 7 months ago
Default size of arm-virt pflash image is 64MB which
will cost extra 128MB(64MBx2) memory per qemu process
and 12.5GB for 100 qemu processes. Host memory is
precious and it is valuable to reduce pflash image size.
For compatibility arm-virt uses real size when mapping.

Signed-off-by: Haibin Zhang <haibinzhang@tencent.com>
---
 hw/arm/virt.c | 22 ++++++++++++++++++++--
 1 file changed, 20 insertions(+), 2 deletions(-)

diff --git a/hw/arm/virt.c b/hw/arm/virt.c
index acf9bfbece..3545e12865 100644
--- a/hw/arm/virt.c
+++ b/hw/arm/virt.c
@@ -50,6 +50,7 @@
 #include "sysemu/sysemu.h"
 #include "sysemu/tpm.h"
 #include "sysemu/kvm.h"
+#include "sysemu/block-backend.h"
 #include "hw/loader.h"
 #include "exec/address-spaces.h"
 #include "qemu/bitops.h"
@@ -1001,10 +1002,27 @@ static void virt_flash_map(VirtMachineState *vms,
      */
     hwaddr flashsize = vms->memmap[VIRT_FLASH].size / 2;
     hwaddr flashbase = vms->memmap[VIRT_FLASH].base;
+    int64_t realsize;
+    BlockBackend *blk;

-    virt_flash_map1(vms->flash[0], flashbase, flashsize,
+    realsize = flashsize;
+    blk = pflash_cfi01_get_blk(vms->flash[0]);
+    if (blk) {
+        realsize = blk_getlength(blk);
+        realsize = realsize < flashsize ? realsize : flashsize;
+    }
+
+    virt_flash_map1(vms->flash[0], flashbase, realsize,
                     secure_sysmem);
-    virt_flash_map1(vms->flash[1], flashbase + flashsize, flashsize,
+
+    realsize = flashsize;
+    blk = pflash_cfi01_get_blk(vms->flash[1]);
+    if (blk) {
+        realsize = blk_getlength(blk);
+        realsize = realsize < flashsize ? realsize : flashsize;
+    }
+
+    virt_flash_map1(vms->flash[1], flashbase + flashsize, realsize,
                     sysmem);
 }

--
2.23.0