Loading arch/x86/kernel/setup_32.c +91 −8 Original line number Diff line number Diff line Loading @@ -372,26 +372,38 @@ static void __init reserve_initrd(void) * global efi_enabled. This allows the same kernel image to be used on existing * systems (with a traditional BIOS) as well as on EFI systems. */ /* * setup_arch - architecture-specific boot-time initializations * * Note: On x86_64, fixmaps are ready for use even before this is called. */ void __init setup_arch(char **cmdline_p) { #ifdef CONFIG_X86_32 memcpy(&boot_cpu_data, &new_cpu_data, sizeof(new_cpu_data)); pre_setup_arch_hook(); early_cpu_init(); early_ioremap_init(); reserve_setup_data(); #else printk(KERN_INFO "Command line: %s\n", boot_command_line); #endif ROOT_DEV = old_decode_dev(boot_params.hdr.root_dev); screen_info = boot_params.screen_info; edid_info = boot_params.edid_info; #ifdef CONFIG_X86_32 apm_info.bios = boot_params.apm_bios_info; ist_info = boot_params.ist_info; saved_video_mode = boot_params.hdr.vid_mode; if (boot_params.sys_desc_table.length != 0) { set_mca_bus(boot_params.sys_desc_table.table[3] & 0x2); machine_id = boot_params.sys_desc_table.table[0]; machine_submodel_id = boot_params.sys_desc_table.table[1]; BIOS_revision = boot_params.sys_desc_table.table[2]; } #endif saved_video_mode = boot_params.hdr.vid_mode; bootloader_type = boot_params.hdr.type_of_loader; #ifdef CONFIG_BLK_DEV_RAM Loading @@ -401,7 +413,12 @@ void __init setup_arch(char **cmdline_p) #endif #ifdef CONFIG_EFI if (!strncmp((char *)&boot_params.efi_info.efi_loader_signature, "EL32", 4)) { #ifdef CONFIG_X86_32 "EL32", #else "EL64", #endif 4)) { efi_enabled = 1; efi_reserve_early(); } Loading @@ -417,7 +434,11 @@ void __init setup_arch(char **cmdline_p) init_mm.start_code = (unsigned long) _text; init_mm.end_code = (unsigned long) _etext; init_mm.end_data = (unsigned long) _edata; #ifdef CONFIG_X86_32 init_mm.brk = init_pg_tables_end + PAGE_OFFSET; #else init_mm.brk = (unsigned long) &_end; #endif code_resource.start = virt_to_phys(_text); code_resource.end = virt_to_phys(_etext)-1; Loading @@ -426,6 +447,9 @@ void __init setup_arch(char **cmdline_p) bss_resource.start = virt_to_phys(&__bss_start); bss_resource.end = virt_to_phys(&__bss_stop)-1; #ifdef CONFIG_X86_64 early_cpu_init(); #endif strlcpy(command_line, boot_command_line, COMMAND_LINE_SIZE); *cmdline_p = command_line; Loading @@ -435,14 +459,25 @@ void __init setup_arch(char **cmdline_p) if (acpi_mps_check()) { #ifdef CONFIG_X86_LOCAL_APIC #ifdef CONFIG_X86_32 enable_local_apic = -1; #else disable_apic = 1; #endif #endif clear_cpu_cap(&boot_cpu_data, X86_FEATURE_APIC); } finish_e820_parsing(); #ifdef CONFIG_X86_32 probe_roms(); #else # ifdef CONFIG_PROVIDE_OHCI1394_DMA_INIT if (init_ohci1394_dma_early) init_ohci1394_dma_on_all_controllers(); # endif #endif /* after parse_early_param, so could debug it */ insert_resource(&iomem_resource, &code_resource); Loading @@ -452,6 +487,7 @@ void __init setup_arch(char **cmdline_p) if (efi_enabled) efi_init(); #ifdef CONFIG_X86_32 if (ppro_with_ram_bug()) { e820_update_range(0x70000000ULL, 0x40000ULL, E820_RAM, E820_RESERVED); Loading @@ -459,6 +495,9 @@ void __init setup_arch(char **cmdline_p) printk(KERN_INFO "fixed physical RAM map:\n"); e820_print_map("bad_ppro"); } #else early_gart_iommu_check(); #endif e820_register_active_regions(0, 0, -1UL); /* Loading @@ -477,14 +516,32 @@ void __init setup_arch(char **cmdline_p) max_pfn = e820_end_of_ram(); } #ifdef CONFIG_X86_32 /* max_low_pfn get updated here */ find_low_pfn_range(); #else num_physpages = max_pfn; check_efer(); /* How many end-of-memory variables you have, grandma! */ /* need this before calling reserve_initrd */ max_low_pfn = max_pfn; high_memory = (void *)__va(max_pfn * PAGE_SIZE - 1) + 1; #endif /* max_pfn_mapped is updated here */ #ifdef CONFIG_X86_64 max_pfn_mapped = #endif max_pfn_mapped = init_memory_mapping(0, (max_low_pfn << PAGE_SHIFT)); reserve_initrd(); #ifdef CONFIG_X86_64 vsmp_init(); #endif dmi_scan_machine(); io_delay_init(); Loading @@ -494,6 +551,11 @@ void __init setup_arch(char **cmdline_p) */ acpi_boot_table_init(); #ifdef CONFIG_X86_64 /* Remove active ranges so rediscovery with NUMA-awareness happens */ remove_all_active_ranges(); #endif #ifdef CONFIG_ACPI_NUMA /* * Parse SRAT to discover nodes. Loading @@ -503,13 +565,18 @@ void __init setup_arch(char **cmdline_p) initmem_init(0, max_pfn); #ifdef CONFIG_X86_64 dma32_reserve_bootmem(); #endif #ifdef CONFIG_ACPI_SLEEP /* * Reserve low memory region for sleep support. */ acpi_reserve_bootmem(); #endif #ifdef CONFIG_X86_FIND_SMP_CONFIG #if defined(CONFIG_X86_FIND_SMP_CONFIG) && defined(CONFIG_X86_32) || \ defined(CONFIG_X86_MPPARSE) && defined(CONFIG_X86_64) /* * Find and reserve possible boot-time SMP configuration: */ Loading @@ -523,7 +590,7 @@ void __init setup_arch(char **cmdline_p) kvmclock_init(); #endif #ifdef CONFIG_VMI #if defined(CONFIG_VMI) && defined(CONFIG_X86_32) /* * Must be after max_low_pfn is determined, and before kernel * pagetables are setup. Loading @@ -533,11 +600,15 @@ void __init setup_arch(char **cmdline_p) paging_init(); #ifdef CONFIG_X86_64 map_vsyscall(); #endif /* * NOTE: On x86-32, only from this point on, fixmaps are ready for use. */ #ifdef CONFIG_PROVIDE_OHCI1394_DMA_INIT #if defined(CONFIG_PROVIDE_OHCI1394_DMA_INIT) && defined(CONFIG_X86_32) if (init_ohci1394_dma_early) init_ohci1394_dma_on_all_controllers(); #endif Loading @@ -553,6 +624,10 @@ void __init setup_arch(char **cmdline_p) */ acpi_boot_init(); #ifdef CONFIG_X86_64 init_cpu_to_node(); #endif #if defined(CONFIG_X86_MPPARSE) || defined(CONFIG_X86_VISWS) /* * get boot-time SMP configuration: Loading @@ -560,18 +635,26 @@ void __init setup_arch(char **cmdline_p) if (smp_found_config) get_smp_config(); #endif #ifdef CONFIG_X86_64 init_apic_mappings(); ioapic_init_mappings(); #else # if defined(CONFIG_SMP) && defined(CONFIG_X86_PC) if (def_to_bigsmp) printk(KERN_WARNING "More than 8 CPUs detected and " "CONFIG_X86_PC cannot handle it.\nUse " "CONFIG_X86_GENERICARCH or CONFIG_X86_BIGSMP.\n"); # endif #endif kvm_guest_init(); e820_reserve_resources(); e820_mark_nosave_regions(max_low_pfn); #ifdef CONFIG_X86_32 request_resource(&iomem_resource, &video_ram_resource); #endif reserve_standard_io_resources(); e820_setup_gap(); Loading Loading
arch/x86/kernel/setup_32.c +91 −8 Original line number Diff line number Diff line Loading @@ -372,26 +372,38 @@ static void __init reserve_initrd(void) * global efi_enabled. This allows the same kernel image to be used on existing * systems (with a traditional BIOS) as well as on EFI systems. */ /* * setup_arch - architecture-specific boot-time initializations * * Note: On x86_64, fixmaps are ready for use even before this is called. */ void __init setup_arch(char **cmdline_p) { #ifdef CONFIG_X86_32 memcpy(&boot_cpu_data, &new_cpu_data, sizeof(new_cpu_data)); pre_setup_arch_hook(); early_cpu_init(); early_ioremap_init(); reserve_setup_data(); #else printk(KERN_INFO "Command line: %s\n", boot_command_line); #endif ROOT_DEV = old_decode_dev(boot_params.hdr.root_dev); screen_info = boot_params.screen_info; edid_info = boot_params.edid_info; #ifdef CONFIG_X86_32 apm_info.bios = boot_params.apm_bios_info; ist_info = boot_params.ist_info; saved_video_mode = boot_params.hdr.vid_mode; if (boot_params.sys_desc_table.length != 0) { set_mca_bus(boot_params.sys_desc_table.table[3] & 0x2); machine_id = boot_params.sys_desc_table.table[0]; machine_submodel_id = boot_params.sys_desc_table.table[1]; BIOS_revision = boot_params.sys_desc_table.table[2]; } #endif saved_video_mode = boot_params.hdr.vid_mode; bootloader_type = boot_params.hdr.type_of_loader; #ifdef CONFIG_BLK_DEV_RAM Loading @@ -401,7 +413,12 @@ void __init setup_arch(char **cmdline_p) #endif #ifdef CONFIG_EFI if (!strncmp((char *)&boot_params.efi_info.efi_loader_signature, "EL32", 4)) { #ifdef CONFIG_X86_32 "EL32", #else "EL64", #endif 4)) { efi_enabled = 1; efi_reserve_early(); } Loading @@ -417,7 +434,11 @@ void __init setup_arch(char **cmdline_p) init_mm.start_code = (unsigned long) _text; init_mm.end_code = (unsigned long) _etext; init_mm.end_data = (unsigned long) _edata; #ifdef CONFIG_X86_32 init_mm.brk = init_pg_tables_end + PAGE_OFFSET; #else init_mm.brk = (unsigned long) &_end; #endif code_resource.start = virt_to_phys(_text); code_resource.end = virt_to_phys(_etext)-1; Loading @@ -426,6 +447,9 @@ void __init setup_arch(char **cmdline_p) bss_resource.start = virt_to_phys(&__bss_start); bss_resource.end = virt_to_phys(&__bss_stop)-1; #ifdef CONFIG_X86_64 early_cpu_init(); #endif strlcpy(command_line, boot_command_line, COMMAND_LINE_SIZE); *cmdline_p = command_line; Loading @@ -435,14 +459,25 @@ void __init setup_arch(char **cmdline_p) if (acpi_mps_check()) { #ifdef CONFIG_X86_LOCAL_APIC #ifdef CONFIG_X86_32 enable_local_apic = -1; #else disable_apic = 1; #endif #endif clear_cpu_cap(&boot_cpu_data, X86_FEATURE_APIC); } finish_e820_parsing(); #ifdef CONFIG_X86_32 probe_roms(); #else # ifdef CONFIG_PROVIDE_OHCI1394_DMA_INIT if (init_ohci1394_dma_early) init_ohci1394_dma_on_all_controllers(); # endif #endif /* after parse_early_param, so could debug it */ insert_resource(&iomem_resource, &code_resource); Loading @@ -452,6 +487,7 @@ void __init setup_arch(char **cmdline_p) if (efi_enabled) efi_init(); #ifdef CONFIG_X86_32 if (ppro_with_ram_bug()) { e820_update_range(0x70000000ULL, 0x40000ULL, E820_RAM, E820_RESERVED); Loading @@ -459,6 +495,9 @@ void __init setup_arch(char **cmdline_p) printk(KERN_INFO "fixed physical RAM map:\n"); e820_print_map("bad_ppro"); } #else early_gart_iommu_check(); #endif e820_register_active_regions(0, 0, -1UL); /* Loading @@ -477,14 +516,32 @@ void __init setup_arch(char **cmdline_p) max_pfn = e820_end_of_ram(); } #ifdef CONFIG_X86_32 /* max_low_pfn get updated here */ find_low_pfn_range(); #else num_physpages = max_pfn; check_efer(); /* How many end-of-memory variables you have, grandma! */ /* need this before calling reserve_initrd */ max_low_pfn = max_pfn; high_memory = (void *)__va(max_pfn * PAGE_SIZE - 1) + 1; #endif /* max_pfn_mapped is updated here */ #ifdef CONFIG_X86_64 max_pfn_mapped = #endif max_pfn_mapped = init_memory_mapping(0, (max_low_pfn << PAGE_SHIFT)); reserve_initrd(); #ifdef CONFIG_X86_64 vsmp_init(); #endif dmi_scan_machine(); io_delay_init(); Loading @@ -494,6 +551,11 @@ void __init setup_arch(char **cmdline_p) */ acpi_boot_table_init(); #ifdef CONFIG_X86_64 /* Remove active ranges so rediscovery with NUMA-awareness happens */ remove_all_active_ranges(); #endif #ifdef CONFIG_ACPI_NUMA /* * Parse SRAT to discover nodes. Loading @@ -503,13 +565,18 @@ void __init setup_arch(char **cmdline_p) initmem_init(0, max_pfn); #ifdef CONFIG_X86_64 dma32_reserve_bootmem(); #endif #ifdef CONFIG_ACPI_SLEEP /* * Reserve low memory region for sleep support. */ acpi_reserve_bootmem(); #endif #ifdef CONFIG_X86_FIND_SMP_CONFIG #if defined(CONFIG_X86_FIND_SMP_CONFIG) && defined(CONFIG_X86_32) || \ defined(CONFIG_X86_MPPARSE) && defined(CONFIG_X86_64) /* * Find and reserve possible boot-time SMP configuration: */ Loading @@ -523,7 +590,7 @@ void __init setup_arch(char **cmdline_p) kvmclock_init(); #endif #ifdef CONFIG_VMI #if defined(CONFIG_VMI) && defined(CONFIG_X86_32) /* * Must be after max_low_pfn is determined, and before kernel * pagetables are setup. Loading @@ -533,11 +600,15 @@ void __init setup_arch(char **cmdline_p) paging_init(); #ifdef CONFIG_X86_64 map_vsyscall(); #endif /* * NOTE: On x86-32, only from this point on, fixmaps are ready for use. */ #ifdef CONFIG_PROVIDE_OHCI1394_DMA_INIT #if defined(CONFIG_PROVIDE_OHCI1394_DMA_INIT) && defined(CONFIG_X86_32) if (init_ohci1394_dma_early) init_ohci1394_dma_on_all_controllers(); #endif Loading @@ -553,6 +624,10 @@ void __init setup_arch(char **cmdline_p) */ acpi_boot_init(); #ifdef CONFIG_X86_64 init_cpu_to_node(); #endif #if defined(CONFIG_X86_MPPARSE) || defined(CONFIG_X86_VISWS) /* * get boot-time SMP configuration: Loading @@ -560,18 +635,26 @@ void __init setup_arch(char **cmdline_p) if (smp_found_config) get_smp_config(); #endif #ifdef CONFIG_X86_64 init_apic_mappings(); ioapic_init_mappings(); #else # if defined(CONFIG_SMP) && defined(CONFIG_X86_PC) if (def_to_bigsmp) printk(KERN_WARNING "More than 8 CPUs detected and " "CONFIG_X86_PC cannot handle it.\nUse " "CONFIG_X86_GENERICARCH or CONFIG_X86_BIGSMP.\n"); # endif #endif kvm_guest_init(); e820_reserve_resources(); e820_mark_nosave_regions(max_low_pfn); #ifdef CONFIG_X86_32 request_resource(&iomem_resource, &video_ram_resource); #endif reserve_standard_io_resources(); e820_setup_gap(); Loading