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 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.