[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [RFC PATCH] hw/arm/virt: use variable size of flash device
From: |
Xiang Zheng |
Subject: |
[Qemu-devel] [RFC PATCH] hw/arm/virt: use variable size of flash device to save memory |
Date: |
Mon, 25 Mar 2019 20:51:42 +0800 |
Currently we fill the VIRT_FLASH space with two 64MB NOR images when
using persistent UEFI variables on QEMU. Actually we only use a very
small part of the memory while the rest significant large part of
memory is wasted.
This patch creates and maps a variable size of flash device instead of
a mandatory 64MB one to save memory.
Signed-off-by: Xiang Zheng <address@hidden>
---
This patch might be insufficient since it also needs to modify the flash size
in ACPI and DTB.
BTW, I don't understand why it requires the two NOR images to be exactly 64MB
in size when using -pflash.
---
hw/arm/virt.c | 11 ++++++++---
1 file changed, 8 insertions(+), 3 deletions(-)
diff --git a/hw/arm/virt.c b/hw/arm/virt.c
index ce2664a..8269532 100644
--- a/hw/arm/virt.c
+++ b/hw/arm/virt.c
@@ -44,6 +44,7 @@
#include "sysemu/numa.h"
#include "sysemu/sysemu.h"
#include "sysemu/kvm.h"
+#include "sysemu/block-backend.h"
#include "hw/loader.h"
#include "exec/address-spaces.h"
#include "qemu/bitops.h"
@@ -881,14 +882,18 @@ static void create_one_flash(const char *name, hwaddr
flashbase,
DriveInfo *dinfo = drive_get_next(IF_PFLASH);
DeviceState *dev = qdev_create(NULL, TYPE_PFLASH_CFI01);
SysBusDevice *sbd = SYS_BUS_DEVICE(dev);
+ BlockBackend *blk_backend = NULL;
const uint64_t sectorlength = 256 * 1024;
+ hwaddr real_size = flashsize;
if (dinfo) {
- qdev_prop_set_drive(dev, "drive", blk_by_legacy_dinfo(dinfo),
- &error_abort);
+ blk_backend = blk_by_legacy_dinfo(dinfo);
+ qdev_prop_set_drive(dev, "drive", blk_backend, &error_abort);
+ real_size = blk_getlength(blk_backend);
+ real_size = flashsize > real_size ? real_size : flashsize;
}
- qdev_prop_set_uint32(dev, "num-blocks", flashsize / sectorlength);
+ qdev_prop_set_uint32(dev, "num-blocks", real_size / sectorlength);
qdev_prop_set_uint64(dev, "sector-length", sectorlength);
qdev_prop_set_uint8(dev, "width", 4);
qdev_prop_set_uint8(dev, "device-width", 2);
--
1.8.3.1
- [Qemu-devel] [RFC PATCH] hw/arm/virt: use variable size of flash device to save memory,
Xiang Zheng <=
- Re: [Qemu-devel] [RFC PATCH] hw/arm/virt: use variable size of flash device to save memory, Peter Maydell, 2019/03/25
- Re: [Qemu-devel] [RFC PATCH] hw/arm/virt: use variable size of flash device to save memory, Zheng Xiang, 2019/03/25
- Re: [Qemu-devel] [RFC PATCH] hw/arm/virt: use variable size of flash device to save memory, Markus Armbruster, 2019/03/26
- Re: [Qemu-devel] [RFC PATCH] hw/arm/virt: use variable size of flash device to save memory, Laszlo Ersek, 2019/03/26
- Re: [Qemu-devel] [RFC PATCH] hw/arm/virt: use variable size of flash device to save memory, Markus Armbruster, 2019/03/26
- Re: [Qemu-devel] [RFC PATCH] hw/arm/virt: use variable size of flash device to save memory, Laszlo Ersek, 2019/03/26
- Re: [Qemu-devel] [RFC PATCH] hw/arm/virt: use variable size of flash device to save memory, Markus Armbruster, 2019/03/26
Re: [Qemu-devel] [RFC PATCH] hw/arm/virt: use variable size of flash device to save memory, Laszlo Ersek, 2019/03/25