From: Franck Bui-Huu <vagabon.xyz@gmail.com>
To: ralf@linux-mips.org
Cc: anemo@mba.ocn.ne.jp, ths@networkno.de, linux-mips@linux-mips.org,
Franck Bui-Huu <fbuihuu@gmail.com>
Subject: [PATCH 3/5] setup.c: clean up initrd related code
Date: Wed, 11 Oct 2006 14:08:43 +0200 [thread overview]
Message-ID: <11605685251791-git-send-email-fbuihuu@gmail.com> (raw)
In-Reply-To: <1160568525897-git-send-email-fbuihuu@gmail.com>
Signed-off-by: Franck Bui-Huu <fbuihuu@gmail.com>
---
arch/mips/kernel/setup.c | 41 ++++++++++++++++++++++++-----------------
arch/mips/mm/init.c | 5 -----
2 files changed, 24 insertions(+), 22 deletions(-)
diff --git a/arch/mips/kernel/setup.c b/arch/mips/kernel/setup.c
index 00d62bd..0e92b9b 100644
--- a/arch/mips/kernel/setup.c
+++ b/arch/mips/kernel/setup.c
@@ -144,14 +144,12 @@ static int __init rd_start_early(char *p
{
unsigned long start = memparse(p, &p);
-#ifdef CONFIG_64BIT
- /* HACK: Guess if the sign extension was forgotten */
- if (start > 0x0000000080000000 && start < 0x00000000ffffffff)
- start |= 0xffffffff00000000UL;
-#endif
+ /*
+ * No sanity checkings are needed here, they're going to be
+ * done by init_initrd() soon.
+ */
initrd_start = start;
initrd_end += start;
-
return 0;
}
early_param("rd_start", rd_start_early);
@@ -159,14 +157,14 @@ early_param("rd_start", rd_start_early);
static int __init rd_size_early(char *p)
{
initrd_end += memparse(p, &p);
-
return 0;
}
early_param("rd_size", rd_size_early);
+/* it returns the next free pfn after initrd */
static unsigned long __init init_initrd(void)
{
- unsigned long tmp, end, size;
+ unsigned long tmp, end;
u32 *initrd_header;
ROOT_DEV = Root_RAM0;
@@ -176,24 +174,34 @@ static unsigned long __init init_initrd(
* already set up initrd_start and initrd_end. In these cases
* perfom sanity checks and use them if all looks good.
*/
- size = initrd_end - initrd_start;
- if (initrd_end == 0 || size == 0) {
- initrd_start = 0;
- initrd_end = 0;
- } else
- return initrd_end;
+ if (initrd_end > initrd_start)
+ goto sanitize;
end = (unsigned long)&_end;
tmp = PAGE_ALIGN(end) - sizeof(u32) * 2;
if (tmp < end)
tmp += PAGE_SIZE;
+ initrd_start = 0;
+ initrd_end = 0;
+ end = 0;
initrd_header = (u32 *)tmp;
if (initrd_header[0] == 0x494E5244) {
initrd_start = (unsigned long)&initrd_header[2];
initrd_end = initrd_start + initrd_header[1];
+sanitize:
+ /*
+ * Sanitize initrd addresses. For example firmware
+ * can't guess if they need to pass them through
+ * 64-bits values if the kernel has been built in pure
+ * 32-bit. We need also to switch from KSEG0 to XKPHYS
+ * addresses now, so the code can now safely use __pa().
+ */
+ end = __pa(initrd_end);
+ initrd_end = (unsigned long)__va(end);
+ initrd_start = (unsigned long)__va(__pa(initrd_start));
}
- return initrd_end;
+ return PFN_UP(end);
}
static void __init finalize_initrd(void)
@@ -255,8 +263,7 @@ static void __init bootmem_init(void)
* not selected. Once that done we can determine the low bound
* of usable memory.
*/
- reserved_end = init_initrd();
- reserved_end = PFN_UP(__pa(max(reserved_end, (unsigned long)&_end)));
+ reserved_end = max(init_initrd(), PFN_UP(__pa(&_end)));
/*
* Find the highest page frame number we have available.
diff --git a/arch/mips/mm/init.c b/arch/mips/mm/init.c
index 2f346d1..1ec0f22 100644
--- a/arch/mips/mm/init.c
+++ b/arch/mips/mm/init.c
@@ -502,11 +502,6 @@ void free_init_pages(char *what, unsigne
#ifdef CONFIG_BLK_DEV_INITRD
void free_initrd_mem(unsigned long start, unsigned long end)
{
-#ifdef CONFIG_64BIT
- /* Switch from KSEG0 to XKPHYS addresses */
- start = (unsigned long)phys_to_virt(CPHYSADDR(start));
- end = (unsigned long)phys_to_virt(CPHYSADDR(end));
-#endif
free_init_pages("initrd memory", start, end);
}
#endif
--
1.4.2.3
next prev parent reply other threads:[~2006-10-11 12:09 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-10-11 12:08 [PATCH 0/5] Get ride of CPHYSADDR() in setup.c Franck Bui-Huu
2006-10-11 12:08 ` [PATCH 1/5] Make __pa() uses CPHYSADDR() if really needed Franck Bui-Huu
2006-10-11 13:33 ` Atsushi Nemoto
2006-10-11 14:15 ` Franck Bui-Huu
2006-10-11 15:30 ` Atsushi Nemoto
2006-10-11 16:01 ` Franck Bui-Huu
2006-10-11 17:07 ` Franck Bui-Huu
2006-10-12 10:05 ` Atsushi Nemoto
2006-10-12 11:49 ` Franck Bui-Huu
2006-10-12 12:37 ` Thiemo Seufer
2006-10-11 12:08 ` [PATCH 2/5] setup.c: get ride of CPHYSADDR() Franck Bui-Huu
2006-10-11 12:08 ` Franck Bui-Huu [this message]
2006-10-13 8:23 ` [PATCH 3/5] setup.c: clean up initrd related code Franck Bui-Huu
2006-10-11 12:08 ` [PATCH 4/5] Introduce __pa_symbol() Franck Bui-Huu
2006-10-11 15:34 ` Atsushi Nemoto
2006-10-11 16:13 ` Franck Bui-Huu
2006-10-12 9:48 ` Atsushi Nemoto
2006-10-12 11:57 ` Franck Bui-Huu
2006-10-12 14:27 ` Atsushi Nemoto
2006-10-11 12:08 ` [PATCH 5/5] setup.c: use __pa_symbol() where needed Franck Bui-Huu
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=11605685251791-git-send-email-fbuihuu@gmail.com \
--to=vagabon.xyz@gmail.com \
--cc=anemo@mba.ocn.ne.jp \
--cc=fbuihuu@gmail.com \
--cc=linux-mips@linux-mips.org \
--cc=ralf@linux-mips.org \
--cc=ths@networkno.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.