* Re: [PATCH] x86,setup: add serial_console_port_base in boot_params [not found] ` <4C548F7D.6000509@zytor.com> @ 2010-08-01 1:53 ` Yinghai Lu 2010-08-01 2:42 ` Eric W. Biederman 0 siblings, 1 reply; 4+ messages in thread From: Yinghai Lu @ 2010-08-01 1:53 UTC (permalink / raw) To: H. Peter Anvin, Eric W. Biederman Cc: kexec, linux-kernel@vger.kernel.org, Cyrill Gorcunov, Pekka Enberg, Ingo Molnar, Thomas Gleixner On 07/31/2010 02:02 PM, H. Peter Anvin wrote: > On 07/31/2010 11:32 AM, Cyrill Gorcunov wrote: >>> >>> No, this is the internal part of the boot protocol, so it's not an issue. >>> >> >> Peter, I didn't mean any issue here, I meant that bootloaders don't know about >> this field yet and they will have to update own sources to pass port value >> at proper place of boot params. Or I miss something? >> > > Boot loaders that use the 16-bit entry point are unaffected. > > Boot loaders which use the 32-bit entry point but properly clears the > zero page simply will not have the feature. > > Boot loaders which use the 32-bit entry point but doesn't clear the zero > page are broken. > can you if this one is right for kexec path? Thanks Yinghai [PATCH] kexec-tools: pass serial console base for early console in kernel when kexec is used with "console_serial", set serial_console_port_base in boot_params. Signed-off-by: Yinghai Lu <yinghai@kernel.org> --- doc/linux-i386-zero-page.txt | 1 + include/x86/x86-linux.h | 3 ++- kexec/arch/i386/kexec-x86.h | 1 + kexec/arch/i386/x86-linux-setup.c | 4 ++++ kexec/arch/x86_64/kexec-x86_64.c | 9 +-------- 5 files changed, 9 insertions(+), 9 deletions(-) Index: kexec-tools/doc/linux-i386-zero-page.txt =================================================================== --- kexec-tools.orig/doc/linux-i386-zero-page.txt +++ kexec-tools/doc/linux-i386-zero-page.txt @@ -22,6 +22,7 @@ Offset Type Description 0x90000 + contents of CL_OFFSET (only taken, when CL_MAGIC = 0xA33F) 0x40 20 bytes struct apm_bios_info, APM_BIOS_INFO + 0x54 2 bytes serial console base 0x60 16 bytes Intel SpeedStep (IST) BIOS support information 0x80 16 bytes hd0-disk-parameter from intvector 0x41 0x90 16 bytes hd1-disk-parameter from intvector 0x46 Index: kexec-tools/include/x86/x86-linux.h =================================================================== --- kexec-tools.orig/include/x86/x86-linux.h +++ kexec-tools/include/x86/x86-linux.h @@ -40,7 +40,6 @@ struct apm_bios_info { uint16_t cseg_len; /* 0x4e */ uint16_t cseg_16_len; /* 0x50 */ uint16_t dseg_len; /* 0x52 */ - uint8_t reserved[44]; /* 0x54 */ }; /* @@ -105,6 +104,8 @@ struct x86_linux_param_header { uint8_t reserved4[12]; /* 0x34 -- 0x3f reserved for future expansion */ struct apm_bios_info apm_bios_info; /* 0x40 */ + uint16_t serial_console_port_base; /* 0x54 */ + uint8_t reserved41[42]; /* 0x56 */ struct drive_info_struct drive_info; /* 0x80 */ struct sys_desc_table sys_desc_table; /* 0xa0 */ uint32_t alt_mem_k; /* 0x1e0 */ Index: kexec-tools/kexec/arch/i386/x86-linux-setup.c =================================================================== --- kexec-tools.orig/kexec/arch/i386/x86-linux-setup.c +++ kexec-tools/kexec/arch/i386/x86-linux-setup.c @@ -100,6 +100,9 @@ void setup_linux_bootloader_parameters( cmdline_ptr = ((char *)real_mode) + cmdline_offset; memcpy(cmdline_ptr, cmdline, cmdline_len); cmdline_ptr[cmdline_len - 1] = '\0'; + + if (arch_options.console_serial) + real_mode->serial_console_port_base = arch_options.serial_base; } int setup_linux_vesafb(struct x86_linux_param_header *real_mode) @@ -422,6 +425,7 @@ void setup_linux_system_parameters(struc /* Default APM info */ memset(&real_mode->apm_bios_info, 0, sizeof(real_mode->apm_bios_info)); + /* Default drive info */ memset(&real_mode->drive_info, 0, sizeof(real_mode->drive_info)); /* Default sysdesc table */ Index: kexec-tools/kexec/arch/i386/kexec-x86.h =================================================================== --- kexec-tools.orig/kexec/arch/i386/kexec-x86.h +++ kexec-tools/kexec/arch/i386/kexec-x86.h @@ -51,6 +51,7 @@ struct arch_options_t { uint8_t console_serial; enum coretype core_header_type; }; +extern struct arch_options_t arch_options; int multiboot_x86_probe(const char *buf, off_t len); int multiboot_x86_load(int argc, char **argv, const char *buf, off_t len, Index: kexec-tools/kexec/arch/x86_64/kexec-x86_64.c =================================================================== --- kexec-tools.orig/kexec/arch/x86_64/kexec-x86_64.c +++ kexec-tools/kexec/arch/x86_64/kexec-x86_64.c @@ -55,14 +55,7 @@ void arch_usage(void) ); } -static struct { - uint8_t reset_vga; - uint16_t serial_base; - uint32_t serial_baud; - uint8_t console_vga; - uint8_t console_serial; - int core_header_type; -} arch_options = { +struct arch_options_t arch_options = { .reset_vga = 0, .serial_base = 0x3f8, .serial_baud = 0, _______________________________________________ kexec mailing list kexec@lists.infradead.org http://lists.infradead.org/mailman/listinfo/kexec ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH] x86,setup: add serial_console_port_base in boot_params 2010-08-01 1:53 ` [PATCH] x86,setup: add serial_console_port_base in boot_params Yinghai Lu @ 2010-08-01 2:42 ` Eric W. Biederman 2010-08-01 5:20 ` Yinghai Lu 0 siblings, 1 reply; 4+ messages in thread From: Eric W. Biederman @ 2010-08-01 2:42 UTC (permalink / raw) To: Yinghai Lu Cc: kexec, linux-kernel@vger.kernel.org, Cyrill Gorcunov, Pekka Enberg, H. Peter Anvin, Ingo Molnar, Thomas Gleixner Yinghai Lu <yinghai@kernel.org> writes: > On 07/31/2010 02:02 PM, H. Peter Anvin wrote: >> On 07/31/2010 11:32 AM, Cyrill Gorcunov wrote: >>>> >>>> No, this is the internal part of the boot protocol, so it's not an issue. >>>> >>> >>> Peter, I didn't mean any issue here, I meant that bootloaders don't know about >>> this field yet and they will have to update own sources to pass port value >>> at proper place of boot params. Or I miss something? >>> >> >> Boot loaders that use the 16-bit entry point are unaffected. >> >> Boot loaders which use the 32-bit entry point but properly clears the >> zero page simply will not have the feature. >> >> Boot loaders which use the 32-bit entry point but doesn't clear the zero >> page are broken. >> > can you if this one is right for kexec path? I am walking out the door, but this seems like nonsense to me. The kexec console_serial option today is a debugging feature for when you to debug the purgatory code. Only once in a bluemoon should it be useful, so I don't see why we would add it here. The kexec purgatory is silent by default. Further I don't see why we would add something to the zero page when we have a perfectly good way to pass this information via the kernel command line. strstr and strtoul are trivial little functions so I don't see why anything would need to parse anything other than console= or early_printk=. The difference in code size is negligible. This option in the zero page appears very fragile. There are a lot of dimensions that we are skipping. I admit we can detect most of them by reading the serial port. But we still have the assumption that the serial port is an 8259 serial port in i/o space and not mmio space. *runs out the door before another silly email comes* Eric > > [PATCH] kexec-tools: pass serial console base for early console in kernel > > when kexec is used with "console_serial", set serial_console_port_base in boot_params. > > Signed-off-by: Yinghai Lu <yinghai@kernel.org> > > --- > doc/linux-i386-zero-page.txt | 1 + > include/x86/x86-linux.h | 3 ++- > kexec/arch/i386/kexec-x86.h | 1 + > kexec/arch/i386/x86-linux-setup.c | 4 ++++ > kexec/arch/x86_64/kexec-x86_64.c | 9 +-------- > 5 files changed, 9 insertions(+), 9 deletions(-) > > Index: kexec-tools/doc/linux-i386-zero-page.txt > =================================================================== > --- kexec-tools.orig/doc/linux-i386-zero-page.txt > +++ kexec-tools/doc/linux-i386-zero-page.txt > @@ -22,6 +22,7 @@ Offset Type Description > 0x90000 + contents of CL_OFFSET > (only taken, when CL_MAGIC = 0xA33F) > 0x40 20 bytes struct apm_bios_info, APM_BIOS_INFO > + 0x54 2 bytes serial console base > 0x60 16 bytes Intel SpeedStep (IST) BIOS support information > 0x80 16 bytes hd0-disk-parameter from intvector 0x41 > 0x90 16 bytes hd1-disk-parameter from intvector 0x46 > Index: kexec-tools/include/x86/x86-linux.h > =================================================================== > --- kexec-tools.orig/include/x86/x86-linux.h > +++ kexec-tools/include/x86/x86-linux.h > @@ -40,7 +40,6 @@ struct apm_bios_info { > uint16_t cseg_len; /* 0x4e */ > uint16_t cseg_16_len; /* 0x50 */ > uint16_t dseg_len; /* 0x52 */ > - uint8_t reserved[44]; /* 0x54 */ > }; > > /* > @@ -105,6 +104,8 @@ struct x86_linux_param_header { > uint8_t reserved4[12]; /* 0x34 -- 0x3f reserved for future expansion */ > > struct apm_bios_info apm_bios_info; /* 0x40 */ > + uint16_t serial_console_port_base; /* 0x54 */ > + uint8_t reserved41[42]; /* 0x56 */ > struct drive_info_struct drive_info; /* 0x80 */ > struct sys_desc_table sys_desc_table; /* 0xa0 */ > uint32_t alt_mem_k; /* 0x1e0 */ > Index: kexec-tools/kexec/arch/i386/x86-linux-setup.c > =================================================================== > --- kexec-tools.orig/kexec/arch/i386/x86-linux-setup.c > +++ kexec-tools/kexec/arch/i386/x86-linux-setup.c > @@ -100,6 +100,9 @@ void setup_linux_bootloader_parameters( > cmdline_ptr = ((char *)real_mode) + cmdline_offset; > memcpy(cmdline_ptr, cmdline, cmdline_len); > cmdline_ptr[cmdline_len - 1] = '\0'; > + > + if (arch_options.console_serial) > + real_mode->serial_console_port_base = arch_options.serial_base; > } > > int setup_linux_vesafb(struct x86_linux_param_header *real_mode) > @@ -422,6 +425,7 @@ void setup_linux_system_parameters(struc > > /* Default APM info */ > memset(&real_mode->apm_bios_info, 0, sizeof(real_mode->apm_bios_info)); > + > /* Default drive info */ > memset(&real_mode->drive_info, 0, sizeof(real_mode->drive_info)); > /* Default sysdesc table */ > Index: kexec-tools/kexec/arch/i386/kexec-x86.h > =================================================================== > --- kexec-tools.orig/kexec/arch/i386/kexec-x86.h > +++ kexec-tools/kexec/arch/i386/kexec-x86.h > @@ -51,6 +51,7 @@ struct arch_options_t { > uint8_t console_serial; > enum coretype core_header_type; > }; > +extern struct arch_options_t arch_options; > > int multiboot_x86_probe(const char *buf, off_t len); > int multiboot_x86_load(int argc, char **argv, const char *buf, off_t len, > Index: kexec-tools/kexec/arch/x86_64/kexec-x86_64.c > =================================================================== > --- kexec-tools.orig/kexec/arch/x86_64/kexec-x86_64.c > +++ kexec-tools/kexec/arch/x86_64/kexec-x86_64.c > @@ -55,14 +55,7 @@ void arch_usage(void) > ); > } > > -static struct { > - uint8_t reset_vga; > - uint16_t serial_base; > - uint32_t serial_baud; > - uint8_t console_vga; > - uint8_t console_serial; > - int core_header_type; > -} arch_options = { > +struct arch_options_t arch_options = { > .reset_vga = 0, > .serial_base = 0x3f8, > .serial_baud = 0, _______________________________________________ kexec mailing list kexec@lists.infradead.org http://lists.infradead.org/mailman/listinfo/kexec ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH] x86,setup: add serial_console_port_base in boot_params 2010-08-01 2:42 ` Eric W. Biederman @ 2010-08-01 5:20 ` Yinghai Lu 2010-08-03 2:03 ` Eric W. Biederman 0 siblings, 1 reply; 4+ messages in thread From: Yinghai Lu @ 2010-08-01 5:20 UTC (permalink / raw) To: Eric W. Biederman Cc: kexec, linux-kernel@vger.kernel.org, Cyrill Gorcunov, Pekka Enberg, H. Peter Anvin, Ingo Molnar, Thomas Gleixner On 07/31/2010 07:42 PM, Eric W. Biederman wrote: > Yinghai Lu <yinghai@kernel.org> writes: > >> On 07/31/2010 02:02 PM, H. Peter Anvin wrote: >>> On 07/31/2010 11:32 AM, Cyrill Gorcunov wrote: >>>>> >>>>> No, this is the internal part of the boot protocol, so it's not an issue. >>>>> >>>> >>>> Peter, I didn't mean any issue here, I meant that bootloaders don't know about >>>> this field yet and they will have to update own sources to pass port value >>>> at proper place of boot params. Or I miss something? >>>> >>> >>> Boot loaders that use the 16-bit entry point are unaffected. >>> >>> Boot loaders which use the 32-bit entry point but properly clears the >>> zero page simply will not have the feature. >>> >>> Boot loaders which use the 32-bit entry point but doesn't clear the zero >>> page are broken. >>> >> can you if this one is right for kexec path? > > I am walking out the door, but this seems like nonsense to me. > > Further I don't see why we would add something to the zero page > when we have a perfectly good way to pass this information via > the kernel command line. strstr and strtoul are trivial little > functions so I don't see why anything would need to parse anything > other than console= or early_printk=. The difference in code size > is negligible. > so you prefer to check command line for console info in arch/x86/boot/compressed/misc.c again? that commandline is analyzed in arch/x86/boot/tty.c already. Yinghai _______________________________________________ kexec mailing list kexec@lists.infradead.org http://lists.infradead.org/mailman/listinfo/kexec ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH] x86,setup: add serial_console_port_base in boot_params 2010-08-01 5:20 ` Yinghai Lu @ 2010-08-03 2:03 ` Eric W. Biederman 0 siblings, 0 replies; 4+ messages in thread From: Eric W. Biederman @ 2010-08-03 2:03 UTC (permalink / raw) To: Yinghai Lu Cc: kexec, linux-kernel@vger.kernel.org, Cyrill Gorcunov, Pekka Enberg, H. Peter Anvin, Ingo Molnar, Thomas Gleixner Yinghai Lu <yinghai@kernel.org> writes: > On 07/31/2010 07:42 PM, Eric W. Biederman wrote: >> Yinghai Lu <yinghai@kernel.org> writes: >> >>> On 07/31/2010 02:02 PM, H. Peter Anvin wrote: >>>> On 07/31/2010 11:32 AM, Cyrill Gorcunov wrote: >>>>>> >>>>>> No, this is the internal part of the boot protocol, so it's not an issue. >>>>>> >>>>> >>>>> Peter, I didn't mean any issue here, I meant that bootloaders don't know about >>>>> this field yet and they will have to update own sources to pass port value >>>>> at proper place of boot params. Or I miss something? >>>>> >>>> >>>> Boot loaders that use the 16-bit entry point are unaffected. >>>> >>>> Boot loaders which use the 32-bit entry point but properly clears the >>>> zero page simply will not have the feature. >>>> >>>> Boot loaders which use the 32-bit entry point but doesn't clear the zero >>>> page are broken. >>>> >>> can you if this one is right for kexec path? >> >> I am walking out the door, but this seems like nonsense to me. >> >> Further I don't see why we would add something to the zero page >> when we have a perfectly good way to pass this information via >> the kernel command line. strstr and strtoul are trivial little >> functions so I don't see why anything would need to parse anything >> other than console= or early_printk=. The difference in code size >> is negligible. >> > so you prefer to check command line for console info in arch/x86/boot/compressed/misc.c again? > > that commandline is analyzed in arch/x86/boot/tty.c already. Instead of changing 2 or 3 bootloaders, waiting years for the change to propagate, and then trying to change users habits. I definitely do. Eric _______________________________________________ kexec mailing list kexec@lists.infradead.org http://lists.infradead.org/mailman/listinfo/kexec ^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2010-08-03 2:03 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <4C3F8B46.7080809@kernel.org>
[not found] ` <20100731083409.GC5859@lenovo>
[not found] ` <4C5469AF.2010608@zytor.com>
[not found] ` <20100731183211.GB29357@lenovo>
[not found] ` <4C548F7D.6000509@zytor.com>
2010-08-01 1:53 ` [PATCH] x86,setup: add serial_console_port_base in boot_params Yinghai Lu
2010-08-01 2:42 ` Eric W. Biederman
2010-08-01 5:20 ` Yinghai Lu
2010-08-03 2:03 ` Eric W. Biederman
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox