[PATCH 01/12] ARM zImage: do memmap if possible
Sascha Hauer
s.hauer at pengutronix.de
Mon Mar 29 05:36:12 EDT 2010
Signed-off-by: Sascha Hauer <s.hauer at pengutronix.de>
---
arch/arm/lib/armlinux.c | 16 ++++++++++------
1 files changed, 10 insertions(+), 6 deletions(-)
diff --git a/arch/arm/lib/armlinux.c b/arch/arm/lib/armlinux.c
index 2415c29..ec9ad8e 100644
--- a/arch/arm/lib/armlinux.c
+++ b/arch/arm/lib/armlinux.c
@@ -241,7 +241,7 @@ static int do_bootz(struct command *cmdtp, int argc, char *argv[])
const char *commandline = getenv("bootargs");
int fd, ret;
struct zimage_header header;
- void *zimage;
+ void *zimage, *m;
if (argc != 2) {
barebox_cmd_usage(cmdtp);
@@ -263,11 +263,15 @@ static int do_bootz(struct command *cmdtp, int argc, char *argv[])
zimage = xmalloc(header.end);
memcpy(zimage, &header, sizeof(header));
-
- ret = read(fd, zimage + sizeof(header), header.end - sizeof(header));
- if (ret < header.end - sizeof(header)) {
- printf("could not read %s\n", argv[1]);
- goto err_out1;
+ m = memmap(fd, PROT_READ);
+ if (m != (void *)-1) {
+ memcpy(zimage, m, header.end);
+ } else {
+ ret = read(fd, zimage + sizeof(header), header.end - sizeof(header));
+ if (ret < header.end - sizeof(header)) {
+ printf("could not read %s\n", argv[1]);
+ goto err_out1;
+ }
}
theKernel = zimage;
--
1.7.0
More information about the barebox
mailing list