From: Yinghai Lu <yhlu.kernel@gmail.com>
To: Ingo Molnar <mingo@elte.hu>, Thomas Gleixner <tglx@linutronix.de>,
"H. Peter Anvin" <hpa@zytor.com>
Cc: "linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>
Subject: [PATCH 03/16] x86: update reserve_initrd to support 64bit
Date: Wed, 25 Jun 2008 17:49:26 -0700 [thread overview]
Message-ID: <200806251749.26274.yhlu.kernel@gmail.com> (raw)
In-Reply-To: <200806251748.06743.yhlu.kernel@gmail.com>
Signed-off-by: Yinghai Lu <yhlu.kernel@gmail.com>
Index: linux-2.6/arch/x86/kernel/setup_32.c
===================================================================
--- linux-2.6.orig/arch/x86/kernel/setup_32.c
+++ linux-2.6/arch/x86/kernel/setup_32.c
@@ -186,43 +186,18 @@ static inline void copy_edd(void)
#ifdef CONFIG_BLK_DEV_INITRD
-static void __init relocate_initrd(void);
+#ifdef CONFIG_X86_32
-static void __init reserve_initrd(void)
+#define MAX_MAP_CHUNK (NR_FIX_BTMAPS << PAGE_SHIFT)
+static void __init relocate_initrd(void)
{
+
u64 ramdisk_image = boot_params.hdr.ramdisk_image;
u64 ramdisk_size = boot_params.hdr.ramdisk_size;
- u64 ramdisk_end = ramdisk_image + ramdisk_size;
u64 end_of_lowmem = max_low_pfn << PAGE_SHIFT;
u64 ramdisk_here;
-
- if (!boot_params.hdr.type_of_loader ||
- !ramdisk_image || !ramdisk_size)
- return; /* No initrd provided by bootloader */
-
- initrd_start = 0;
-
- if (ramdisk_size >= (end_of_lowmem>>1)) {
- free_early(ramdisk_image, ramdisk_end);
- printk(KERN_ERR "initrd too large to handle, "
- "disabling initrd\n");
- return;
- }
-
- printk(KERN_INFO "old RAMDISK: %08llx - %08llx\n", ramdisk_image,
- ramdisk_end);
-
-
- if (ramdisk_end <= end_of_lowmem) {
- /* All in lowmem, easy case */
- /*
- * don't need to reserve again, already reserved early
- * in i386_start_kernel
- */
- initrd_start = ramdisk_image + PAGE_OFFSET;
- initrd_end = initrd_start + ramdisk_size;
- return;
- }
+ unsigned long slop, clen, mapaddr;
+ char *p, *q;
/* We need to move the initrd down into lowmem */
ramdisk_here = find_e820_area(0, end_of_lowmem, ramdisk_size,
@@ -241,22 +216,6 @@ static void __init reserve_initrd(void)
printk(KERN_INFO "Allocated new RAMDISK: %08llx - %08llx\n",
ramdisk_here, ramdisk_here + ramdisk_size);
- relocate_initrd();
-}
-
-#define MAX_MAP_CHUNK (NR_FIX_BTMAPS << PAGE_SHIFT)
-
-static void __init relocate_initrd(void)
-{
- u64 ramdisk_image = boot_params.hdr.ramdisk_image;
- u64 ramdisk_size = boot_params.hdr.ramdisk_size;
- u64 end_of_lowmem = max_low_pfn << PAGE_SHIFT;
- u64 ramdisk_here;
- unsigned long slop, clen, mapaddr;
- char *p, *q;
-
- ramdisk_here = initrd_start - PAGE_OFFSET;
-
q = (char *)initrd_start;
/* Copy any lowmem portion of the initrd */
@@ -286,18 +245,60 @@ static void __init relocate_initrd(void)
/* high pages is not converted by early_res_to_bootmem */
ramdisk_image = boot_params.hdr.ramdisk_image;
ramdisk_size = boot_params.hdr.ramdisk_size;
- printk(KERN_INFO "Copied RAMDISK from %016llx - %016llx to %08llx - %08llx\n",
+ printk(KERN_INFO "Move RAMDISK from %016llx - %016llx to"
+ " %08llx - %08llx\n",
ramdisk_image, ramdisk_image + ramdisk_size - 1,
ramdisk_here, ramdisk_here + ramdisk_size - 1);
+}
+#endif
- /*
- * need to free old one, otherwise init cross max_low_pfn could be
- * converted to bootmem
- */
- free_early(ramdisk_image, ramdisk_image+ramdisk_size);
+static void __init reserve_initrd(void)
+{
+ u64 ramdisk_image = boot_params.hdr.ramdisk_image;
+ u64 ramdisk_size = boot_params.hdr.ramdisk_size;
+ u64 ramdisk_end = ramdisk_image + ramdisk_size;
+ u64 end_of_lowmem = max_low_pfn << PAGE_SHIFT;
+
+ if (!boot_params.hdr.type_of_loader ||
+ !ramdisk_image || !ramdisk_size)
+ return; /* No initrd provided by bootloader */
+
+ initrd_start = 0;
+
+ if (ramdisk_size >= (end_of_lowmem>>1)) {
+ free_early(ramdisk_image, ramdisk_end);
+ printk(KERN_ERR "initrd too large to handle, "
+ "disabling initrd\n");
+ return;
+ }
+
+ printk(KERN_INFO "RAMDISK: %08llx - %08llx\n", ramdisk_image,
+ ramdisk_end);
+
+
+ if (ramdisk_end <= end_of_lowmem) {
+ /* All in lowmem, easy case */
+ /*
+ * don't need to reserve again, already reserved early
+ * in i386_start_kernel
+ */
+ initrd_start = ramdisk_image + PAGE_OFFSET;
+ initrd_end = initrd_start + ramdisk_size;
+ return;
+ }
+
+#ifdef CONFIG_X86_32
+ relocate_initrd();
+#else
+ printk(KERN_ERR "initrd extends beyond end of memory "
+ "(0x%08llx > 0x%08llx)\ndisabling initrd\n",
+ ramdisk_end, end_of_lowmem);
+ initrd_start = 0;
+#endif
+ free_early(ramdisk_image, ramdisk_end);
}
#else
-void __init reserve_initrd(void)
+static void __init reserve_initrd(void)
{
}
#endif /* CONFIG_BLK_DEV_INITRD */
next prev parent reply other threads:[~2008-06-26 1:02 UTC|newest]
Thread overview: 55+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-06-26 0:48 [PATCH 00/16] x86: merge setup_32/64.c Yinghai Lu
2008-06-26 0:49 ` Yinghai Lu [this message]
2008-06-26 0:50 ` [PATCH 04/16] x86: put global variable for 32bit all together Yinghai Lu
2008-06-26 0:51 ` [PATCH 05/16] x86: add extra includes for 64bit support Yinghai Lu
2008-06-26 0:52 ` [PATCH 06/16] x86: merge 64bit setup_arch into setup_32 Yinghai Lu
2008-06-26 0:53 ` [PATCH 07/16] x86: space to tab in setup_arch Yinghai Lu
2008-06-26 0:54 ` [PATCH 08/16] x86: rename setup_32.c to setup.c Yinghai Lu
2008-06-26 0:55 ` [PATCH 09/16] x86: move boot_params back " Yinghai Lu
2008-06-26 0:56 ` [PATCH 10/16] x86: move parse_setup_data " Yinghai Lu
2008-06-26 0:57 ` [PATCH 11/16] x86: move back crashkernel " Yinghai Lu
2008-06-26 0:58 ` [PATCH 12/16] x86: move reserve_standard_io_resources " Yinghai Lu
2008-06-26 0:58 ` [PATCH 13/16] x86: move parse elfvorehdr " Yinghai Lu
2008-06-26 0:59 ` [PATCH 14/16] x86: make x86_find_smp_config depends on 64 bit too Yinghai Lu
2008-06-26 1:00 ` [PATCH 15/16] x86: change some functions in setup.c to static Yinghai Lu
2008-06-26 1:02 ` [PATCH 16/16] x86: we only have init_pg_tables_end for 32bit Yinghai Lu
2008-06-26 2:52 ` [PATCH] x86: clean up ARCH_SETUP Yinghai Lu
2008-06-26 13:26 ` Ingo Molnar
2008-06-26 4:51 ` [PATCH] x86: move fix mapping page table range early Yinghai Lu
2008-06-26 13:27 ` Ingo Molnar
2008-06-27 6:17 ` [PATCH] x86: early res print out alignment Yinghai Lu
2008-06-27 8:41 ` [PATCH] x86: let setup_arch call init_apic_mappings for 32bit Yinghai Lu
2008-06-28 6:37 ` Ingo Molnar
2008-06-27 22:36 ` [PATCH] x86: early res print out alignment v2 Yinghai Lu
2008-06-28 6:36 ` Ingo Molnar
2008-06-29 4:42 ` Yinghai Lu
2008-06-27 22:38 ` [PATCH] x86: fix init_memory_mapping over boundary Yinghai Lu
2008-06-28 5:47 ` [PATCH] x86: fix init_memory_mapping over boundary v2 Yinghai Lu
2008-06-28 6:35 ` Ingo Molnar
2008-06-28 7:01 ` Yinghai Lu
2008-06-28 7:02 ` Ingo Molnar
2008-06-28 7:19 ` Yinghai Lu
2008-06-28 7:21 ` Ingo Molnar
2008-06-28 7:42 ` Yinghai Lu
2008-06-28 7:22 ` Yinghai Lu
2008-06-28 7:47 ` Ingo Molnar
2008-06-28 10:30 ` Yinghai Lu
2008-06-28 11:07 ` Ingo Molnar
2008-06-28 17:38 ` Jeremy Fitzhardinge
2008-06-28 20:33 ` Yinghai Lu
2008-06-29 0:49 ` [PATCH] x86: fix init_memory_mapping over boundary v4 Yinghai Lu
2008-06-29 2:22 ` Jeremy Fitzhardinge
2008-06-29 4:40 ` Yinghai Lu
2008-06-29 5:18 ` Jeremy Fitzhardinge
2008-06-29 7:08 ` Ingo Molnar
2008-06-29 7:30 ` Yinghai Lu
2008-06-30 8:33 ` Ingo Molnar
2008-06-29 7:39 ` [PATCH] x86: fix init_memory_mapping over boundary v4 - diff to v3 Yinghai Lu
2008-06-29 9:48 ` Ingo Molnar
2008-06-29 0:49 ` [PATCH] x86: fix warning in e820_reserve_resources with 32bit Yinghai Lu
2008-06-29 9:49 ` Ingo Molnar
2008-06-26 9:47 ` [PATCH 00/16] x86: merge setup_32/64.c Ingo Molnar
2008-06-26 10:02 ` Ingo Molnar
2008-06-26 10:06 ` Yinghai Lu
2008-06-26 11:01 ` Ingo Molnar
2008-06-27 2:51 ` Huang, Ying
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=200806251749.26274.yhlu.kernel@gmail.com \
--to=yhlu.kernel@gmail.com \
--cc=hpa@zytor.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@elte.hu \
--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.