qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

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


From: 张海斌
Subject: [PATCH] hw/arm/virt: use pflash image real size when mapping
Date: Fri, 18 Sep 2020 12:21:34 +0000

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


reply via email to

[Prev in Thread] Current Thread [Next in Thread]