From: tip-bot for Maarten Lankhorst <m.b.lankhorst@gmail.com>
To: linux-tip-commits@vger.kernel.org
Cc: linux-kernel@vger.kernel.org, hpa@zytor.com, mingo@redhat.com,
m.b.lankhorst@gmail.com, tglx@linutronix.de, hpa@linux.intel.com
Subject: [tip:x86/efi] x86, efi: Break up large initrd reads
Date: Fri, 16 Dec 2011 10:43:02 -0800 [thread overview]
Message-ID: <tip-2d2da60fb40a80cc59383121ccf763e0e0e8a42a@git.kernel.org> (raw)
In-Reply-To: <4EEB3A02.3090201@gmail.com>
Commit-ID: 2d2da60fb40a80cc59383121ccf763e0e0e8a42a
Gitweb: http://git.kernel.org/tip/2d2da60fb40a80cc59383121ccf763e0e0e8a42a
Author: Maarten Lankhorst <m.b.lankhorst@gmail.com>
AuthorDate: Fri, 16 Dec 2011 13:30:58 +0100
Committer: H. Peter Anvin <hpa@linux.intel.com>
CommitDate: Fri, 16 Dec 2011 08:34:35 -0800
x86, efi: Break up large initrd reads
The efi boot stub tries to read the entire initrd in 1 go, however
some efi implementations hang if too much if asked to read too much
data at the same time. After some experimentation I found out that my
asrock p67 board will hang if asked to read chunks of 4MiB, so use a
safe value.
elilo reads in chunks of 16KiB, but since that requires many read
calls I use a value of 1 MiB. hpa suggested adding individual
blacklists for when systems are found where this value causes a crash.
Signed-off-by: Maarten Lankhorst <m.b.lankhorst@gmail.com>
Link: http://lkml.kernel.org/r/4EEB3A02.3090201@gmail.com
Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
---
arch/x86/boot/compressed/eboot.c | 20 ++++++++++++++------
arch/x86/boot/compressed/eboot.h | 1 +
2 files changed, 15 insertions(+), 6 deletions(-)
diff --git a/arch/x86/boot/compressed/eboot.c b/arch/x86/boot/compressed/eboot.c
index 4055e63..fec216f 100644
--- a/arch/x86/boot/compressed/eboot.c
+++ b/arch/x86/boot/compressed/eboot.c
@@ -643,14 +643,22 @@ grow:
u64 size;
size = initrds[j].size;
- status = efi_call_phys3(fh->read, initrds[j].handle,
- &size, addr);
- if (status != EFI_SUCCESS)
- goto free_initrd_total;
+ while (size) {
+ u64 chunksize;
+ if (size > EFI_READ_CHUNK_SIZE)
+ chunksize = EFI_READ_CHUNK_SIZE;
+ else
+ chunksize = size;
+ status = efi_call_phys3(fh->read,
+ initrds[j].handle,
+ &chunksize, addr);
+ if (status != EFI_SUCCESS)
+ goto free_initrd_total;
+ addr += chunksize;
+ size -= chunksize;
+ }
efi_call_phys1(fh->close, initrds[j].handle);
-
- addr += size;
}
}
diff --git a/arch/x86/boot/compressed/eboot.h b/arch/x86/boot/compressed/eboot.h
index f66d023..3925166 100644
--- a/arch/x86/boot/compressed/eboot.h
+++ b/arch/x86/boot/compressed/eboot.h
@@ -12,6 +12,7 @@
#define DESC_TYPE_CODE_DATA (1 << 0)
#define EFI_PAGE_SIZE (1UL << EFI_PAGE_SHIFT)
+#define EFI_READ_CHUNK_SIZE (1024 * 1024)
#define PIXEL_RGB_RESERVED_8BIT_PER_COLOR 0
#define PIXEL_BGR_RESERVED_8BIT_PER_COLOR 1
next prev parent reply other threads:[~2011-12-16 18:43 UTC|newest]
Thread overview: 39+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-10-17 10:40 [PATCH v5 00/10] x86 EFI boot stub Matt Fleming
2011-10-17 10:40 ` [PATCH 01/10] x86: Add missing bzImage fields to struct setup_header Matt Fleming
2011-10-17 10:40 ` [PATCH 02/10] x86, efi: Make efi_call_phys_prelog() CONFIG_RELOCATABLE-aware Matt Fleming
2011-10-17 10:40 ` [PATCH 03/10] x86: Don't use magic strings for EFI loader signature Matt Fleming
2011-10-17 10:40 ` [PATCH 04/10] efi.h: Add struct definition for boot time services Matt Fleming
2011-10-17 10:40 ` [PATCH v2 05/10] efi.h: Add efi_image_loaded_t Matt Fleming
2011-10-17 10:40 ` [PATCH 06/10] efi.h: Add allocation types for boottime->allocate_pages() Matt Fleming
2011-10-17 10:40 ` [PATCH v2 07/10] efi.h: Add graphics protocol guids Matt Fleming
2011-10-17 10:40 ` [PATCH 08/10] efi.h: Add boottime->locate_handle search types Matt Fleming
2011-10-17 10:40 ` [PATCH v2 09/10] efi: Add EFI file I/O data types Matt Fleming
2011-10-17 10:40 ` [PATCH v5 10/10] x86, efi: EFI boot stub support Matt Fleming
2011-10-17 16:39 ` Maarten Lankhorst
2011-10-17 18:28 ` Matt Fleming
2011-10-18 6:09 ` Ingo Molnar
2011-10-17 20:06 ` Maarten Lankhorst
2011-11-15 18:51 ` Matt Fleming
2011-11-23 0:44 ` Maarten Lankhorst
2011-11-23 19:27 ` Matt Fleming
2011-11-24 14:43 ` Maarten Lankhorst
2011-11-24 16:58 ` Maarten Lankhorst
2011-11-24 20:56 ` Matt Fleming
2011-11-24 21:07 ` Matthew Garrett
2011-11-24 21:31 ` Matt Fleming
2011-11-25 1:37 ` [PATCH] x86, efi: Break up large initrd reads Maarten Lankhorst
2011-11-25 8:48 ` Matt Fleming
2011-12-12 23:10 ` H. Peter Anvin
2011-12-13 18:26 ` H. Peter Anvin
2011-12-14 23:33 ` Maarten Lankhorst
2011-12-14 23:36 ` H. Peter Anvin
2011-12-16 12:30 ` [PATCH v2] " Maarten Lankhorst
2011-12-16 18:43 ` tip-bot for Maarten Lankhorst [this message]
2011-12-10 2:37 ` [tip:x86/efi] x86: Add missing bzImage fields to struct setup_header tip-bot for Matt Fleming
2011-12-10 2:38 ` [tip:x86/efi] x86: Don't use magic strings for EFI loader signature tip-bot for Matt Fleming
2011-12-10 2:38 ` [tip:x86/efi] efi.h: Add struct definition for boot time services tip-bot for Matt Fleming
2011-12-10 2:39 ` [tip:x86/efi] efi.h: Add efi_image_loaded_t tip-bot for Matt Fleming
2011-12-10 2:40 ` [tip:x86/efi] efi.h: Add allocation types for boottime->allocate_pages() tip-bot for Matt Fleming
2011-12-10 2:41 ` [tip:x86/efi] efi.h: Add graphics protocol guids tip-bot for Matt Fleming
2011-12-10 2:42 ` [tip:x86/efi] efi.h: Add boottime->locate_handle search types tip-bot for Matt Fleming
2011-12-10 2:42 ` [tip:x86/efi] efi: Add EFI file I/O data types tip-bot for Matt Fleming
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=tip-2d2da60fb40a80cc59383121ccf763e0e0e8a42a@git.kernel.org \
--to=m.b.lankhorst@gmail.com \
--cc=hpa@linux.intel.com \
--cc=hpa@zytor.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-tip-commits@vger.kernel.org \
--cc=mingo@redhat.com \
--cc=tglx@linutronix.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.