LCOV - code coverage report
Current view: top level - arch/x86/kernel - setup.c (source / functions) Hit Total Coverage
Test: combined.info Lines: 239 384 62.2 %
Date: 2022-03-28 15:32:58 Functions: 17 22 77.3 %
Branches: 36 129 27.9 %

           Branch data     Line data    Source code
       1                 :            : // SPDX-License-Identifier: GPL-2.0-only
       2                 :            : /*
       3                 :            :  *  Copyright (C) 1995  Linus Torvalds
       4                 :            :  *
       5                 :            :  * This file contains the setup_arch() code, which handles the architecture-dependent
       6                 :            :  * parts of early kernel initialization.
       7                 :            :  */
       8                 :            : #include <linux/console.h>
       9                 :            : #include <linux/crash_dump.h>
      10                 :            : #include <linux/dmi.h>
      11                 :            : #include <linux/efi.h>
      12                 :            : #include <linux/init_ohci1394_dma.h>
      13                 :            : #include <linux/initrd.h>
      14                 :            : #include <linux/iscsi_ibft.h>
      15                 :            : #include <linux/memblock.h>
      16                 :            : #include <linux/pci.h>
      17                 :            : #include <linux/root_dev.h>
      18                 :            : #include <linux/sfi.h>
      19                 :            : #include <linux/tboot.h>
      20                 :            : #include <linux/usb/xhci-dbgp.h>
      21                 :            : 
      22                 :            : #include <uapi/linux/mount.h>
      23                 :            : 
      24                 :            : #include <xen/xen.h>
      25                 :            : 
      26                 :            : #include <asm/apic.h>
      27                 :            : #include <asm/bios_ebda.h>
      28                 :            : #include <asm/bugs.h>
      29                 :            : #include <asm/cpu.h>
      30                 :            : #include <asm/efi.h>
      31                 :            : #include <asm/gart.h>
      32                 :            : #include <asm/hypervisor.h>
      33                 :            : #include <asm/io_apic.h>
      34                 :            : #include <asm/kasan.h>
      35                 :            : #include <asm/kaslr.h>
      36                 :            : #include <asm/mce.h>
      37                 :            : #include <asm/mtrr.h>
      38                 :            : #include <asm/realmode.h>
      39                 :            : #include <asm/olpc_ofw.h>
      40                 :            : #include <asm/pci-direct.h>
      41                 :            : #include <asm/prom.h>
      42                 :            : #include <asm/proto.h>
      43                 :            : #include <asm/unwind.h>
      44                 :            : #include <asm/vsyscall.h>
      45                 :            : #include <linux/vmalloc.h>
      46                 :            : 
      47                 :            : /*
      48                 :            :  * max_low_pfn_mapped: highest directly mapped pfn < 4 GB
      49                 :            :  * max_pfn_mapped:     highest directly mapped pfn > 4 GB
      50                 :            :  *
      51                 :            :  * The direct mapping only covers E820_TYPE_RAM regions, so the ranges and gaps are
      52                 :            :  * represented by pfn_mapped[].
      53                 :            :  */
      54                 :            : unsigned long max_low_pfn_mapped;
      55                 :            : unsigned long max_pfn_mapped;
      56                 :            : 
      57                 :            : #ifdef CONFIG_DMI
      58                 :          0 : RESERVE_BRK(dmi_alloc, 65536);
      59                 :            : #endif
      60                 :            : 
      61                 :            : 
      62                 :            : /*
      63                 :            :  * Range of the BSS area. The size of the BSS area is determined
      64                 :            :  * at link time, with RESERVE_BRK*() facility reserving additional
      65                 :            :  * chunks.
      66                 :            :  */
      67                 :            : static __initdata
      68                 :            : unsigned long _brk_start = (unsigned long)__brk_base;
      69                 :            : unsigned long _brk_end   = (unsigned long)__brk_base;
      70                 :            : 
      71                 :            : struct boot_params boot_params;
      72                 :            : 
      73                 :            : /*
      74                 :            :  * These are the four main kernel memory regions, we put them into
      75                 :            :  * the resource tree so that kdump tools and other debugging tools
      76                 :            :  * recover it:
      77                 :            :  */
      78                 :            : 
      79                 :            : static struct resource rodata_resource = {
      80                 :            :         .name   = "Kernel rodata",
      81                 :            :         .start  = 0,
      82                 :            :         .end    = 0,
      83                 :            :         .flags  = IORESOURCE_BUSY | IORESOURCE_SYSTEM_RAM
      84                 :            : };
      85                 :            : 
      86                 :            : static struct resource data_resource = {
      87                 :            :         .name   = "Kernel data",
      88                 :            :         .start  = 0,
      89                 :            :         .end    = 0,
      90                 :            :         .flags  = IORESOURCE_BUSY | IORESOURCE_SYSTEM_RAM
      91                 :            : };
      92                 :            : 
      93                 :            : static struct resource code_resource = {
      94                 :            :         .name   = "Kernel code",
      95                 :            :         .start  = 0,
      96                 :            :         .end    = 0,
      97                 :            :         .flags  = IORESOURCE_BUSY | IORESOURCE_SYSTEM_RAM
      98                 :            : };
      99                 :            : 
     100                 :            : static struct resource bss_resource = {
     101                 :            :         .name   = "Kernel bss",
     102                 :            :         .start  = 0,
     103                 :            :         .end    = 0,
     104                 :            :         .flags  = IORESOURCE_BUSY | IORESOURCE_SYSTEM_RAM
     105                 :            : };
     106                 :            : 
     107                 :            : 
     108                 :            : #ifdef CONFIG_X86_32
     109                 :            : /* CPU data as detected by the assembly code in head_32.S */
     110                 :            : struct cpuinfo_x86 new_cpu_data;
     111                 :            : 
     112                 :            : /* Common CPU data for all CPUs */
     113                 :            : struct cpuinfo_x86 boot_cpu_data __read_mostly;
     114                 :            : EXPORT_SYMBOL(boot_cpu_data);
     115                 :            : 
     116                 :            : unsigned int def_to_bigsmp;
     117                 :            : 
     118                 :            : /* For MCA, but anyone else can use it if they want */
     119                 :            : unsigned int machine_id;
     120                 :            : unsigned int machine_submodel_id;
     121                 :            : unsigned int BIOS_revision;
     122                 :            : 
     123                 :            : struct apm_info apm_info;
     124                 :            : EXPORT_SYMBOL(apm_info);
     125                 :            : 
     126                 :            : #if defined(CONFIG_X86_SPEEDSTEP_SMI) || \
     127                 :            :         defined(CONFIG_X86_SPEEDSTEP_SMI_MODULE)
     128                 :            : struct ist_info ist_info;
     129                 :            : EXPORT_SYMBOL(ist_info);
     130                 :            : #else
     131                 :            : struct ist_info ist_info;
     132                 :            : #endif
     133                 :            : 
     134                 :            : #else
     135                 :            : struct cpuinfo_x86 boot_cpu_data __read_mostly;
     136                 :            : EXPORT_SYMBOL(boot_cpu_data);
     137                 :            : #endif
     138                 :            : 
     139                 :            : 
     140                 :            : #if !defined(CONFIG_X86_PAE) || defined(CONFIG_X86_64)
     141                 :            : __visible unsigned long mmu_cr4_features __ro_after_init;
     142                 :            : #else
     143                 :            : __visible unsigned long mmu_cr4_features __ro_after_init = X86_CR4_PAE;
     144                 :            : #endif
     145                 :            : 
     146                 :            : /* Boot loader ID and version as integers, for the benefit of proc_dointvec */
     147                 :            : int bootloader_type, bootloader_version;
     148                 :            : 
     149                 :            : /*
     150                 :            :  * Setup options
     151                 :            :  */
     152                 :            : struct screen_info screen_info;
     153                 :            : EXPORT_SYMBOL(screen_info);
     154                 :            : struct edid_info edid_info;
     155                 :            : EXPORT_SYMBOL_GPL(edid_info);
     156                 :            : 
     157                 :            : extern int root_mountflags;
     158                 :            : 
     159                 :            : unsigned long saved_video_mode;
     160                 :            : 
     161                 :            : #define RAMDISK_IMAGE_START_MASK        0x07FF
     162                 :            : #define RAMDISK_PROMPT_FLAG             0x8000
     163                 :            : #define RAMDISK_LOAD_FLAG               0x4000
     164                 :            : 
     165                 :            : static char __initdata command_line[COMMAND_LINE_SIZE];
     166                 :            : #ifdef CONFIG_CMDLINE_BOOL
     167                 :            : static char __initdata builtin_cmdline[COMMAND_LINE_SIZE] = CONFIG_CMDLINE;
     168                 :            : #endif
     169                 :            : 
     170                 :            : #if defined(CONFIG_EDD) || defined(CONFIG_EDD_MODULE)
     171                 :            : struct edd edd;
     172                 :            : #ifdef CONFIG_EDD_MODULE
     173                 :            : EXPORT_SYMBOL(edd);
     174                 :            : #endif
     175                 :            : /**
     176                 :            :  * copy_edd() - Copy the BIOS EDD information
     177                 :            :  *              from boot_params into a safe place.
     178                 :            :  *
     179                 :            :  */
     180                 :            : static inline void __init copy_edd(void)
     181                 :            : {
     182                 :            :      memcpy(edd.mbr_signature, boot_params.edd_mbr_sig_buffer,
     183                 :            :             sizeof(edd.mbr_signature));
     184                 :            :      memcpy(edd.edd_info, boot_params.eddbuf, sizeof(edd.edd_info));
     185                 :            :      edd.mbr_signature_nr = boot_params.edd_mbr_sig_buf_entries;
     186                 :            :      edd.edd_info_nr = boot_params.eddbuf_entries;
     187                 :            : }
     188                 :            : #else
     189                 :         28 : static inline void __init copy_edd(void)
     190                 :            : {
     191                 :         28 : }
     192                 :            : #endif
     193                 :            : 
     194                 :        336 : void * __init extend_brk(size_t size, size_t align)
     195                 :            : {
     196                 :        336 :         size_t mask = align - 1;
     197                 :        336 :         void *ret;
     198                 :            : 
     199         [ -  + ]:        336 :         BUG_ON(_brk_start == 0);
     200         [ -  + ]:        336 :         BUG_ON(align & mask);
     201                 :            : 
     202                 :        336 :         _brk_end = (_brk_end + mask) & ~mask;
     203         [ -  + ]:        336 :         BUG_ON((char *)(_brk_end + size) > __brk_limit);
     204                 :            : 
     205                 :        336 :         ret = (void *)_brk_end;
     206                 :        336 :         _brk_end += size;
     207                 :            : 
     208                 :        336 :         memset(ret, 0, size);
     209                 :            : 
     210                 :        336 :         return ret;
     211                 :            : }
     212                 :            : 
     213                 :            : #ifdef CONFIG_X86_32
     214                 :            : static void __init cleanup_highmap(void)
     215                 :            : {
     216                 :            : }
     217                 :            : #endif
     218                 :            : 
     219                 :         28 : static void __init reserve_brk(void)
     220                 :            : {
     221         [ +  - ]:         28 :         if (_brk_end > _brk_start)
     222                 :         28 :                 memblock_reserve(__pa_symbol(_brk_start),
     223                 :         28 :                                  _brk_end - _brk_start);
     224                 :            : 
     225                 :            :         /* Mark brk area as locked down and no longer taking any
     226                 :            :            new allocations */
     227                 :         28 :         _brk_start = 0;
     228                 :         28 : }
     229                 :            : 
     230                 :            : u64 relocated_ramdisk;
     231                 :            : 
     232                 :            : #ifdef CONFIG_BLK_DEV_INITRD
     233                 :            : 
     234                 :         56 : static u64 __init get_ramdisk_image(void)
     235                 :            : {
     236                 :         56 :         u64 ramdisk_image = boot_params.hdr.ramdisk_image;
     237                 :            : 
     238                 :         56 :         ramdisk_image |= (u64)boot_params.ext_ramdisk_image << 32;
     239                 :            : 
     240                 :         56 :         return ramdisk_image;
     241                 :            : }
     242                 :         56 : static u64 __init get_ramdisk_size(void)
     243                 :            : {
     244                 :         56 :         u64 ramdisk_size = boot_params.hdr.ramdisk_size;
     245                 :            : 
     246                 :         56 :         ramdisk_size |= (u64)boot_params.ext_ramdisk_size << 32;
     247                 :            : 
     248                 :         56 :         return ramdisk_size;
     249                 :            : }
     250                 :            : 
     251                 :          0 : static void __init relocate_initrd(void)
     252                 :            : {
     253                 :            :         /* Assume only end is not page aligned */
     254                 :          0 :         u64 ramdisk_image = get_ramdisk_image();
     255                 :          0 :         u64 ramdisk_size  = get_ramdisk_size();
     256                 :          0 :         u64 area_size     = PAGE_ALIGN(ramdisk_size);
     257                 :            : 
     258                 :            :         /* We need to move the initrd down into directly mapped mem */
     259                 :          0 :         relocated_ramdisk = memblock_find_in_range(0, PFN_PHYS(max_pfn_mapped),
     260                 :            :                                                    area_size, PAGE_SIZE);
     261                 :            : 
     262         [ #  # ]:          0 :         if (!relocated_ramdisk)
     263                 :          0 :                 panic("Cannot find place for new RAMDISK of size %lld\n",
     264                 :            :                       ramdisk_size);
     265                 :            : 
     266                 :            :         /* Note: this includes all the mem currently occupied by
     267                 :            :            the initrd, we rely on that fact to keep the data intact. */
     268                 :          0 :         memblock_reserve(relocated_ramdisk, area_size);
     269                 :          0 :         initrd_start = relocated_ramdisk + PAGE_OFFSET;
     270                 :          0 :         initrd_end   = initrd_start + ramdisk_size;
     271                 :          0 :         printk(KERN_INFO "Allocated new RAMDISK: [mem %#010llx-%#010llx]\n",
     272                 :          0 :                relocated_ramdisk, relocated_ramdisk + ramdisk_size - 1);
     273                 :            : 
     274                 :          0 :         copy_from_early_mem((void *)initrd_start, ramdisk_image, ramdisk_size);
     275                 :            : 
     276                 :          0 :         printk(KERN_INFO "Move RAMDISK from [mem %#010llx-%#010llx] to"
     277                 :            :                 " [mem %#010llx-%#010llx]\n",
     278                 :          0 :                 ramdisk_image, ramdisk_image + ramdisk_size - 1,
     279                 :          0 :                 relocated_ramdisk, relocated_ramdisk + ramdisk_size - 1);
     280                 :          0 : }
     281                 :            : 
     282                 :         28 : static void __init early_reserve_initrd(void)
     283                 :            : {
     284                 :            :         /* Assume only end is not page aligned */
     285                 :         28 :         u64 ramdisk_image = get_ramdisk_image();
     286                 :         28 :         u64 ramdisk_size  = get_ramdisk_size();
     287                 :         28 :         u64 ramdisk_end   = PAGE_ALIGN(ramdisk_image + ramdisk_size);
     288                 :            : 
     289         [ +  - ]:         28 :         if (!boot_params.hdr.type_of_loader ||
     290         [ -  + ]:         28 :             !ramdisk_image || !ramdisk_size)
     291                 :            :                 return;         /* No initrd provided by bootloader */
     292                 :            : 
     293                 :          0 :         memblock_reserve(ramdisk_image, ramdisk_end - ramdisk_image);
     294                 :            : }
     295                 :         28 : static void __init reserve_initrd(void)
     296                 :            : {
     297                 :            :         /* Assume only end is not page aligned */
     298                 :         28 :         u64 ramdisk_image = get_ramdisk_image();
     299                 :         28 :         u64 ramdisk_size  = get_ramdisk_size();
     300                 :         28 :         u64 ramdisk_end   = PAGE_ALIGN(ramdisk_image + ramdisk_size);
     301                 :         28 :         u64 mapped_size;
     302                 :            : 
     303         [ +  - ]:         28 :         if (!boot_params.hdr.type_of_loader ||
     304         [ -  + ]:         28 :             !ramdisk_image || !ramdisk_size)
     305                 :            :                 return;         /* No initrd provided by bootloader */
     306                 :            : 
     307                 :          0 :         initrd_start = 0;
     308                 :            : 
     309                 :          0 :         mapped_size = memblock_mem_size(max_pfn_mapped);
     310         [ #  # ]:          0 :         if (ramdisk_size >= (mapped_size>>1))
     311                 :          0 :                 panic("initrd too large to handle, "
     312                 :            :                        "disabling initrd (%lld needed, %lld available)\n",
     313                 :            :                        ramdisk_size, mapped_size>>1);
     314                 :            : 
     315                 :          0 :         printk(KERN_INFO "RAMDISK: [mem %#010llx-%#010llx]\n", ramdisk_image,
     316                 :            :                         ramdisk_end - 1);
     317                 :            : 
     318         [ #  # ]:          0 :         if (pfn_range_is_mapped(PFN_DOWN(ramdisk_image),
     319                 :          0 :                                 PFN_DOWN(ramdisk_end))) {
     320                 :            :                 /* All are mapped, easy case */
     321                 :          0 :                 initrd_start = ramdisk_image + PAGE_OFFSET;
     322                 :          0 :                 initrd_end = initrd_start + ramdisk_size;
     323                 :          0 :                 return;
     324                 :            :         }
     325                 :            : 
     326                 :          0 :         relocate_initrd();
     327                 :            : 
     328                 :          0 :         memblock_free(ramdisk_image, ramdisk_end - ramdisk_image);
     329                 :            : }
     330                 :            : 
     331                 :            : #else
     332                 :            : static void __init early_reserve_initrd(void)
     333                 :            : {
     334                 :            : }
     335                 :            : static void __init reserve_initrd(void)
     336                 :            : {
     337                 :            : }
     338                 :            : #endif /* CONFIG_BLK_DEV_INITRD */
     339                 :            : 
     340                 :         28 : static void __init parse_setup_data(void)
     341                 :            : {
     342                 :         28 :         struct setup_data *data;
     343                 :         28 :         u64 pa_data, pa_next;
     344                 :            : 
     345                 :         28 :         pa_data = boot_params.hdr.setup_data;
     346         [ -  + ]:         28 :         while (pa_data) {
     347                 :          0 :                 u32 data_len, data_type;
     348                 :            : 
     349                 :          0 :                 data = early_memremap(pa_data, sizeof(*data));
     350                 :          0 :                 data_len = data->len + sizeof(struct setup_data);
     351                 :          0 :                 data_type = data->type;
     352                 :          0 :                 pa_next = data->next;
     353                 :          0 :                 early_memunmap(data, sizeof(*data));
     354                 :            : 
     355      [ #  #  # ]:          0 :                 switch (data_type) {
     356                 :          0 :                 case SETUP_E820_EXT:
     357                 :          0 :                         e820__memory_setup_extended(pa_data, data_len);
     358                 :          0 :                         break;
     359                 :            :                 case SETUP_DTB:
     360                 :            :                         add_dtb(pa_data);
     361                 :            :                         break;
     362                 :          0 :                 case SETUP_EFI:
     363                 :          0 :                         parse_efi_setup(pa_data, data_len);
     364                 :          0 :                         break;
     365                 :            :                 default:
     366                 :            :                         break;
     367                 :            :                 }
     368                 :            :                 pa_data = pa_next;
     369                 :            :         }
     370                 :         28 : }
     371                 :            : 
     372                 :         28 : static void __init memblock_x86_reserve_range_setup_data(void)
     373                 :            : {
     374                 :         28 :         struct setup_data *data;
     375                 :         28 :         u64 pa_data;
     376                 :            : 
     377                 :         28 :         pa_data = boot_params.hdr.setup_data;
     378         [ -  + ]:         28 :         while (pa_data) {
     379                 :          0 :                 data = early_memremap(pa_data, sizeof(*data));
     380                 :          0 :                 memblock_reserve(pa_data, sizeof(*data) + data->len);
     381                 :            : 
     382         [ #  # ]:          0 :                 if (data->type == SETUP_INDIRECT &&
     383         [ #  # ]:          0 :                     ((struct setup_indirect *)data->data)->type != SETUP_INDIRECT)
     384                 :          0 :                         memblock_reserve(((struct setup_indirect *)data->data)->addr,
     385                 :            :                                          ((struct setup_indirect *)data->data)->len);
     386                 :            : 
     387                 :          0 :                 pa_data = data->next;
     388                 :          0 :                 early_memunmap(data, sizeof(*data));
     389                 :            :         }
     390                 :         28 : }
     391                 :            : 
     392                 :            : /*
     393                 :            :  * --------- Crashkernel reservation ------------------------------
     394                 :            :  */
     395                 :            : 
     396                 :            : #ifdef CONFIG_KEXEC_CORE
     397                 :            : 
     398                 :            : /* 16M alignment for crash kernel regions */
     399                 :            : #define CRASH_ALIGN             SZ_16M
     400                 :            : 
     401                 :            : /*
     402                 :            :  * Keep the crash kernel below this limit.
     403                 :            :  *
     404                 :            :  * Earlier 32-bits kernels would limit the kernel to the low 512 MB range
     405                 :            :  * due to mapping restrictions.
     406                 :            :  *
     407                 :            :  * 64-bit kdump kernels need to be restricted to be under 64 TB, which is
     408                 :            :  * the upper limit of system RAM in 4-level paging mode. Since the kdump
     409                 :            :  * jump could be from 5-level paging to 4-level paging, the jump will fail if
     410                 :            :  * the kernel is put above 64 TB, and during the 1st kernel bootup there's
     411                 :            :  * no good way to detect the paging mode of the target kernel which will be
     412                 :            :  * loaded for dumping.
     413                 :            :  */
     414                 :            : #ifdef CONFIG_X86_32
     415                 :            : # define CRASH_ADDR_LOW_MAX     SZ_512M
     416                 :            : # define CRASH_ADDR_HIGH_MAX    SZ_512M
     417                 :            : #else
     418                 :            : # define CRASH_ADDR_LOW_MAX     SZ_4G
     419                 :            : # define CRASH_ADDR_HIGH_MAX    SZ_64T
     420                 :            : #endif
     421                 :            : 
     422                 :          0 : static int __init reserve_crashkernel_low(void)
     423                 :            : {
     424                 :            : #ifdef CONFIG_X86_64
     425                 :          0 :         unsigned long long base, low_base = 0, low_size = 0;
     426                 :          0 :         unsigned long total_low_mem;
     427                 :          0 :         int ret;
     428                 :            : 
     429                 :          0 :         total_low_mem = memblock_mem_size(1UL << (32 - PAGE_SHIFT));
     430                 :            : 
     431                 :            :         /* crashkernel=Y,low */
     432                 :          0 :         ret = parse_crashkernel_low(boot_command_line, total_low_mem, &low_size, &base);
     433         [ #  # ]:          0 :         if (ret) {
     434                 :            :                 /*
     435                 :            :                  * two parts from kernel/dma/swiotlb.c:
     436                 :            :                  * -swiotlb size: user-specified with swiotlb= or default.
     437                 :            :                  *
     438                 :            :                  * -swiotlb overflow buffer: now hardcoded to 32k. We round it
     439                 :            :                  * to 8M for other buffers that may need to stay low too. Also
     440                 :            :                  * make sure we allocate enough extra low memory so that we
     441                 :            :                  * don't run out of DMA buffers for 32-bit devices.
     442                 :            :                  */
     443                 :          0 :                 low_size = max(swiotlb_size_or_default() + (8UL << 20), 256UL << 20);
     444                 :            :         } else {
     445                 :            :                 /* passed with crashkernel=0,low ? */
     446         [ #  # ]:          0 :                 if (!low_size)
     447                 :            :                         return 0;
     448                 :            :         }
     449                 :            : 
     450                 :          0 :         low_base = memblock_find_in_range(0, 1ULL << 32, low_size, CRASH_ALIGN);
     451         [ #  # ]:          0 :         if (!low_base) {
     452                 :          0 :                 pr_err("Cannot reserve %ldMB crashkernel low memory, please try smaller size.\n",
     453                 :            :                        (unsigned long)(low_size >> 20));
     454                 :          0 :                 return -ENOMEM;
     455                 :            :         }
     456                 :            : 
     457                 :          0 :         ret = memblock_reserve(low_base, low_size);
     458         [ #  # ]:          0 :         if (ret) {
     459                 :          0 :                 pr_err("%s: Error reserving crashkernel low memblock.\n", __func__);
     460                 :          0 :                 return ret;
     461                 :            :         }
     462                 :            : 
     463                 :          0 :         pr_info("Reserving %ldMB of low memory at %ldMB for crashkernel (System low RAM: %ldMB)\n",
     464                 :            :                 (unsigned long)(low_size >> 20),
     465                 :            :                 (unsigned long)(low_base >> 20),
     466                 :            :                 (unsigned long)(total_low_mem >> 20));
     467                 :            : 
     468                 :          0 :         crashk_low_res.start = low_base;
     469                 :          0 :         crashk_low_res.end   = low_base + low_size - 1;
     470                 :          0 :         insert_resource(&iomem_resource, &crashk_low_res);
     471                 :            : #endif
     472                 :          0 :         return 0;
     473                 :            : }
     474                 :            : 
     475                 :         28 : static void __init reserve_crashkernel(void)
     476                 :            : {
     477                 :         28 :         unsigned long long crash_size, crash_base, total_mem;
     478                 :         28 :         bool high = false;
     479                 :         28 :         int ret;
     480                 :            : 
     481                 :         28 :         total_mem = memblock_phys_mem_size();
     482                 :            : 
     483                 :            :         /* crashkernel=XM */
     484                 :         28 :         ret = parse_crashkernel(boot_command_line, total_mem, &crash_size, &crash_base);
     485   [ -  +  -  - ]:         28 :         if (ret != 0 || crash_size <= 0) {
     486                 :            :                 /* crashkernel=X,high */
     487                 :         28 :                 ret = parse_crashkernel_high(boot_command_line, total_mem,
     488                 :            :                                              &crash_size, &crash_base);
     489   [ -  +  -  - ]:         28 :                 if (ret != 0 || crash_size <= 0)
     490                 :         28 :                         return;
     491                 :            :                 high = true;
     492                 :            :         }
     493                 :            : 
     494                 :          0 :         if (xen_pv_domain()) {
     495                 :            :                 pr_info("Ignoring crashkernel for a Xen PV domain\n");
     496                 :            :                 return;
     497                 :            :         }
     498                 :            : 
     499                 :            :         /* 0 means: find the address automatically */
     500         [ #  # ]:          0 :         if (!crash_base) {
     501                 :            :                 /*
     502                 :            :                  * Set CRASH_ADDR_LOW_MAX upper bound for crash memory,
     503                 :            :                  * crashkernel=x,high reserves memory over 4G, also allocates
     504                 :            :                  * 256M extra low memory for DMA buffers and swiotlb.
     505                 :            :                  * But the extra memory is not required for all machines.
     506                 :            :                  * So try low memory first and fall back to high memory
     507                 :            :                  * unless "crashkernel=size[KMG],high" is specified.
     508                 :            :                  */
     509         [ #  # ]:          0 :                 if (!high)
     510                 :          0 :                         crash_base = memblock_find_in_range(CRASH_ALIGN,
     511                 :            :                                                 CRASH_ADDR_LOW_MAX,
     512                 :            :                                                 crash_size, CRASH_ALIGN);
     513         [ #  # ]:          0 :                 if (!crash_base)
     514                 :          0 :                         crash_base = memblock_find_in_range(CRASH_ALIGN,
     515                 :            :                                                 CRASH_ADDR_HIGH_MAX,
     516                 :            :                                                 crash_size, CRASH_ALIGN);
     517         [ #  # ]:          0 :                 if (!crash_base) {
     518                 :          0 :                         pr_info("crashkernel reservation failed - No suitable area found.\n");
     519                 :          0 :                         return;
     520                 :            :                 }
     521                 :            :         } else {
     522                 :          0 :                 unsigned long long start;
     523                 :            : 
     524                 :          0 :                 start = memblock_find_in_range(crash_base,
     525                 :            :                                                crash_base + crash_size,
     526                 :            :                                                crash_size, 1 << 20);
     527         [ #  # ]:          0 :                 if (start != crash_base) {
     528                 :          0 :                         pr_info("crashkernel reservation failed - memory is in use.\n");
     529                 :          0 :                         return;
     530                 :            :                 }
     531                 :            :         }
     532                 :          0 :         ret = memblock_reserve(crash_base, crash_size);
     533         [ #  # ]:          0 :         if (ret) {
     534                 :          0 :                 pr_err("%s: Error reserving crashkernel memblock.\n", __func__);
     535                 :          0 :                 return;
     536                 :            :         }
     537                 :            : 
     538   [ #  #  #  # ]:          0 :         if (crash_base >= (1ULL << 32) && reserve_crashkernel_low()) {
     539                 :          0 :                 memblock_free(crash_base, crash_size);
     540                 :          0 :                 return;
     541                 :            :         }
     542                 :            : 
     543                 :          0 :         pr_info("Reserving %ldMB of memory at %ldMB for crashkernel (System RAM: %ldMB)\n",
     544                 :            :                 (unsigned long)(crash_size >> 20),
     545                 :            :                 (unsigned long)(crash_base >> 20),
     546                 :            :                 (unsigned long)(total_mem >> 20));
     547                 :            : 
     548                 :          0 :         crashk_res.start = crash_base;
     549                 :          0 :         crashk_res.end   = crash_base + crash_size - 1;
     550                 :          0 :         insert_resource(&iomem_resource, &crashk_res);
     551                 :            : }
     552                 :            : #else
     553                 :            : static void __init reserve_crashkernel(void)
     554                 :            : {
     555                 :            : }
     556                 :            : #endif
     557                 :            : 
     558                 :            : static struct resource standard_io_resources[] = {
     559                 :            :         { .name = "dma1", .start = 0x00, .end = 0x1f,
     560                 :            :                 .flags = IORESOURCE_BUSY | IORESOURCE_IO },
     561                 :            :         { .name = "pic1", .start = 0x20, .end = 0x21,
     562                 :            :                 .flags = IORESOURCE_BUSY | IORESOURCE_IO },
     563                 :            :         { .name = "timer0", .start = 0x40, .end = 0x43,
     564                 :            :                 .flags = IORESOURCE_BUSY | IORESOURCE_IO },
     565                 :            :         { .name = "timer1", .start = 0x50, .end = 0x53,
     566                 :            :                 .flags = IORESOURCE_BUSY | IORESOURCE_IO },
     567                 :            :         { .name = "keyboard", .start = 0x60, .end = 0x60,
     568                 :            :                 .flags = IORESOURCE_BUSY | IORESOURCE_IO },
     569                 :            :         { .name = "keyboard", .start = 0x64, .end = 0x64,
     570                 :            :                 .flags = IORESOURCE_BUSY | IORESOURCE_IO },
     571                 :            :         { .name = "dma page reg", .start = 0x80, .end = 0x8f,
     572                 :            :                 .flags = IORESOURCE_BUSY | IORESOURCE_IO },
     573                 :            :         { .name = "pic2", .start = 0xa0, .end = 0xa1,
     574                 :            :                 .flags = IORESOURCE_BUSY | IORESOURCE_IO },
     575                 :            :         { .name = "dma2", .start = 0xc0, .end = 0xdf,
     576                 :            :                 .flags = IORESOURCE_BUSY | IORESOURCE_IO },
     577                 :            :         { .name = "fpu", .start = 0xf0, .end = 0xff,
     578                 :            :                 .flags = IORESOURCE_BUSY | IORESOURCE_IO }
     579                 :            : };
     580                 :            : 
     581                 :         28 : void __init reserve_standard_io_resources(void)
     582                 :            : {
     583                 :         28 :         int i;
     584                 :            : 
     585                 :            :         /* request I/O space for devices used on all i[345]86 PCs */
     586         [ +  + ]:        308 :         for (i = 0; i < ARRAY_SIZE(standard_io_resources); i++)
     587                 :        280 :                 request_resource(&ioport_resource, &standard_io_resources[i]);
     588                 :            : 
     589                 :         28 : }
     590                 :            : 
     591                 :         28 : static __init void reserve_ibft_region(void)
     592                 :            : {
     593                 :         28 :         unsigned long addr, size = 0;
     594                 :            : 
     595                 :         28 :         addr = find_ibft_region(&size);
     596                 :            : 
     597                 :         28 :         if (size)
     598                 :            :                 memblock_reserve(addr, size);
     599                 :            : }
     600                 :            : 
     601                 :         28 : static bool __init snb_gfx_workaround_needed(void)
     602                 :            : {
     603                 :            : #ifdef CONFIG_PCI
     604                 :         28 :         int i;
     605                 :         28 :         u16 vendor, devid;
     606                 :         28 :         static const __initconst u16 snb_ids[] = {
     607                 :            :                 0x0102,
     608                 :            :                 0x0112,
     609                 :            :                 0x0122,
     610                 :            :                 0x0106,
     611                 :            :                 0x0116,
     612                 :            :                 0x0126,
     613                 :            :                 0x010a,
     614                 :            :         };
     615                 :            : 
     616                 :            :         /* Assume no if something weird is going on with PCI */
     617         [ +  - ]:         28 :         if (!early_pci_allowed())
     618                 :            :                 return false;
     619                 :            : 
     620                 :         28 :         vendor = read_pci_config_16(0, 2, 0, PCI_VENDOR_ID);
     621         [ -  + ]:         28 :         if (vendor != 0x8086)
     622                 :            :                 return false;
     623                 :            : 
     624                 :          0 :         devid = read_pci_config_16(0, 2, 0, PCI_DEVICE_ID);
     625         [ #  # ]:          0 :         for (i = 0; i < ARRAY_SIZE(snb_ids); i++)
     626         [ #  # ]:          0 :                 if (devid == snb_ids[i])
     627                 :            :                         return true;
     628                 :            : #endif
     629                 :            : 
     630                 :            :         return false;
     631                 :            : }
     632                 :            : 
     633                 :            : /*
     634                 :            :  * Sandy Bridge graphics has trouble with certain ranges, exclude
     635                 :            :  * them from allocation.
     636                 :            :  */
     637                 :         28 : static void __init trim_snb_memory(void)
     638                 :            : {
     639                 :         28 :         static const __initconst unsigned long bad_pages[] = {
     640                 :            :                 0x20050000,
     641                 :            :                 0x20110000,
     642                 :            :                 0x20130000,
     643                 :            :                 0x20138000,
     644                 :            :                 0x40004000,
     645                 :            :         };
     646                 :         28 :         int i;
     647                 :            : 
     648         [ -  + ]:         28 :         if (!snb_gfx_workaround_needed())
     649                 :            :                 return;
     650                 :            : 
     651                 :          0 :         printk(KERN_DEBUG "reserving inaccessible SNB gfx pages\n");
     652                 :            : 
     653                 :            :         /*
     654                 :            :          * Reserve all memory below the 1 MB mark that has not
     655                 :            :          * already been reserved.
     656                 :            :          */
     657                 :          0 :         memblock_reserve(0, 1<<20);
     658                 :            :         
     659         [ #  # ]:          0 :         for (i = 0; i < ARRAY_SIZE(bad_pages); i++) {
     660         [ #  # ]:          0 :                 if (memblock_reserve(bad_pages[i], PAGE_SIZE))
     661                 :          0 :                         printk(KERN_WARNING "failed to reserve 0x%08lx\n",
     662                 :            :                                bad_pages[i]);
     663                 :            :         }
     664                 :            : }
     665                 :            : 
     666                 :            : /*
     667                 :            :  * Here we put platform-specific memory range workarounds, i.e.
     668                 :            :  * memory known to be corrupt or otherwise in need to be reserved on
     669                 :            :  * specific platforms.
     670                 :            :  *
     671                 :            :  * If this gets used more widely it could use a real dispatch mechanism.
     672                 :            :  */
     673                 :         28 : static void __init trim_platform_memory_ranges(void)
     674                 :            : {
     675                 :         28 :         trim_snb_memory();
     676                 :            : }
     677                 :            : 
     678                 :         28 : static void __init trim_bios_range(void)
     679                 :            : {
     680                 :            :         /*
     681                 :            :          * A special case is the first 4Kb of memory;
     682                 :            :          * This is a BIOS owned area, not kernel ram, but generally
     683                 :            :          * not listed as such in the E820 table.
     684                 :            :          *
     685                 :            :          * This typically reserves additional memory (64KiB by default)
     686                 :            :          * since some BIOSes are known to corrupt low memory.  See the
     687                 :            :          * Kconfig help text for X86_RESERVE_LOW.
     688                 :            :          */
     689                 :         28 :         e820__range_update(0, PAGE_SIZE, E820_TYPE_RAM, E820_TYPE_RESERVED);
     690                 :            : 
     691                 :            :         /*
     692                 :            :          * special case: Some BIOSes report the PC BIOS
     693                 :            :          * area (640Kb -> 1Mb) as RAM even though it is not.
     694                 :            :          * take them out.
     695                 :            :          */
     696                 :         28 :         e820__range_remove(BIOS_BEGIN, BIOS_END - BIOS_BEGIN, E820_TYPE_RAM, 1);
     697                 :            : 
     698                 :         28 :         e820__update_table(e820_table);
     699                 :         28 : }
     700                 :            : 
     701                 :            : /* called before trim_bios_range() to spare extra sanitize */
     702                 :         28 : static void __init e820_add_kernel_range(void)
     703                 :            : {
     704                 :         28 :         u64 start = __pa_symbol(_text);
     705                 :         28 :         u64 size = __pa_symbol(_end) - start;
     706                 :            : 
     707                 :            :         /*
     708                 :            :          * Complain if .text .data and .bss are not marked as E820_TYPE_RAM and
     709                 :            :          * attempt to fix it by adding the range. We may have a confused BIOS,
     710                 :            :          * or the user may have used memmap=exactmap or memmap=xxM$yyM to
     711                 :            :          * exclude kernel range. If we really are running on top non-RAM,
     712                 :            :          * we will crash later anyways.
     713                 :            :          */
     714         [ -  + ]:         28 :         if (e820__mapped_all(start, start + size, E820_TYPE_RAM))
     715                 :            :                 return;
     716                 :            : 
     717                 :          0 :         pr_warn(".text .data .bss are not marked as E820_TYPE_RAM!\n");
     718                 :          0 :         e820__range_remove(start, size, E820_TYPE_RAM, 0);
     719                 :          0 :         e820__range_add(start, size, E820_TYPE_RAM);
     720                 :            : }
     721                 :            : 
     722                 :            : static unsigned reserve_low = CONFIG_X86_RESERVE_LOW << 10;
     723                 :            : 
     724                 :          0 : static int __init parse_reservelow(char *p)
     725                 :            : {
     726                 :          0 :         unsigned long long size;
     727                 :            : 
     728         [ #  # ]:          0 :         if (!p)
     729                 :            :                 return -EINVAL;
     730                 :            : 
     731                 :          0 :         size = memparse(p, &p);
     732                 :            : 
     733                 :          0 :         if (size < 4096)
     734                 :            :                 size = 4096;
     735                 :            : 
     736                 :            :         if (size > 640*1024)
     737                 :            :                 size = 640*1024;
     738                 :            : 
     739                 :          0 :         reserve_low = size;
     740                 :            : 
     741                 :          0 :         return 0;
     742                 :            : }
     743                 :            : 
     744                 :            : early_param("reservelow", parse_reservelow);
     745                 :            : 
     746                 :         28 : static void __init trim_low_memory_range(void)
     747                 :            : {
     748                 :         28 :         memblock_reserve(0, ALIGN(reserve_low, PAGE_SIZE));
     749                 :         28 : }
     750                 :            :         
     751                 :            : /*
     752                 :            :  * Dump out kernel offset information on panic.
     753                 :            :  */
     754                 :            : static int
     755                 :          0 : dump_kernel_offset(struct notifier_block *self, unsigned long v, void *p)
     756                 :            : {
     757         [ #  # ]:          0 :         if (kaslr_enabled()) {
     758                 :          0 :                 pr_emerg("Kernel Offset: 0x%lx from 0x%lx (relocation range: 0x%lx-0x%lx)\n",
     759                 :            :                          kaslr_offset(),
     760                 :            :                          __START_KERNEL,
     761                 :            :                          __START_KERNEL_map,
     762                 :            :                          MODULES_VADDR-1);
     763                 :            :         } else {
     764                 :          0 :                 pr_emerg("Kernel Offset: disabled\n");
     765                 :            :         }
     766                 :            : 
     767                 :          0 :         return 0;
     768                 :            : }
     769                 :            : 
     770                 :            : /*
     771                 :            :  * Determine if we were loaded by an EFI loader.  If so, then we have also been
     772                 :            :  * passed the efi memmap, systab, etc., so we should use these data structures
     773                 :            :  * for initialization.  Note, the efi init code path is determined by the
     774                 :            :  * global efi_enabled. This allows the same kernel image to be used on existing
     775                 :            :  * systems (with a traditional BIOS) as well as on EFI systems.
     776                 :            :  */
     777                 :            : /*
     778                 :            :  * setup_arch - architecture-specific boot-time initializations
     779                 :            :  *
     780                 :            :  * Note: On x86_64, fixmaps are ready for use even before this is called.
     781                 :            :  */
     782                 :            : 
     783                 :         28 : void __init setup_arch(char **cmdline_p)
     784                 :            : {
     785                 :            :         /*
     786                 :            :          * Reserve the memory occupied by the kernel between _text and
     787                 :            :          * __end_of_kernel_reserve symbols. Any kernel sections after the
     788                 :            :          * __end_of_kernel_reserve symbol must be explicitly reserved with a
     789                 :            :          * separate memblock_reserve() or they will be discarded.
     790                 :            :          */
     791                 :         28 :         memblock_reserve(__pa_symbol(_text),
     792                 :         28 :                          (unsigned long)__end_of_kernel_reserve - (unsigned long)_text);
     793                 :            : 
     794                 :            :         /*
     795                 :            :          * Make sure page 0 is always reserved because on systems with
     796                 :            :          * L1TF its contents can be leaked to user processes.
     797                 :            :          */
     798                 :         28 :         memblock_reserve(0, PAGE_SIZE);
     799                 :            : 
     800                 :         28 :         early_reserve_initrd();
     801                 :            : 
     802                 :            :         /*
     803                 :            :          * At this point everything still needed from the boot loader
     804                 :            :          * or BIOS or kernel text should be early reserved or marked not
     805                 :            :          * RAM in e820. All other memory is free game.
     806                 :            :          */
     807                 :            : 
     808                 :            : #ifdef CONFIG_X86_32
     809                 :            :         memcpy(&boot_cpu_data, &new_cpu_data, sizeof(new_cpu_data));
     810                 :            : 
     811                 :            :         /*
     812                 :            :          * copy kernel address range established so far and switch
     813                 :            :          * to the proper swapper page table
     814                 :            :          */
     815                 :            :         clone_pgd_range(swapper_pg_dir     + KERNEL_PGD_BOUNDARY,
     816                 :            :                         initial_page_table + KERNEL_PGD_BOUNDARY,
     817                 :            :                         KERNEL_PGD_PTRS);
     818                 :            : 
     819                 :            :         load_cr3(swapper_pg_dir);
     820                 :            :         /*
     821                 :            :          * Note: Quark X1000 CPUs advertise PGE incorrectly and require
     822                 :            :          * a cr3 based tlb flush, so the following __flush_tlb_all()
     823                 :            :          * will not flush anything because the CPU quirk which clears
     824                 :            :          * X86_FEATURE_PGE has not been invoked yet. Though due to the
     825                 :            :          * load_cr3() above the TLB has been flushed already. The
     826                 :            :          * quirk is invoked before subsequent calls to __flush_tlb_all()
     827                 :            :          * so proper operation is guaranteed.
     828                 :            :          */
     829                 :            :         __flush_tlb_all();
     830                 :            : #else
     831                 :         28 :         printk(KERN_INFO "Command line: %s\n", boot_command_line);
     832      [ -  +  - ]:         28 :         boot_cpu_data.x86_phys_bits = MAX_PHYSMEM_BITS;
     833                 :            : #endif
     834                 :            : 
     835                 :            :         /*
     836                 :            :          * If we have OLPC OFW, we might end up relocating the fixmap due to
     837                 :            :          * reserve_top(), so do this before touching the ioremap area.
     838                 :            :          */
     839                 :         28 :         olpc_ofw_detect();
     840                 :            : 
     841                 :         28 :         idt_setup_early_traps();
     842                 :         28 :         early_cpu_init();
     843                 :         28 :         arch_init_ideal_nops();
     844                 :         28 :         jump_label_init();
     845                 :         28 :         early_ioremap_init();
     846                 :            : 
     847         [ -  + ]:         28 :         setup_olpc_ofw_pgd();
     848                 :            : 
     849         [ -  + ]:         28 :         ROOT_DEV = old_decode_dev(boot_params.hdr.root_dev);
     850                 :         28 :         screen_info = boot_params.screen_info;
     851                 :         28 :         edid_info = boot_params.edid_info;
     852                 :            : #ifdef CONFIG_X86_32
     853                 :            :         apm_info.bios = boot_params.apm_bios_info;
     854                 :            :         ist_info = boot_params.ist_info;
     855                 :            : #endif
     856                 :         28 :         saved_video_mode = boot_params.hdr.vid_mode;
     857                 :         28 :         bootloader_type = boot_params.hdr.type_of_loader;
     858         [ -  + ]:         28 :         if ((bootloader_type >> 4) == 0xe) {
     859                 :          0 :                 bootloader_type &= 0xf;
     860                 :          0 :                 bootloader_type |= (boot_params.hdr.ext_loader_type+0x10) << 4;
     861                 :            :         }
     862                 :         28 :         bootloader_version  = bootloader_type & 0xf;
     863                 :         28 :         bootloader_version |= boot_params.hdr.ext_loader_ver << 4;
     864                 :            : 
     865                 :            : #ifdef CONFIG_BLK_DEV_RAM
     866                 :            :         rd_image_start = boot_params.hdr.ram_size & RAMDISK_IMAGE_START_MASK;
     867                 :            :         rd_prompt = ((boot_params.hdr.ram_size & RAMDISK_PROMPT_FLAG) != 0);
     868                 :            :         rd_doload = ((boot_params.hdr.ram_size & RAMDISK_LOAD_FLAG) != 0);
     869                 :            : #endif
     870                 :            : #ifdef CONFIG_EFI
     871         [ -  + ]:         28 :         if (!strncmp((char *)&boot_params.efi_info.efi_loader_signature,
     872                 :            :                      EFI32_LOADER_SIGNATURE, 4)) {
     873                 :          0 :                 set_bit(EFI_BOOT, &efi.flags);
     874         [ -  + ]:         28 :         } else if (!strncmp((char *)&boot_params.efi_info.efi_loader_signature,
     875                 :            :                      EFI64_LOADER_SIGNATURE, 4)) {
     876                 :          0 :                 set_bit(EFI_BOOT, &efi.flags);
     877                 :          0 :                 set_bit(EFI_64BIT, &efi.flags);
     878                 :            :         }
     879                 :            : #endif
     880                 :            : 
     881                 :         28 :         x86_init.oem.arch_setup();
     882                 :            : 
     883                 :         28 :         iomem_resource.end = (1ULL << boot_cpu_data.x86_phys_bits) - 1;
     884                 :         28 :         e820__memory_setup();
     885                 :         28 :         parse_setup_data();
     886                 :            : 
     887                 :         28 :         copy_edd();
     888                 :            : 
     889         [ -  + ]:         28 :         if (!boot_params.hdr.root_flags)
     890                 :          0 :                 root_mountflags &= ~MS_RDONLY;
     891                 :         28 :         init_mm.start_code = (unsigned long) _text;
     892                 :         28 :         init_mm.end_code = (unsigned long) _etext;
     893                 :         28 :         init_mm.end_data = (unsigned long) _edata;
     894                 :         28 :         init_mm.brk = _brk_end;
     895                 :            : 
     896                 :         28 :         code_resource.start = __pa_symbol(_text);
     897                 :         28 :         code_resource.end = __pa_symbol(_etext)-1;
     898                 :         28 :         rodata_resource.start = __pa_symbol(__start_rodata);
     899                 :         28 :         rodata_resource.end = __pa_symbol(__end_rodata)-1;
     900                 :         28 :         data_resource.start = __pa_symbol(_sdata);
     901                 :         28 :         data_resource.end = __pa_symbol(_edata)-1;
     902                 :         28 :         bss_resource.start = __pa_symbol(__bss_start);
     903                 :         28 :         bss_resource.end = __pa_symbol(__bss_stop)-1;
     904                 :            : 
     905                 :            : #ifdef CONFIG_CMDLINE_BOOL
     906                 :            : #ifdef CONFIG_CMDLINE_OVERRIDE
     907                 :            :         strlcpy(boot_command_line, builtin_cmdline, COMMAND_LINE_SIZE);
     908                 :            : #else
     909                 :            :         if (builtin_cmdline[0]) {
     910                 :            :                 /* append boot loader cmdline to builtin */
     911                 :            :                 strlcat(builtin_cmdline, " ", COMMAND_LINE_SIZE);
     912                 :            :                 strlcat(builtin_cmdline, boot_command_line, COMMAND_LINE_SIZE);
     913                 :            :                 strlcpy(boot_command_line, builtin_cmdline, COMMAND_LINE_SIZE);
     914                 :            :         }
     915                 :            : #endif
     916                 :            : #endif
     917                 :            : 
     918                 :         28 :         strlcpy(command_line, boot_command_line, COMMAND_LINE_SIZE);
     919                 :         28 :         *cmdline_p = command_line;
     920                 :            : 
     921                 :            :         /*
     922                 :            :          * x86_configure_nx() is called before parse_early_param() to detect
     923                 :            :          * whether hardware doesn't support NX (so that the early EHCI debug
     924                 :            :          * console setup can safely call set_fixmap()). It may then be called
     925                 :            :          * again from within noexec_setup() during parsing early parameters
     926                 :            :          * to honor the respective command line option.
     927                 :            :          */
     928                 :         28 :         x86_configure_nx();
     929                 :            : 
     930                 :         28 :         parse_early_param();
     931                 :            : 
     932         [ -  + ]:         28 :         if (efi_enabled(EFI_BOOT))
     933                 :          0 :                 efi_memblock_x86_reserve_range();
     934                 :            : #ifdef CONFIG_MEMORY_HOTPLUG
     935                 :            :         /*
     936                 :            :          * Memory used by the kernel cannot be hot-removed because Linux
     937                 :            :          * cannot migrate the kernel pages. When memory hotplug is
     938                 :            :          * enabled, we should prevent memblock from allocating memory
     939                 :            :          * for the kernel.
     940                 :            :          *
     941                 :            :          * ACPI SRAT records all hotpluggable memory ranges. But before
     942                 :            :          * SRAT is parsed, we don't know about it.
     943                 :            :          *
     944                 :            :          * The kernel image is loaded into memory at very early time. We
     945                 :            :          * cannot prevent this anyway. So on NUMA system, we set any
     946                 :            :          * node the kernel resides in as un-hotpluggable.
     947                 :            :          *
     948                 :            :          * Since on modern servers, one node could have double-digit
     949                 :            :          * gigabytes memory, we can assume the memory around the kernel
     950                 :            :          * image is also un-hotpluggable. So before SRAT is parsed, just
     951                 :            :          * allocate memory near the kernel image to try the best to keep
     952                 :            :          * the kernel away from hotpluggable memory.
     953                 :            :          */
     954                 :            :         if (movable_node_is_enabled())
     955                 :            :                 memblock_set_bottom_up(true);
     956                 :            : #endif
     957                 :            : 
     958                 :         28 :         x86_report_nx();
     959                 :            : 
     960                 :            :         /* after early param, so could get panic from serial */
     961                 :         28 :         memblock_x86_reserve_range_setup_data();
     962                 :            : 
     963         [ -  + ]:         28 :         if (acpi_mps_check()) {
     964                 :            : #ifdef CONFIG_X86_LOCAL_APIC
     965                 :          0 :                 disable_apic = 1;
     966                 :            : #endif
     967                 :          0 :                 setup_clear_cpu_cap(X86_FEATURE_APIC);
     968                 :            :         }
     969                 :            : 
     970                 :         28 :         e820__reserve_setup_data();
     971                 :         28 :         e820__finish_early_params();
     972                 :            : 
     973         [ -  + ]:         28 :         if (efi_enabled(EFI_BOOT))
     974                 :          0 :                 efi_init();
     975                 :            : 
     976                 :         28 :         dmi_setup();
     977                 :            : 
     978                 :            :         /*
     979                 :            :          * VMware detection requires dmi to be available, so this
     980                 :            :          * needs to be done after dmi_setup(), for the boot CPU.
     981                 :            :          */
     982                 :         28 :         init_hypervisor_platform();
     983                 :            : 
     984                 :         28 :         tsc_early_init();
     985                 :         28 :         x86_init.resources.probe_roms();
     986                 :            : 
     987                 :            :         /* after parse_early_param, so could debug it */
     988                 :         28 :         insert_resource(&iomem_resource, &code_resource);
     989                 :         28 :         insert_resource(&iomem_resource, &rodata_resource);
     990                 :         28 :         insert_resource(&iomem_resource, &data_resource);
     991                 :         28 :         insert_resource(&iomem_resource, &bss_resource);
     992                 :            : 
     993                 :         28 :         e820_add_kernel_range();
     994                 :         28 :         trim_bios_range();
     995                 :            : #ifdef CONFIG_X86_32
     996                 :            :         if (ppro_with_ram_bug()) {
     997                 :            :                 e820__range_update(0x70000000ULL, 0x40000ULL, E820_TYPE_RAM,
     998                 :            :                                   E820_TYPE_RESERVED);
     999                 :            :                 e820__update_table(e820_table);
    1000                 :            :                 printk(KERN_INFO "fixed physical RAM map:\n");
    1001                 :            :                 e820__print_table("bad_ppro");
    1002                 :            :         }
    1003                 :            : #else
    1004                 :         28 :         early_gart_iommu_check();
    1005                 :            : #endif
    1006                 :            : 
    1007                 :            :         /*
    1008                 :            :          * partially used pages are not usable - thus
    1009                 :            :          * we are rounding upwards:
    1010                 :            :          */
    1011                 :         28 :         max_pfn = e820__end_of_ram_pfn();
    1012                 :            : 
    1013                 :            :         /* update e820 for memory not covered by WB MTRRs */
    1014                 :         28 :         mtrr_bp_init();
    1015         [ -  + ]:         28 :         if (mtrr_trim_uncached_memory(max_pfn))
    1016                 :          0 :                 max_pfn = e820__end_of_ram_pfn();
    1017                 :            : 
    1018                 :         28 :         max_possible_pfn = max_pfn;
    1019                 :            : 
    1020                 :            :         /*
    1021                 :            :          * This call is required when the CPU does not support PAT. If
    1022                 :            :          * mtrr_bp_init() invoked it already via pat_init() the call has no
    1023                 :            :          * effect.
    1024                 :            :          */
    1025                 :         28 :         init_cache_modes();
    1026                 :            : 
    1027                 :            :         /*
    1028                 :            :          * Define random base addresses for memory sections after max_pfn is
    1029                 :            :          * defined and before each memory section base is used.
    1030                 :            :          */
    1031         [ -  + ]:         28 :         kernel_randomize_memory();
    1032                 :            : 
    1033                 :            : #ifdef CONFIG_X86_32
    1034                 :            :         /* max_low_pfn get updated here */
    1035                 :            :         find_low_pfn_range();
    1036                 :            : #else
    1037         [ -  + ]:         28 :         check_x2apic();
    1038                 :            : 
    1039                 :            :         /* How many end-of-memory variables you have, grandma! */
    1040                 :            :         /* need this before calling reserve_initrd */
    1041         [ -  + ]:         28 :         if (max_pfn > (1UL<<(32 - PAGE_SHIFT)))
    1042                 :          0 :                 max_low_pfn = e820__end_of_low_ram_pfn();
    1043                 :            :         else
    1044                 :         28 :                 max_low_pfn = max_pfn;
    1045                 :            : 
    1046                 :         28 :         high_memory = (void *)__va(max_pfn * PAGE_SIZE - 1) + 1;
    1047                 :            : #endif
    1048                 :            : 
    1049                 :            :         /*
    1050                 :            :          * Find and reserve possible boot-time SMP configuration:
    1051                 :            :          */
    1052                 :         28 :         find_smp_config();
    1053                 :            : 
    1054                 :         28 :         reserve_ibft_region();
    1055                 :            : 
    1056                 :         28 :         early_alloc_pgt_buf();
    1057                 :            : 
    1058                 :            :         /*
    1059                 :            :          * Need to conclude brk, before e820__memblock_setup()
    1060                 :            :          *  it could use memblock_find_in_range, could overlap with
    1061                 :            :          *  brk area.
    1062                 :            :          */
    1063                 :         28 :         reserve_brk();
    1064                 :            : 
    1065                 :         28 :         cleanup_highmap();
    1066                 :            : 
    1067                 :         28 :         memblock_set_current_limit(ISA_END_ADDRESS);
    1068                 :         28 :         e820__memblock_setup();
    1069                 :            : 
    1070                 :         28 :         reserve_bios_regions();
    1071                 :            : 
    1072                 :         28 :         efi_fake_memmap();
    1073                 :         28 :         efi_find_mirror();
    1074                 :         28 :         efi_esrt_init();
    1075                 :            : 
    1076                 :            :         /*
    1077                 :            :          * The EFI specification says that boot service code won't be
    1078                 :            :          * called after ExitBootServices(). This is, in fact, a lie.
    1079                 :            :          */
    1080                 :         28 :         efi_reserve_boot_services();
    1081                 :            : 
    1082                 :            :         /* preallocate 4k for mptable mpc */
    1083                 :         28 :         e820__memblock_alloc_reserved_mpc_new();
    1084                 :            : 
    1085                 :            : #ifdef CONFIG_X86_CHECK_BIOS_CORRUPTION
    1086                 :         28 :         setup_bios_corruption_check();
    1087                 :            : #endif
    1088                 :            : 
    1089                 :            : #ifdef CONFIG_X86_32
    1090                 :            :         printk(KERN_DEBUG "initial memory mapped: [mem 0x00000000-%#010lx]\n",
    1091                 :            :                         (max_pfn_mapped<<PAGE_SHIFT) - 1);
    1092                 :            : #endif
    1093                 :            : 
    1094                 :         28 :         reserve_real_mode();
    1095                 :            : 
    1096                 :         28 :         trim_platform_memory_ranges();
    1097                 :         28 :         trim_low_memory_range();
    1098                 :            : 
    1099                 :         28 :         init_mem_mapping();
    1100                 :            : 
    1101                 :         28 :         idt_setup_early_pf();
    1102                 :            : 
    1103                 :            :         /*
    1104                 :            :          * Update mmu_cr4_features (and, indirectly, trampoline_cr4_features)
    1105                 :            :          * with the current CR4 value.  This may not be necessary, but
    1106                 :            :          * auditing all the early-boot CR4 manipulation would be needed to
    1107                 :            :          * rule it out.
    1108                 :            :          *
    1109                 :            :          * Mask off features that don't work outside long mode (just
    1110                 :            :          * PCIDE for now).
    1111                 :            :          */
    1112                 :         28 :         mmu_cr4_features = __read_cr4() & ~X86_CR4_PCIDE;
    1113                 :            : 
    1114                 :         28 :         memblock_set_current_limit(get_max_mapped());
    1115                 :            : 
    1116                 :            :         /*
    1117                 :            :          * NOTE: On x86-32, only from this point on, fixmaps are ready for use.
    1118                 :            :          */
    1119                 :            : 
    1120                 :            : #ifdef CONFIG_PROVIDE_OHCI1394_DMA_INIT
    1121         [ -  + ]:         28 :         if (init_ohci1394_dma_early)
    1122                 :          0 :                 init_ohci1394_dma_on_all_controllers();
    1123                 :            : #endif
    1124                 :            :         /* Allocate bigger log buffer */
    1125                 :         28 :         setup_log_buf(1);
    1126                 :            : 
    1127         [ +  - ]:         28 :         if (efi_enabled(EFI_BOOT)) {
    1128      [ #  #  # ]:          0 :                 switch (boot_params.secure_boot) {
    1129                 :          0 :                 case efi_secureboot_mode_disabled:
    1130                 :          0 :                         pr_info("Secure boot disabled\n");
    1131                 :          0 :                         break;
    1132                 :          0 :                 case efi_secureboot_mode_enabled:
    1133                 :          0 :                         pr_info("Secure boot enabled\n");
    1134                 :          0 :                         break;
    1135                 :          0 :                 default:
    1136                 :          0 :                         pr_info("Secure boot could not be determined\n");
    1137                 :          0 :                         break;
    1138                 :            :                 }
    1139                 :         28 :         }
    1140                 :            : 
    1141                 :         28 :         reserve_initrd();
    1142                 :            : 
    1143                 :         28 :         acpi_table_upgrade();
    1144                 :            : 
    1145                 :         28 :         vsmp_init();
    1146                 :            : 
    1147                 :         28 :         io_delay_init();
    1148                 :            : 
    1149                 :         28 :         early_platform_quirks();
    1150                 :            : 
    1151                 :            :         /*
    1152                 :            :          * Parse the ACPI tables for possible boot-time SMP configuration.
    1153                 :            :          */
    1154                 :         28 :         acpi_boot_table_init();
    1155                 :            : 
    1156                 :         28 :         early_acpi_boot_init();
    1157                 :            : 
    1158                 :         28 :         initmem_init();
    1159                 :         28 :         dma_contiguous_reserve(max_pfn_mapped << PAGE_SHIFT);
    1160                 :            : 
    1161                 :            :         /*
    1162                 :            :          * Reserve memory for crash kernel after SRAT is parsed so that it
    1163                 :            :          * won't consume hotpluggable memory.
    1164                 :            :          */
    1165                 :         28 :         reserve_crashkernel();
    1166                 :            : 
    1167                 :         28 :         memblock_find_dma_reserve();
    1168                 :            : 
    1169                 :         28 :         if (!early_xdbc_setup_hardware())
    1170                 :            :                 early_xdbc_register_console();
    1171                 :            : 
    1172                 :         28 :         x86_init.paging.pagetable_init();
    1173                 :            : 
    1174                 :         28 :         kasan_init();
    1175                 :            : 
    1176                 :            :         /*
    1177                 :            :          * Sync back kernel address range.
    1178                 :            :          *
    1179                 :            :          * FIXME: Can the later sync in setup_cpu_entry_areas() replace
    1180                 :            :          * this call?
    1181                 :            :          */
    1182                 :         28 :         sync_initial_page_table();
    1183                 :            : 
    1184                 :         28 :         tboot_probe();
    1185                 :            : 
    1186                 :         28 :         map_vsyscall();
    1187                 :            : 
    1188                 :         28 :         generic_apic_probe();
    1189                 :            : 
    1190                 :         28 :         early_quirks();
    1191                 :            : 
    1192                 :            :         /*
    1193                 :            :          * Read APIC and some other early information from ACPI tables.
    1194                 :            :          */
    1195                 :         28 :         acpi_boot_init();
    1196                 :         28 :         sfi_init();
    1197                 :         28 :         x86_dtb_init();
    1198                 :            : 
    1199                 :            :         /*
    1200                 :            :          * get boot-time SMP configuration:
    1201                 :            :          */
    1202                 :         28 :         get_smp_config();
    1203                 :            : 
    1204                 :            :         /*
    1205                 :            :          * Systems w/o ACPI and mptables might not have it mapped the local
    1206                 :            :          * APIC yet, but prefill_possible_map() might need to access it.
    1207                 :            :          */
    1208                 :         28 :         init_apic_mappings();
    1209                 :            : 
    1210                 :         28 :         prefill_possible_map();
    1211                 :            : 
    1212                 :         28 :         init_cpu_to_node();
    1213                 :            : 
    1214                 :         28 :         io_apic_init_mappings();
    1215                 :            : 
    1216                 :         28 :         x86_init.hyper.guest_late_init();
    1217                 :            : 
    1218                 :         28 :         e820__reserve_resources();
    1219                 :         28 :         e820__register_nosave_regions(max_pfn);
    1220                 :            : 
    1221                 :         28 :         x86_init.resources.reserve_resources();
    1222                 :            : 
    1223                 :         28 :         e820__setup_pci_gap();
    1224                 :            : 
    1225                 :            : #ifdef CONFIG_VT
    1226                 :            : #if defined(CONFIG_VGA_CONSOLE)
    1227   [ -  +  -  - ]:         28 :         if (!efi_enabled(EFI_BOOT) || (efi_mem_type(0xa0000) != EFI_CONVENTIONAL_MEMORY))
    1228                 :         28 :                 conswitchp = &vga_con;
    1229                 :            : #endif
    1230                 :            : #endif
    1231                 :         28 :         x86_init.oem.banner();
    1232                 :            : 
    1233                 :         28 :         x86_init.timers.wallclock_init();
    1234                 :            : 
    1235                 :         28 :         mcheck_init();
    1236                 :            : 
    1237                 :         28 :         register_refined_jiffies(CLOCK_TICK_RATE);
    1238                 :            : 
    1239                 :            : #ifdef CONFIG_EFI
    1240         [ -  + ]:         28 :         if (efi_enabled(EFI_BOOT))
    1241                 :          0 :                 efi_apply_memmap_quirks();
    1242                 :            : #endif
    1243                 :            : 
    1244                 :         28 :         unwind_init();
    1245                 :         28 : }
    1246                 :            : 
    1247                 :            : #ifdef CONFIG_X86_32
    1248                 :            : 
    1249                 :            : static struct resource video_ram_resource = {
    1250                 :            :         .name   = "Video RAM area",
    1251                 :            :         .start  = 0xa0000,
    1252                 :            :         .end    = 0xbffff,
    1253                 :            :         .flags  = IORESOURCE_BUSY | IORESOURCE_MEM
    1254                 :            : };
    1255                 :            : 
    1256                 :            : void __init i386_reserve_resources(void)
    1257                 :            : {
    1258                 :            :         request_resource(&iomem_resource, &video_ram_resource);
    1259                 :            :         reserve_standard_io_resources();
    1260                 :            : }
    1261                 :            : 
    1262                 :            : #endif /* CONFIG_X86_32 */
    1263                 :            : 
    1264                 :            : static struct notifier_block kernel_offset_notifier = {
    1265                 :            :         .notifier_call = dump_kernel_offset
    1266                 :            : };
    1267                 :            : 
    1268                 :         28 : static int __init register_kernel_offset_dumper(void)
    1269                 :            : {
    1270                 :         28 :         atomic_notifier_chain_register(&panic_notifier_list,
    1271                 :            :                                         &kernel_offset_notifier);
    1272                 :         28 :         return 0;
    1273                 :            : }
    1274                 :            : __initcall(register_kernel_offset_dumper);

Generated by: LCOV version 1.14