[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 09/15] loader: use mmap for ROMs
From: |
Peter Lieven |
Subject: |
[Qemu-devel] [PATCH 09/15] loader: use mmap for ROMs |
Date: |
Tue, 28 Jun 2016 11:01:33 +0200 |
a classic use for mmap here.
Signed-off-by: Peter Lieven <address@hidden>
---
hw/core/loader.c | 16 +++++++---------
1 file changed, 7 insertions(+), 9 deletions(-)
diff --git a/hw/core/loader.c b/hw/core/loader.c
index 53e0e41..f217edc 100644
--- a/hw/core/loader.c
+++ b/hw/core/loader.c
@@ -55,6 +55,7 @@
#include "exec/address-spaces.h"
#include "hw/boards.h"
#include "qemu/cutils.h"
+#include "qemu/mmap-alloc.h"
#include <zlib.h>
@@ -837,7 +838,7 @@ int rom_add_file(const char *file, const char *fw_dir,
{
MachineClass *mc = MACHINE_GET_CLASS(qdev_get_machine());
Rom *rom;
- int rc, fd = -1;
+ int fd = -1;
char devpath[100];
rom = g_malloc0(sizeof(*rom));
@@ -867,12 +868,9 @@ int rom_add_file(const char *file, const char *fw_dir,
}
rom->datasize = rom->romsize;
- rom->data = g_malloc0(rom->datasize);
- lseek(fd, 0, SEEK_SET);
- rc = read(fd, rom->data, rom->datasize);
- if (rc != rom->datasize) {
- fprintf(stderr, "rom: file %-20s: read error: rc=%d (expected %zd)\n",
- rom->name, rc, rom->datasize);
+ rom->data = mmap(NULL, rom->datasize, PROT_READ, MAP_SHARED, fd, 0);
+ if (rom->data == MAP_FAILED) {
+ fprintf(stderr, "rom: file %-20s: mmap error\n", rom->name);
goto err;
}
close(fd);
@@ -915,7 +913,7 @@ err:
if (fd != -1)
close(fd);
- g_free(rom->data);
+ qemu_anon_ram_munmap(rom->data, rom->romsize);
g_free(rom->path);
g_free(rom->name);
if (fw_dir) {
@@ -1013,7 +1011,7 @@ static void rom_reset(void *unused)
}
if (rom->isrom) {
/* rom needs to be written only once */
- g_free(rom->data);
+ qemu_anon_ram_munmap(rom->data, rom->datasize);
rom->data = NULL;
}
/*
--
1.9.1
- Re: [Qemu-devel] [PATCH 13/15] exec: use mmap for PhysPageMap->nodes, (continued)
- [Qemu-devel] [PATCH 08/15] virtio: use mmap for VirtQueue, Peter Lieven, 2016/06/28
- [Qemu-devel] [PATCH 11/15] qom: use mmap for bigger Objects, Peter Lieven, 2016/06/28
- [Qemu-devel] [PATCH 12/15] util: add a function to realloc mmapped memory, Peter Lieven, 2016/06/28
- [Qemu-devel] [PATCH 09/15] loader: use mmap for ROMs,
Peter Lieven <=
- [Qemu-devel] [PATCH 07/15] qapi: use mmap for QmpInputVisitor, Peter Lieven, 2016/06/28
- Re: [Qemu-devel] [PATCH 07/15] qapi: use mmap for QmpInputVisitor, Dr. David Alan Gilbert, 2016/06/28
- Re: [Qemu-devel] [PATCH 07/15] qapi: use mmap for QmpInputVisitor, Peter Lieven, 2016/06/28
- Re: [Qemu-devel] [PATCH 07/15] qapi: use mmap for QmpInputVisitor, Daniel P. Berrange, 2016/06/28
- Re: [Qemu-devel] [PATCH 07/15] qapi: use mmap for QmpInputVisitor, Dr. David Alan Gilbert, 2016/06/28
- Re: [Qemu-devel] [PATCH 07/15] qapi: use mmap for QmpInputVisitor, Daniel P. Berrange, 2016/06/28
- Re: [Qemu-devel] [PATCH 07/15] qapi: use mmap for QmpInputVisitor, Eric Blake, 2016/06/28
Re: [Qemu-devel] [PATCH 07/15] qapi: use mmap for QmpInputVisitor, Paolo Bonzini, 2016/06/28