Re: [PATCH] x86_64, i386: Add command line length to boot protocol

2007-03-12 Thread Dave Jones
On Tue, Mar 13, 2007 at 12:12:20AM +0100, Pavel Machek wrote:

 > > 65535 characters? Are you for real?
 > > Stop and think about just how big that is. If you have to create
 > > a boot command line that long, you have serious, serious issues.
 > 
 > Well, it is about the same size as my .config...

So? That has *nothing* to do with the boot command line

 > I agree we are unlikely to hit it any time soon... I could imagine
 > some (ab)uses, like fixed_acpi_bios=, but those
 > are ugly.

That's beyond ugly, and rapidly heading towards 'loony'.

 > I could also imagine some uses where entire embedded machine
 > is described at kernel commandline.

There are far better ways to get configuration into the kernel
than the boot command line.

Anyways, I'm tired of arguing for the sake of arguing.
I really could care less.

Dave

-- 
http://www.codemonkey.org.uk
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH] x86_64, i386: Add command line length to boot protocol

2007-03-12 Thread Pavel Machek
Hi!

>  > >  > +cmdline_size:   .long   COMMAND_LINE_SIZE-1 #length of the 
> command line,
>  > > 
>  > > Why a long? It's unlikely that someone is going to have a command line
>  > > bigger than 0x.
>  > 
>  > Well, I could imagine overflowing that. Describing your numa setup,
>  > excluding few bad bits of ram using memmap=exact, set up your boot
>  > over iscsi on cmdline these are likely to eat insane ammount of
>  > cmdline space.
> 
> 65535 characters? Are you for real?
> Stop and think about just how big that is. If you have to create
> a boot command line that long, you have serious, serious issues.

Well, it is about the same size as my .config...

I agree we are unlikely to hit it any time soon... I could imagine
some (ab)uses, like fixed_acpi_bios=, but those
are ugly. I could also imagine some uses where entire embedded machine
is described at kernel commandline.

Yes, all those are ugly/unlikely. OTOH saving 2 bytes does not seem
like that great goal.
Pavel
-- 
(english) http://www.livejournal.com/~pavelmachek
(cesky, pictures) 
http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH] x86_64, i386: Add command line length to boot protocol

2007-03-12 Thread Dave Jones
On Mon, Mar 12, 2007 at 10:43:52AM +, Pavel Machek wrote:
 > On Tue 2007-03-06 13:21:34, Dave Jones wrote:
 > > On Tue, Mar 06, 2007 at 07:14:30PM +0100, Bernhard Walle wrote:
 > > 
 > >  > +cmdline_size:   .long   COMMAND_LINE_SIZE-1 #length of the command 
 > > line,
 > > 
 > > Why a long? It's unlikely that someone is going to have a command line
 > > bigger than 0x.
 > 
 > Well, I could imagine overflowing that. Describing your numa setup,
 > excluding few bad bits of ram using memmap=exact, set up your boot
 > over iscsi on cmdline these are likely to eat insane ammount of
 > cmdline space.

65535 characters? Are you for real?
Stop and think about just how big that is. If you have to create
a boot command line that long, you have serious, serious issues.

Dave

-- 
http://www.codemonkey.org.uk
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH] x86_64, i386: Add command line length to boot protocol

2007-03-12 Thread Pavel Machek
On Tue 2007-03-06 13:21:34, Dave Jones wrote:
> On Tue, Mar 06, 2007 at 07:14:30PM +0100, Bernhard Walle wrote:
> 
>  > +cmdline_size:   .long   COMMAND_LINE_SIZE-1 #length of the command 
> line,
> 
> Why a long? It's unlikely that someone is going to have a command line
> bigger than 0x.

Well, I could imagine overflowing that. Describing your numa setup,
excluding few bad bits of ram using memmap=exact, set up your boot
over iscsi on cmdline these are likely to eat insane ammount of
cmdline space.
Pavel
-- 
(english) http://www.livejournal.com/~pavelmachek
(cesky, pictures) 
http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH] x86_64, i386: Add command line length to boot protocol

2007-03-07 Thread Vivek Goyal
On Tue, Mar 06, 2007 at 07:14:30PM +0100, Bernhard Walle wrote:
> Because the command line is increased to 2048 characters after 2.6.21,
> it's not possible for boot loaders and userspace tools to determine the length
> of the command line the kernel can understand. The benefit of knowing the
> length is that users can be warned if the command line size is too long which
> prevents surprise if things don't work after bootup.

This makes sense to me. It can be used in kexec bootloader to warn user
if command line size exceeds than supported by kernel.

> 
> This patch updates the boot protocol to contain a field called
> "cmdline_size" that contain the length of the command line (excluding
> the terminating zero).
> 
> The patch also adds missing fields (of protocol version 2.05) to the x86_64
> setup code.

Today I have posted the x86_64 relocatable kernel patches which also fill
in missing 2.05 fields for x86_64.

[..]
>  #define SIG1 0xAA55
> @@ -81,7 +82,7 @@ start:
>  # This is the setup header, and it must start at %cs:2 (old 0x9020:2)
> 
>   .ascii  "HdrS"  # header signature
> - .word   0x0205  # header version number (>= 0x0105)
> + .word   0x0206  # header version number (>= 0x0105)
>   # or else old loadlin-1.5 will fail)
>  realmode_swtch:  .word   0, 0# default_switch, SETUPSEG
>  start_sys_seg:   .word   SYSSEG
> @@ -171,6 +172,10 @@ relocatable_kernel:.byte 0
>  pad2:.byte 0
>  pad3:.word 0
> 
> +cmdline_size:   .long   COMMAND_LINE_SIZE-1 #length of the command line,
> +#added with boot protocol
> +#version 2.06
> +

I think you will not require more than two bytes to represent supported
command line size so you can use replace pad3 and use these two bytes. These
were anyway padding bytes to be used for other requirements.

[..]
>   # or else old loadlin-1.5 will fail)
>  realmode_swtch:  .word   0, 0# default_switch, SETUPSEG
>  start_sys_seg:   .word   SYSSEG
> @@ -155,6 +156,18 @@ cmd_line_ptr:.long 0 # (Header versio
>   # low memory 0x1 or higher.
> 
>  ramdisk_max: .long 0x
> +
> +kernel_alignment:  .long CONFIG_PHYSICAL_START   #physical addr alignment
> + #(not relocatable =>
> + #fixed start == alignment)
> +

This is wrong. CONFIG_PHYSICAL_START is not alignment. On x86_64 alignment
required is 2MB. (0x20).

Thanks
Vivek
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH] x86_64, i386: Add command line length to boot protocol

2007-03-06 Thread Alon Bar-Lev

On 3/6/07, Bernhard Walle <[EMAIL PROTECTED]> wrote:

+The kernel command line is a null-terminated string. The maximum
+length can be retrieved from the field cmdline_size.  Before protocol
+version 2.06, the maximum was 255 characters.  A string that is too
+long will be automatically truncated by the kernel.


This is incorrect.
Since 2.02, the maximum was null terminated string truncated by kernel.

Best Regards,
Alon Bar-Lev.
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH] x86_64, i386: Add command line length to boot protocol

2007-03-06 Thread Dave Jones
On Tue, Mar 06, 2007 at 07:14:30PM +0100, Bernhard Walle wrote:

 > +cmdline_size:   .long   COMMAND_LINE_SIZE-1 #length of the command line,

Why a long? It's unlikely that someone is going to have a command line
bigger than 0x.

Dave

-- 
http://www.codemonkey.org.uk
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


[PATCH] x86_64, i386: Add command line length to boot protocol

2007-03-06 Thread Bernhard Walle
Because the command line is increased to 2048 characters after 2.6.21,
it's not possible for boot loaders and userspace tools to determine the length
of the command line the kernel can understand. The benefit of knowing the
length is that users can be warned if the command line size is too long which
prevents surprise if things don't work after bootup.

This patch updates the boot protocol to contain a field called
"cmdline_size" that contain the length of the command line (excluding
the terminating zero).

The patch also adds missing fields (of protocol version 2.05) to the x86_64
setup code.


Signed-off-by: Bernhard Walle <[EMAIL PROTECTED]>
Cc: Alon Bar-Lev <[EMAIL PROTECTED]>
Cc: Andi Kleen <[EMAIL PROTECTED]>

---
 Documentation/i386/boot.txt |   23 +--
 arch/i386/boot/setup.S  |7 ++-
 arch/x86_64/boot/setup.S|   15 ++-
 3 files changed, 37 insertions(+), 8 deletions(-)

Index: longer-cmdline-boot-proto-mm/Documentation/i386/boot.txt
===
--- longer-cmdline-boot-proto-mm.orig/Documentation/i386/boot.txt
+++ longer-cmdline-boot-proto-mm/Documentation/i386/boot.txt
@@ -2,7 +2,7 @@
 
 
H. Peter Anvin <[EMAIL PROTECTED]>
-   Last update 2007-01-26
+   Last update 2007-03-06
 
 On the i386 platform, the Linux kernel uses a rather complicated boot
 convention.  This has evolved partially due to historical aspects, as
@@ -35,9 +35,13 @@ Protocol 2.03:   (Kernel 2.4.18-pre1) Expl
initrd address available to the bootloader.
 
 Protocol 2.04: (Kernel 2.6.14) Extend the syssize field to four bytes.
+
 Protocol 2.05: (Kernel 2.6.20) Make protected mode kernel relocatable.
Introduce relocatable_kernel and kernel_alignment fields.
 
+Protocol 2.06: (Kernel 2.6.22) Added a field that contains the size of
+   the boot command line
+
 
  MEMORY LAYOUT
 
@@ -133,6 +137,8 @@ Offset  Proto   NameMeaning
 022C/4 2.03+   initrd_addr_max Highest legal initrd address
 0230/4 2.05+   kernel_alignment Physical addr alignment required for kernel
 0234/1 2.05+   relocatable_kernel Whether kernel is relocatable or not
+0235/3 N/A pad2Unused
+0238/4 2.06+   cmdline_sizeMaximum size of the kernel command line
 
 (1) For backwards compatibility, if the setup_sects field contains 0, the
 real value is 4.
@@ -233,6 +239,12 @@ filled out, however:
if your ramdisk is exactly 131072 bytes long and this field is
0x37FF, you can start your ramdisk at 0x37FE.)
 
+  cmdline_size:
+   The maximum size of the command line without the terminating
+   zero. This means that the command line can contain at most
+   cmdline_size characters. With protocol version 2.05 and
+   earlier, the maximum size was 255.
+
 
  THE KERNEL COMMAND LINE
 
@@ -241,11 +253,10 @@ loader to communicate with the kernel.  
 relevant to the boot loader itself, see "special command line options"
 below.
 
-The kernel command line is a null-terminated string currently up to
-255 characters long, plus the final null.  A string that is too long
-will be automatically truncated by the kernel, a boot loader may allow
-a longer command line to be passed to permit future kernels to extend
-this limit.
+The kernel command line is a null-terminated string. The maximum
+length can be retrieved from the field cmdline_size.  Before protocol
+version 2.06, the maximum was 255 characters.  A string that is too
+long will be automatically truncated by the kernel.
 
 If the boot protocol version is 2.02 or later, the address of the
 kernel command line is given by the header field cmd_line_ptr (see
Index: longer-cmdline-boot-proto-mm/arch/i386/boot/setup.S
===
--- longer-cmdline-boot-proto-mm.orig/arch/i386/boot/setup.S
+++ longer-cmdline-boot-proto-mm/arch/i386/boot/setup.S
@@ -52,6 +52,7 @@
 #include 
 #include 
 #include 
+#include 

 /* Signature words to ensure LILO loaded us right */
 #define SIG1   0xAA55
@@ -81,7 +82,7 @@ start:
 # This is the setup header, and it must start at %cs:2 (old 0x9020:2)
 
.ascii  "HdrS"  # header signature
-   .word   0x0205  # header version number (>= 0x0105)
+   .word   0x0206  # header version number (>= 0x0105)
# or else old loadlin-1.5 will fail)
 realmode_swtch:.word   0, 0# default_switch, SETUPSEG
 start_sys_seg: .word   SYSSEG
@@ -171,6 +172,10 @@ relocatable_kernel:.byte 0
 pad2:  .byte 0
 pad3:  .word 0
 
+cmdline_size:   .long   COMMAND_LINE_SIZE-1 #length of the command line,
+#added with boot protocol
+ 

[PATCH] x86_64, i386: Add command line length to boot protocol

2007-02-13 Thread Bernhard Walle
[Difference to previous attempt: cmdline_size is now without terminating
zero, requested by H. Peter Anvin.]

Because the command line is increased to 2048 characters after 2.6.20-rc6-mm1,
it's not possible for boot loaders and userspace tools to determine the length
of the command line the kernel can understand. The benefit of knowing the
length is that users can be warned if the command line size is too long which
prevents surprise if things don't work after bootup.

This patch updates the boot protocol to contain a field called
"cmdline_size" that contain the length of the command line (excluding
the terminating zero). It also updates documentation to set the length
to 255 characters before boot protocol 2.06, simply because there was no
kernel before that has another limit than 255 characters.

The patch also adds missing fields (of protocol version 2.05) to the x86_64
setup code.


Signed-off-by: Bernhard Walle <[EMAIL PROTECTED]>
Cc: Torsten Duwe <[EMAIL PROTECTED]>
Cc: Andi Kleen <[EMAIL PROTECTED]>

---
 Documentation/i386/boot.txt |   23 +--
 arch/i386/boot/setup.S  |7 ++-
 arch/x86_64/boot/setup.S|   15 ++-
 3 files changed, 37 insertions(+), 8 deletions(-)

Index: b/Documentation/i386/boot.txt
===
--- a/Documentation/i386/boot.txt
+++ b/Documentation/i386/boot.txt
@@ -2,7 +2,7 @@
 
 
H. Peter Anvin <[EMAIL PROTECTED]>
-   Last update 2007-01-26
+   Last update 2007-02-13
 
 On the i386 platform, the Linux kernel uses a rather complicated boot
 convention.  This has evolved partially due to historical aspects, as
@@ -35,9 +35,13 @@ Protocol 2.03:   (Kernel 2.4.18-pre1) Expl
initrd address available to the bootloader.
 
 Protocol 2.04: (Kernel 2.6.14) Extend the syssize field to four bytes.
+
 Protocol 2.05: (Kernel 2.6.20) Make protected mode kernel relocatable.
Introduce relocatable_kernel and kernel_alignment fields.
 
+Protocol 2.06: (Kernel 2.6.21) Added a field that contains the size of
+   the boot command line
+
 
  MEMORY LAYOUT
 
@@ -133,6 +137,8 @@ Offset  Proto   NameMeaning
 022C/4 2.03+   initrd_addr_max Highest legal initrd address
 0230/4 2.05+   kernel_alignment Physical addr alignment required for kernel
 0234/1 2.05+   relocatable_kernel Whether kernel is relocatable or not
+0235/3 N/A pad2Unused
+0238/4 2.06+   cmdline_sizeMaximum size of the kernel command line
 
 (1) For backwards compatibility, if the setup_sects field contains 0, the
 real value is 4.
@@ -233,6 +239,12 @@ filled out, however:
if your ramdisk is exactly 131072 bytes long and this field is
0x37FF, you can start your ramdisk at 0x37FE.)
 
+  cmdline_size:
+   The maximum size of the command line without the terminating
+   zero. This means that the command line can contain at most
+   cmdline_size characters. With protocol version 2.05 and
+   earlier, the maximum size was 255.
+
 
  THE KERNEL COMMAND LINE
 
@@ -241,11 +253,10 @@ loader to communicate with the kernel.  
 relevant to the boot loader itself, see "special command line options"
 below.
 
-The kernel command line is a null-terminated string currently up to
-255 characters long, plus the final null.  A string that is too long
-will be automatically truncated by the kernel, a boot loader may allow
-a longer command line to be passed to permit future kernels to extend
-this limit.
+The kernel command line is a null-terminated string. The maximum
+length can be retrieved from the field cmdline_size.  Before protocol
+version 2.06, the maximum was 255 characters.  A string that is too
+long will be automatically truncated by the kernel.
 
 If the boot protocol version is 2.02 or later, the address of the
 kernel command line is given by the header field cmd_line_ptr (see
Index: b/arch/i386/boot/setup.S
===
--- a/arch/i386/boot/setup.S
+++ b/arch/i386/boot/setup.S
@@ -52,6 +52,7 @@
 #include 
 #include 
 #include 
+#include 

 /* Signature words to ensure LILO loaded us right */
 #define SIG1   0xAA55
@@ -81,7 +82,7 @@ start:
 # This is the setup header, and it must start at %cs:2 (old 0x9020:2)
 
.ascii  "HdrS"  # header signature
-   .word   0x0205  # header version number (>= 0x0105)
+   .word   0x0206  # header version number (>= 0x0105)
# or else old loadlin-1.5 will fail)
 realmode_swtch:.word   0, 0# default_switch, SETUPSEG
 start_sys_seg: .word   SYSSEG
@@ -171,6 +172,10 @@ relocatable_kernel:.byte 0
 pad2:  .byte 0
 pad3:  .word 0
 
+cmdline_size:   .long   COMMAND_L

[PATCH] x86_64, i386: Add command line length to boot protocol

2007-02-04 Thread Bernhard Walle
Because the command line is increased to 2048 characters after 2.6.20-rc6-mm1,
it's not possible for boot loaders and userspace tools to determine the length
of the command line the kernel can understand. The benefit of knowing that
length is that users can be warned if the command line size is too long which
prevents surprise if things don't work after bootup.

This patch updates the boot protocol to contain a field called "cmdline_size"
that contain the length of the command line. It also updates documentation to
set the length to 256 characters before boot protocol 2.06, simply because
there was no kernel before that has another limit than 256 characters.

The patch also adds missing fields (of protocol version 2.05) to the x86_64
setup code.


Signed-off-by: Bernhard Walle <[EMAIL PROTECTED]>

---
 Documentation/i386/boot.txt |   23 +--
 arch/i386/boot/setup.S  |7 ++-
 arch/x86_64/boot/setup.S|   15 ++-
 3 files changed, 37 insertions(+), 8 deletions(-)

Index: linux-2.6.20-rc6-mm3/Documentation/i386/boot.txt
===
--- linux-2.6.20-rc6-mm3.orig/Documentation/i386/boot.txt
+++ linux-2.6.20-rc6-mm3/Documentation/i386/boot.txt
@@ -2,7 +2,7 @@
 
 
H. Peter Anvin <[EMAIL PROTECTED]>
-   Last update 2007-01-26
+   Last update 2007-02-03
 
 On the i386 platform, the Linux kernel uses a rather complicated boot
 convention.  This has evolved partially due to historical aspects, as
@@ -35,9 +35,13 @@ Protocol 2.03:   (Kernel 2.4.18-pre1) Expl
initrd address available to the bootloader.
 
 Protocol 2.04: (Kernel 2.6.14) Extend the syssize field to four bytes.
+
 Protocol 2.05: (Kernel 2.6.20) Make protected mode kernel relocatable.
Introduce relocatable_kernel and kernel_alignment fields.
 
+Protocol 2.06: (Kernel 2.6.21) Added a field that contains the size of
+   the boot command line
+
 
  MEMORY LAYOUT
 
@@ -133,6 +137,8 @@ Offset  Proto   NameMeaning
 022C/4 2.03+   initrd_addr_max Highest legal initrd address
 0230/4 2.05+   kernel_alignment Physical addr alignment required for kernel
 0234/1 2.05+   relocatable_kernel Whether kernel is relocatable or not
+0235/3 N/A pad2Unused
+0238/4 2.06+   cmdline_sizeMaximum size of the kernel command line
 
 (1) For backwards compatibility, if the setup_sects field contains 0, the
 real value is 4.
@@ -233,6 +239,12 @@ filled out, however:
if your ramdisk is exactly 131072 bytes long and this field is
0x37FF, you can start your ramdisk at 0x37FE.)
 
+  cmdline_size:
+   The maximum size of the command line including the terminating
+   zero. This means that the command line can contain at most
+   (cmdline_size - 1) characters.  With protocol version 2.05 and
+   earlier, the maximum size was 256.
+
 
  THE KERNEL COMMAND LINE
 
@@ -241,11 +253,10 @@ loader to communicate with the kernel.  
 relevant to the boot loader itself, see "special command line options"
 below.
 
-The kernel command line is a null-terminated string currently up to
-255 characters long, plus the final null.  A string that is too long
-will be automatically truncated by the kernel, a boot loader may allow
-a longer command line to be passed to permit future kernels to extend
-this limit.
+The kernel command line is a null-terminated string. The maximum
+length can be retrieved from the field cmdline_size.  Before protocol
+version 2.06, the maximum was 255 characters.  A string that is too
+long will be automatically truncated by the kernel.
 
 If the boot protocol version is 2.02 or later, the address of the
 kernel command line is given by the header field cmd_line_ptr (see
Index: linux-2.6.20-rc6-mm3/arch/i386/boot/setup.S
===
--- linux-2.6.20-rc6-mm3.orig/arch/i386/boot/setup.S
+++ linux-2.6.20-rc6-mm3/arch/i386/boot/setup.S
@@ -52,6 +52,7 @@
 #include 
 #include 
 #include 
+#include 

 /* Signature words to ensure LILO loaded us right */
 #define SIG1   0xAA55
@@ -81,7 +82,7 @@ start:
 # This is the setup header, and it must start at %cs:2 (old 0x9020:2)
 
.ascii  "HdrS"  # header signature
-   .word   0x0205  # header version number (>= 0x0105)
+   .word   0x0206  # header version number (>= 0x0105)
# or else old loadlin-1.5 will fail)
 realmode_swtch:.word   0, 0# default_switch, SETUPSEG
 start_sys_seg: .word   SYSSEG
@@ -171,6 +172,10 @@ relocatable_kernel:.byte 0
 pad2:  .byte 0
 pad3:  .word 0
 
+cmdline_size:   .long   COMMAND_LINE_SIZE   #length of the command line,
+