From: "Huang, Ying" <ying.huang@intel.com>
To: "H. Peter Anvin" <hpa@zytor.com>, Andi Kleen <ak@suse.de>,
"Eric W. Biederman" <ebiederm@xmission.com>,
akpm@linux-foundation.org, Yinghai Lu <yhlu.kernel@gmail.com>,
Chandramouli Narayanan <mouli@linux.intel.com>
Cc: linux-kernel@vger.kernel.org
Subject: [RFC -mm 1/2] i386/x86_64 boot: setup data
Date: Mon, 17 Sep 2007 16:26:18 +0800 [thread overview]
Message-ID: <1190017578.5866.21.camel@caritas-dev.intel.com> (raw)
This patch add a field of 64-bit physical pointer to NULL terminated
single linked list of struct setup_data to real-mode kernel
header. This is used to define a more extensible boot parameters
passing mechanism.
Signed-off-by: Huang Ying <ying.huang@intel.com>
---
arch/i386/Kconfig | 3 ---
arch/i386/boot/header.S | 6 ++++++
arch/i386/kernel/setup.c | 20 ++++++++++++++++++++
arch/x86_64/kernel/setup.c | 19 +++++++++++++++++++
include/asm-i386/bootparam.h | 15 +++++++++++++++
include/asm-i386/io.h | 7 +++++++
6 files changed, 67 insertions(+), 3 deletions(-)
Index: linux-2.6.23-rc4/include/asm-i386/bootparam.h
===================================================================
--- linux-2.6.23-rc4.orig/include/asm-i386/bootparam.h 2007-09-17 14:18:24.000000000 +0800
+++ linux-2.6.23-rc4/include/asm-i386/bootparam.h 2007-09-17 15:02:33.000000000 +0800
@@ -9,6 +9,17 @@
#include <asm/ist.h>
#include <video/edid.h>
+/* setup data types */
+#define SETUP_NONE 0
+
+/* extensible setup data list node */
+struct setup_data {
+ u64 next;
+ u32 type;
+ u32 len;
+ u8 data[0];
+} __attribute__((packed));
+
struct setup_header {
u8 setup_sects;
u16 root_flags;
@@ -41,6 +52,10 @@
u32 initrd_addr_max;
u32 kernel_alignment;
u8 relocatable_kernel;
+ u8 _pad2[3];
+ u32 cmdline_size;
+ u32 _pad3;
+ u64 setup_data;
} __attribute__((packed));
struct sys_desc_table {
Index: linux-2.6.23-rc4/arch/i386/boot/header.S
===================================================================
--- linux-2.6.23-rc4.orig/arch/i386/boot/header.S 2007-09-17 14:17:32.000000000 +0800
+++ linux-2.6.23-rc4/arch/i386/boot/header.S 2007-09-17 14:18:32.000000000 +0800
@@ -214,6 +214,12 @@
#added with boot protocol
#version 2.06
+pad4: .long 0
+
+setup_data: .quad 0 # 64-bit physical pointer to
+ # single linked list of
+ # struct setup_data
+
# End of setup header #####################################################
.section ".inittext", "ax"
Index: linux-2.6.23-rc4/arch/x86_64/kernel/setup.c
===================================================================
--- linux-2.6.23-rc4.orig/arch/x86_64/kernel/setup.c 2007-09-17 14:18:23.000000000 +0800
+++ linux-2.6.23-rc4/arch/x86_64/kernel/setup.c 2007-09-17 15:02:33.000000000 +0800
@@ -221,6 +221,23 @@
ebda_size = 64*1024;
}
+void __init parse_setup_data(void)
+{
+ struct setup_data *setup_data;
+ unsigned long pa_setup_data;
+
+ pa_setup_data = boot_params.hdr.setup_data;
+ while (pa_setup_data) {
+ setup_data = early_ioremap(pa_setup_data, PAGE_SIZE);
+ switch (setup_data->type) {
+ default:
+ break;
+ }
+ pa_setup_data = setup_data->next;
+ early_iounmap(setup_data, PAGE_SIZE);
+ }
+}
+
void __init setup_arch(char **cmdline_p)
{
printk(KERN_INFO "Command line: %s\n", boot_command_line);
@@ -256,6 +273,8 @@
strlcpy(command_line, boot_command_line, COMMAND_LINE_SIZE);
*cmdline_p = command_line;
+ parse_setup_data();
+
parse_early_param();
finish_e820_parsing();
Index: linux-2.6.23-rc4/arch/i386/kernel/setup.c
===================================================================
--- linux-2.6.23-rc4.orig/arch/i386/kernel/setup.c 2007-09-17 14:18:23.000000000 +0800
+++ linux-2.6.23-rc4/arch/i386/kernel/setup.c 2007-09-17 14:18:32.000000000 +0800
@@ -496,6 +496,23 @@
return machine_specific_memory_setup();
}
+void __init parse_setup_data(void)
+{
+ struct setup_data *setup_data;
+ unsigned long pa_setup_data, pa_next;
+
+ pa_setup_data = boot_params.hdr.setup_data;
+ while (pa_setup_data) {
+ setup_data = boot_ioremap(pa_setup_data, PAGE_SIZE);
+ pa_next = setup_data->next;
+ switch (setup_data->type) {
+ default:
+ break;
+ }
+ pa_setup_data = pa_next;
+ }
+}
+
/*
* Determine if we were loaded by an EFI loader. If so, then we have also been
* passed the efi memmap, systab, etc., so we should use these data structures
@@ -544,6 +561,9 @@
rd_prompt = ((boot_params.hdr.ram_size & RAMDISK_PROMPT_FLAG) != 0);
rd_doload = ((boot_params.hdr.ram_size & RAMDISK_LOAD_FLAG) != 0);
#endif
+
+ parse_setup_data();
+
ARCH_SETUP
if (efi_enabled)
efi_init();
Index: linux-2.6.23-rc4/include/asm-i386/io.h
===================================================================
--- linux-2.6.23-rc4.orig/include/asm-i386/io.h 2007-09-17 14:17:32.000000000 +0800
+++ linux-2.6.23-rc4/include/asm-i386/io.h 2007-09-17 15:02:44.000000000 +0800
@@ -126,6 +126,13 @@
extern void iounmap(volatile void __iomem *addr);
/*
+ * boot_ioremap is for temporary early boot-time mappings, before
+ * paging_init(), when the boot-time page tables are still in use.
+ * The mapping is currently limited to at most 4 pages.
+ */
+extern void *boot_ioremap(unsigned long offset, unsigned long size);
+
+/*
* bt_ioremap() and bt_iounmap() are for temporary early boot-time
* mappings, before the real ioremap() is functional.
* A boot-time mapping is currently limited to at most 16 pages.
Index: linux-2.6.23-rc4/arch/i386/Kconfig
===================================================================
--- linux-2.6.23-rc4.orig/arch/i386/Kconfig 2007-09-17 14:18:36.000000000 +0800
+++ linux-2.6.23-rc4/arch/i386/Kconfig 2007-09-17 14:18:43.000000000 +0800
@@ -772,11 +772,8 @@
The default yes will allow the kernel to do irq load balancing.
Saying no will keep the kernel from doing irq load balancing.
-# turning this on wastes a bunch of space.
-# Summit needs it only when NUMA is on
config BOOT_IOREMAP
bool
- depends on (((X86_SUMMIT || X86_GENERICARCH) && NUMA) || (X86 && EFI))
default y
config SECCOMP
next reply other threads:[~2007-09-17 8:24 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-09-17 8:26 Huang, Ying [this message]
2007-09-17 15:30 ` [RFC -mm 1/2] i386/x86_64 boot: setup data H. Peter Anvin
2007-09-18 1:11 ` 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=1190017578.5866.21.camel@caritas-dev.intel.com \
--to=ying.huang@intel.com \
--cc=ak@suse.de \
--cc=akpm@linux-foundation.org \
--cc=ebiederm@xmission.com \
--cc=hpa@zytor.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mouli@linux.intel.com \
--cc=yhlu.kernel@gmail.com \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox