void __init x86_64_start_kernel(char * real_mode_data) { char *s; clear_bss(); pda_init(0); copy_bootdata(real_mode_data); #ifdef CONFIG_SMP cpu_set(0, cpu_online_map); #endif /* default console: */ if (!strstr(saved_command_line, "console=")) strcat(saved_command_line, " console=tty0"); s = strstr(saved_command_line, "earlyprintk="); if (s != NULL) setup_early_printk(s); #ifdef CONFIG_DISCONTIGMEM s = strstr(saved_command_line, "numa="); if (s != NULL) numa_setup(s+5); #endif #ifdef CONFIG_X86_IO_APIC if (strstr(saved_command_line, "disableapic")) disable_apic = 1; #endif /* You need early console to see that */ if (__pa_symbol(&_end) >= KERNEL_TEXT_SIZE) panic("Kernel too big for kernel mapping\n"); setup_boot_cpu_data(); start_kernel(); }
void __init x86_64_start_kernel(char * real_mode_data) { char *s; clear_bss(); pda_init(0); copy_bootdata(real_mode_data); /* default console: */ if (!strstr(saved_command_line, "console=")) strcat(saved_command_line, " console=tty0"); s = strstr(saved_command_line, "earlyprintk="); if (s != NULL) setup_early_printk(s+12); #ifdef CONFIG_DISCONTIGMEM s = strstr(saved_command_line, "numa="); if (s != NULL) numa_setup(s+5); #endif #ifdef CONFIG_X86_IO_APIC if (strstr(saved_command_line, "disableapic")) disable_apic = 1; #endif setup_boot_cpu_data(); start_kernel(); }
void __init x86_64_start_kernel(char * real_mode_data) { char *s; clear_bss(); /* must be the first thing in C and must not depend on .bss to be zero */ pda_init(0); copy_bootdata(real_mode_data); s = strstr(saved_command_line, "earlyprintk="); if (s != NULL) setup_early_printk(s+12); #ifdef CONFIG_DISCONTIGMEM extern int numa_setup(char *); s = strstr(saved_command_line, "numa="); if (s != NULL) numa_setup(s+5); #endif early_printk("booting x86_64 kernel... "); setup_boot_cpu_data(); start_kernel(); }
static __init void parse_cmdline_early (char ** cmdline_p) { char c = ' ', *to = command_line, *from = COMMAND_LINE; int len = 0; for (;;) { if (c != ' ') goto next_char; else if (!memcmp(from, "avoid_smi", 9)) avoid_smi = 1; #ifdef CONFIG_SMP /* * If the BIOS enumerates physical processors before logical, * maxcpus=N at enumeration-time can be used to disable HT. */ else if (!memcmp(from, "maxcpus=", 8)) { extern unsigned int maxcpus; maxcpus = simple_strtoul(from + 8, NULL, 0); } #endif #ifdef CONFIG_ACPI /* "acpi=off" disables both ACPI table parsing and interpreter init */ if (fullarg(from,"acpi=off")) disable_acpi(); if (fullarg(from, "acpi=force")) { /* add later when we do DMI horrors: */ acpi_force = 1; acpi_disabled = 0; } /* acpi=ht just means: do ACPI MADT parsing at bootup, but don't enable the full ACPI interpreter */ if (fullarg(from, "acpi=ht")) { if (!acpi_force) disable_acpi(); acpi_ht = 1; } else if (fullarg(from, "pci=noacpi")) acpi_disable_pci(); else if (fullarg(from, "acpi=noirq")) acpi_noirq_set(); else if (fullarg(from, "acpi_sci=edge")) acpi_sci_flags.trigger = 1; else if (fullarg(from, "acpi_sci=level")) acpi_sci_flags.trigger = 3; else if (fullarg(from, "acpi_sci=high")) acpi_sci_flags.polarity = 1; else if (fullarg(from, "acpi_sci=low")) acpi_sci_flags.polarity = 3; /* acpi=strict disables out-of-spec workarounds */ else if (fullarg(from, "acpi=strict")) { acpi_strict = 1; } #ifdef CONFIG_X86_IO_APIC else if (fullarg(from, "acpi_skip_timer_override")) acpi_skip_timer_override = 1; #endif #endif if (fullarg(from, "disable_timer_pin_1")) disable_timer_pin_1 = 1; if (fullarg(from, "enable_timer_pin_1")) disable_timer_pin_1 = -1; if (fullarg(from, "nolapic") || fullarg(from, "disableapic")) { clear_bit(X86_FEATURE_APIC, boot_cpu_data.x86_capability); disable_apic = 1; } if (fullarg(from, "noapic")) skip_ioapic_setup = 1; if (fullarg(from,"apic")) { skip_ioapic_setup = 0; ioapic_force = 1; } if (!memcmp(from, "mem=", 4)) parse_memopt(from+4, &from); if (!memcmp(from, "memmap=", 7)) { parse_memmapopt(from+7, &from); } if (!memcmp(from, "bootmem_debug", 13)) bootmem_debug = 1; #ifdef CONFIG_NUMA if (!memcmp(from, "numa=", 5)) numa_setup(from+5); #endif if (!memcmp(from,"iommu=",6)) { iommu_setup(from+6); } if (fullarg(from,"oops=panic")) panic_on_oops = 1; if (!memcmp(from, "noexec=", 7)) nonx_setup(from + 7); #ifdef CONFIG_KEXEC /* crashkernel=size@addr specifies the location to reserve for * a crash kernel. By reserving this memory we guarantee * that linux never set's it up as a DMA target. * Useful for holding code to do something appropriate * after a kernel panic. */ else if (!memcmp(from, "crashkernel=", 12)) { unsigned long size, base; size = memparse(from+12, &from); if (*from == '@') { base = memparse(from+1, &from); crashk_res.start = base; crashk_res.end = base + size - 1; } } #endif #ifdef CONFIG_PROC_VMCORE /* elfcorehdr= specifies the location of elf core header * stored by the crashed kernel. This option will be passed * by kexec loader to the capture kernel. */ else if(!memcmp(from, "elfcorehdr=", 11)) elfcorehdr_addr = memparse(from+11, &from); #endif #ifdef CONFIG_HOTPLUG_CPU else if (!memcmp(from, "additional_cpus=", 16)) setup_additional_cpus(from+16); #endif else if (!memcmp(from, "ipmi_dev_order=", 15)) ipmi_dev_order = simple_strtoul(from + 15, NULL, 0); else if (!memcmp(from, "nosmp", 5)) nosmp(NULL); next_char: c = *(from++); if (!c) break; if (COMMAND_LINE_SIZE <= ++len) break; *(to++) = c; } *to = '\0'; *cmdline_p = command_line; }
static __init void parse_cmdline_early (char ** cmdline_p) { char c = ' ', *to = command_line, *from = COMMAND_LINE; int len = 0; /* Save unparsed command line copy for /proc/cmdline */ memcpy(saved_command_line, COMMAND_LINE, COMMAND_LINE_SIZE); saved_command_line[COMMAND_LINE_SIZE-1] = '\0'; for (;;) { if (c != ' ') goto next_char; #ifdef CONFIG_SMP /* * If the BIOS enumerates physical processors before logical, * maxcpus=N at enumeration-time can be used to disable HT. */ else if (!memcmp(from, "maxcpus=", 8)) { extern unsigned int maxcpus; maxcpus = simple_strtoul(from + 8, NULL, 0); } #endif #ifdef CONFIG_ACPI_BOOT /* "acpi=off" disables both ACPI table parsing and interpreter init */ if (!memcmp(from, "acpi=off", 8)) disable_acpi(); if (!memcmp(from, "acpi=force", 10)) { /* add later when we do DMI horrors: */ /* acpi_force = 1; */ acpi_disabled = 0; } /* acpi=ht just means: do ACPI MADT parsing at bootup, but don't enable the full ACPI interpreter */ if (!memcmp(from, "acpi=ht", 7)) { /* if (!acpi_force) */ disable_acpi(); acpi_ht = 1; } else if (!memcmp(from, "pci=noacpi", 10)) acpi_disable_pci(); else if (!memcmp(from, "acpi=noirq", 10)) acpi_noirq_set(); else if (!memcmp(from, "acpi_sci=edge", 13)) acpi_sci_flags.trigger = 1; else if (!memcmp(from, "acpi_sci=level", 14)) acpi_sci_flags.trigger = 3; else if (!memcmp(from, "acpi_sci=high", 13)) acpi_sci_flags.polarity = 1; else if (!memcmp(from, "acpi_sci=low", 12)) acpi_sci_flags.polarity = 3; /* acpi=strict disables out-of-spec workarounds */ else if (!memcmp(from, "acpi=strict", 11)) { acpi_strict = 1; } #endif if (!memcmp(from, "nolapic", 7) || !memcmp(from, "disableapic", 11)) disable_apic = 1; if (!memcmp(from, "noapic", 6)) skip_ioapic_setup = 1; if (!memcmp(from, "apic", 4)) { skip_ioapic_setup = 0; ioapic_force = 1; } if (!memcmp(from, "mem=", 4)) parse_memopt(from+4, &from); #ifdef CONFIG_DISCONTIGMEM if (!memcmp(from, "numa=", 5)) numa_setup(from+5); #endif #ifdef CONFIG_GART_IOMMU if (!memcmp(from,"iommu=",6)) { iommu_setup(from+6); } #endif if (!memcmp(from,"oops=panic", 10)) panic_on_oops = 1; next_char: c = *(from++); if (!c) break; if (COMMAND_LINE_SIZE <= ++len) break; *(to++) = c; } *to = '\0'; *cmdline_p = command_line; }