From: Thiago Farina on 2 Aug 2010 14:10 On Mon, Aug 2, 2010 at 2:56 PM, Thiago Farina <tfransosi(a)gmail.com> wrote: > On Mon, Aug 2, 2010 at 4:13 AM, Yinghai Lu <yinghai(a)kernel.org> wrote: >> Index: linux-2.6/arch/x86/boot/string.c >> =================================================================== >> --- linux-2.6.orig/arch/x86/boot/string.c >> +++ linux-2.6/arch/x86/boot/string.c >> @@ -12,7 +12,21 @@ >> * Very basic string functions >> */ >> >> -#include "boot.h" >> +static inline int isdigit(int ch) >> +{ >> + return (ch >= '0') && (ch <= '9'); >> +} >> + >> +static inline int isxdigit(int ch) >> +{ >> + if (isdigit(ch)) >> + return true; >> + >> + if ((ch >= 'a') && (ch <= 'f')) >> + return true; >> + >> + return (ch >= 'A') && (ch <= 'F'); >> +} >> > > These to functions above can be fairly simplified by writting as: > > static bool inline is_hex_digit(int c) { > return (c >= '0' && c <= '9') || > (c >= 'A' && c <= 'F') || > (c >= 'a' && c <= 'f'); > } > Wow, sorry, this should be: static inline bool is_hex_digit(int c) { ... } -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo(a)vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
From: H. Peter Anvin on 2 Aug 2010 14:30 On 08/02/2010 10:56 AM, Thiago Farina wrote: > > These to functions above can be fairly simplified by writting as: > > static bool inline is_hex_digit(int c) { > return (c >= '0' && c <= '9') || > (c >= 'A' && c <= 'F') || > (c >= 'a' && c <= 'f'); > } > a) You lose the isdigit() functionality, which is useful on its own. b) Does this enahance readability in any way? c) Your proposed renaming is nonstandard. As such, I don't think this is a good idea. -hpa -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo(a)vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
From: Thiago Farina on 2 Aug 2010 15:10 On Mon, Aug 2, 2010 at 3:27 PM, H. Peter Anvin <hpa(a)zytor.com> wrote: > On 08/02/2010 10:56 AM, Thiago Farina wrote: >> >> These to functions above can be fairly simplified by writting as: >> >> static bool inline is_hex_digit(int c) { >> return (c >= '0' && c <= '9') || >> (c >= 'A' && c <= 'F') || >> (c >= 'a' && c <= 'f'); >> } >> > > a) You lose the isdigit() functionality, which is useful on its own. > b) Does this enahance readability in any way? > c) Your proposed renaming is nonstandard. > What about this instead? static inline bool isxdigit(int ch) { return (isdigit(ch) || (ch >= 'A' && ch <= 'F') || (ch >= 'a' && ch <= 'f'); } > As such, I don't think this is a good idea. > > -hpa > -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo(a)vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
From: Yinghai Lu on 2 Aug 2010 15:20 On 08/02/2010 10:43 AM, Cyrill Gorcunov wrote: > On Mon, Aug 02, 2010 at 02:17:31AM -0700, Yinghai Lu wrote: > ... >> Index: linux-2.6/arch/x86/boot/printf.c >> =================================================================== >> --- linux-2.6.orig/arch/x86/boot/printf.c >> +++ linux-2.6/arch/x86/boot/printf.c >> @@ -34,7 +34,7 @@ static int skip_atoi(const char **s) >> #define SMALL 32 /* Must be 32 == 0x20 */ >> #define SPECIAL 64 /* 0x */ >> >> -#define do_div(n,base) ({ \ >> +#define __do_div(n, base) ({ \ >> int __res; \ >> __res = ((unsigned long) n) % (unsigned) base; \ >> n = ((unsigned long) n) / (unsigned) base; \ >> @@ -83,7 +83,7 @@ static char *number(char *str, long num, >> tmp[i++] = '0'; >> else >> while (num != 0) >> - tmp[i++] = (digits[do_div(num, base)] | locase); >> + tmp[i++] = (digits[__do_div(num, base)] | locase); > > Yinghai, what was wrong with the origin do_div? After inclusion it as "printf.c" > in another *.c do_div gets clashed? yes. get clashed if include that printf.c in arch/x86/boot/compressed/misc.c Yinghai -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo(a)vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
From: Yinghai Lu on 2 Aug 2010 15:30 On 08/02/2010 08:09 AM, Cyrill Gorcunov wrote: > On Mon, Aug 02, 2010 at 12:13:31AM -0700, Yinghai Lu wrote: >> >> Seperate early_console_setup from tty.c >> also make main.c to include printf.c/string.c/cmdline.c >> >> will reuse early_serial_console.c/string.c/printf.c/cmdline.c in compressed/misc.c >> >> Signed-off-by: Yinghai Lu <yinghai(a)kernel.org> >> >> --- > > Hi Yinghai, I'll try to find some time for review though it looks somehow > too 'big' for me :) > > Actually by reading your initial approach (which was much smaller in size) I > thought we end up in something like the patch below, though I'll review this > seris. So just to share (I've tested it under qemu). The idea is the same as > your was, so I pushed all constant parts into header and use it when needed > passing serial line base port via boot_params. Eric doesn't like early_serial_console_base in zero page. and said that is fragile. So try to include string.c/printf.c/cmdline.c/early_serial_console.c in arch/x86/boot/compressed/misc.c and analyze that command line again. then kexec path will get support too. that is from arch/x86/boot/compressed/head_32.S or head_64.S, startup_32. and skip arch/x86/boot/main.c later with following patch for 3, we get all covered in c code. 1. arch/x86/boot/main.c: setup code. 2. arch/x86/boot/compressed/misc.c: decompress_kernel code : the 2 -v3 patches that i sent last night. 3. arch/x86/kernel/head64.c: real kernel. maybe we can make early_serial_console.c and early_printk.c to share some .h etc later. Thanks Yinghai [PATCH -v2] x86: Setup early console as early as possible Analyze "console=uart8250,io,0x3f8,115200n8" in i386_start_kernel/x86_64_start_kernel, and call setup_early_serial8250_console() to init early serial console. only can handle io port kind of 8250. because mmio need ioremap. -v2: use boot_params.hdr.version instead of adding another variable, Suggested by hpa update after using x86 memblock patchset Signed-off-by: Yinghai Lu <yinghai(a)kernel.org> --- arch/x86/include/asm/setup.h | 2 ++ arch/x86/kernel/head.c | 27 +++++++++++++++++++++++++++ arch/x86/kernel/head32.c | 2 ++ arch/x86/kernel/head64.c | 13 +++++++++++-- kernel/printk.c | 4 ++++ 5 files changed, 46 insertions(+), 2 deletions(-) Index: linux-2.6/arch/x86/include/asm/setup.h =================================================================== --- linux-2.6.orig/arch/x86/include/asm/setup.h +++ linux-2.6/arch/x86/include/asm/setup.h @@ -42,6 +42,8 @@ static inline void visws_early_detect(vo #endif extern unsigned long saved_video_mode; +int setup_early_serial8250_console(char *cmdline); +void setup_early_console(void); extern void reserve_standard_io_resources(void); extern void i386_reserve_resources(void); Index: linux-2.6/arch/x86/kernel/head.c =================================================================== --- linux-2.6.orig/arch/x86/kernel/head.c +++ linux-2.6/arch/x86/kernel/head.c @@ -54,3 +54,30 @@ void __init reserve_ebda_region(void) /* reserve all memory between lowmem and the 1MB mark */ memblock_x86_reserve_range(lowmem, 0x100000, "* BIOS reserved"); } + + +void __init setup_early_console(void) +{ +#ifdef CONFIG_SERIAL_8250_CONSOLE + char constr[64], *p, *q; + + /* Can not handle mmio type 8250 uart yet, too early */ + p = strstr(boot_command_line, "console=uart8250,io,"); + if (!p) + p = strstr(boot_command_line, "console=uart,io,"); + if (!p) + return; + + p += 8; /* sizeof "console=" */ + q = strchr(p, ' '); + if ((q - p) >= sizeof(constr)) + return; + + memset(constr, 0, sizeof(constr)); + memcpy(constr, p, q - p); + + lockdep_init(); + + setup_early_serial8250_console(constr); +#endif +} Index: linux-2.6/arch/x86/kernel/head32.c =================================================================== --- linux-2.6.orig/arch/x86/kernel/head32.c +++ linux-2.6/arch/x86/kernel/head32.c @@ -31,6 +31,8 @@ static void __init i386_default_early_se void __init i386_start_kernel(void) { + setup_early_console(); + memblock_init(); #ifdef CONFIG_X86_TRAMPOLINE Index: linux-2.6/arch/x86/kernel/head64.c =================================================================== --- linux-2.6.orig/arch/x86/kernel/head64.c +++ linux-2.6/arch/x86/kernel/head64.c @@ -46,6 +46,10 @@ static void __init copy_bootdata(char *r { char * command_line; + /* make sure if it is copied already */ + if (boot_params.hdr.version) + return; + memcpy(&boot_params, real_mode_data, sizeof boot_params); if (boot_params.hdr.cmd_line_ptr) { command_line = __va(boot_params.hdr.cmd_line_ptr); @@ -74,6 +78,10 @@ void __init x86_64_start_kernel(char * r /* clear bss before set_intr_gate with early_idt_handler */ clear_bss(); + /* boot_params is in bss */ + copy_bootdata(__va(real_mode_data)); + setup_early_console(); + /* Make NULL pointers segfault */ zap_identity_mappings(); @@ -97,9 +105,10 @@ void __init x86_64_start_kernel(char * r void __init x86_64_start_reservations(char *real_mode_data) { - memblock_init(); - copy_bootdata(__va(real_mode_data)); + setup_early_console(); + + memblock_init(); memblock_x86_reserve_range(__pa_symbol(&_text), __pa_symbol(&__bss_stop), "TEXT DATA BSS"); Index: linux-2.6/kernel/printk.c =================================================================== --- linux-2.6.orig/kernel/printk.c +++ linux-2.6/kernel/printk.c @@ -1204,6 +1204,10 @@ void register_console(struct console *ne if (console_drivers && newcon->flags & CON_BOOT) { /* find the last or real console */ for_each_console(bcon) { + /* not again */ + if (bcon == newcon) + return; + if (!(bcon->flags & CON_BOOT)) { printk(KERN_INFO "Too late to register bootconsole %s%d\n", newcon->name, newcon->index); -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo(a)vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
First
|
Prev
|
Next
|
Last
Pages: 1 2 3 Prev: kjournald and flush being blocked for 120 sec Next: [PATCH v2 0/3] MAX8998 changes for RTC |