]> Git Repo - J-linux.git/commitdiff
Merge tag 'efi-core-2020-10-12' of git://git.kernel.org/pub/scm/linux/kernel/git...
authorLinus Torvalds <[email protected]>
Mon, 12 Oct 2020 20:26:49 +0000 (13:26 -0700)
committerLinus Torvalds <[email protected]>
Mon, 12 Oct 2020 20:26:49 +0000 (13:26 -0700)
Pull EFI changes from Ingo Molnar:

 - Preliminary RISC-V enablement - the bulk of it will arrive via the
   RISCV tree.

 - Relax decompressed image placement rules for 32-bit ARM

 - Add support for passing MOK certificate table contents via a config
   table rather than a EFI variable.

 - Add support for 18 bit DIMM row IDs in the CPER records.

 - Work around broken Dell firmware that passes the entire Boot####
   variable contents as the command line

 - Add definition of the EFI_MEMORY_CPU_CRYPTO memory attribute so we
   can identify it in the memory map listings.

 - Don't abort the boot on arm64 if the EFI RNG protocol is available
   but returns with an error

 - Replace slashes with exclamation marks in efivarfs file names

 - Split efi-pstore from the deprecated efivars sysfs code, so we can
   disable the latter on !x86.

 - Misc fixes, cleanups and updates.

* tag 'efi-core-2020-10-12' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: (26 commits)
  efi: mokvar: add missing include of asm/early_ioremap.h
  efi: efivars: limit availability to X86 builds
  efi: remove some false dependencies on CONFIG_EFI_VARS
  efi: gsmi: fix false dependency on CONFIG_EFI_VARS
  efi: efivars: un-export efivars_sysfs_init()
  efi: pstore: move workqueue handling out of efivars
  efi: pstore: disentangle from deprecated efivars module
  efi: mokvar-table: fix some issues in new code
  efi/arm64: libstub: Deal gracefully with EFI_RNG_PROTOCOL failure
  efivarfs: Replace invalid slashes with exclamation marks in dentries.
  efi: Delete deprecated parameter comments
  efi/libstub: Fix missing-prototypes in string.c
  efi: Add definition of EFI_MEMORY_CPU_CRYPTO and ability to report it
  cper,edac,efi: Memory Error Record: bank group/address and chip id
  edac,ghes,cper: Add Row Extension to Memory Error Record
  efi/x86: Add a quirk to support command line arguments on Dell EFI firmware
  efi/libstub: Add efi_warn and *_once logging helpers
  integrity: Load certs from the EFI MOK config table
  integrity: Move import of MokListRT certs to a separate routine
  efi: Support for MOK variable config table
  ...

1  2 
drivers/edac/ghes_edac.c
drivers/firmware/efi/libstub/arm64-stub.c

diff --combined drivers/edac/ghes_edac.c
index dbbefd2798c5675fe537dc793a681c8a9d67111d,8a44f32db849181c0e0e0aa30581ca533d623c6a..a918ca93e4f7d5b914014f8cbf1832f9f8e92fdb
@@@ -4,7 -4,7 +4,7 @@@
   *
   * Copyright (c) 2013 by Mauro Carvalho Chehab
   *
 - * Red Hat Inc. http://www.redhat.com
 + * Red Hat Inc. https://www.redhat.com
   */
  
  #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
@@@ -55,8 -55,6 +55,8 @@@ static DEFINE_SPINLOCK(ghes_lock)
  static bool __read_mostly force_load;
  module_param(force_load, bool, 0);
  
 +static bool system_scanned;
 +
  /* Memory Device - Type 17 of SMBIOS spec */
  struct memdev_dmi_entry {
        u8 type;
@@@ -227,12 -225,14 +227,12 @@@ static void enumerate_dimms(const struc
  
  static void ghes_scan_system(void)
  {
 -      static bool scanned;
 -
 -      if (scanned)
 +      if (system_scanned)
                return;
  
        dmi_walk(enumerate_dimms, &ghes_hw);
  
 -      scanned = true;
 +      system_scanned = true;
  }
  
  void ghes_edac_report_mem_error(int sev, struct cper_sec_mem_err *mem_err)
                p += sprintf(p, "rank:%d ", mem_err->rank);
        if (mem_err->validation_bits & CPER_MEM_VALID_BANK)
                p += sprintf(p, "bank:%d ", mem_err->bank);
-       if (mem_err->validation_bits & CPER_MEM_VALID_ROW)
-               p += sprintf(p, "row:%d ", mem_err->row);
+       if (mem_err->validation_bits & CPER_MEM_VALID_BANK_GROUP)
+               p += sprintf(p, "bank_group:%d ",
+                            mem_err->bank >> CPER_MEM_BANK_GROUP_SHIFT);
+       if (mem_err->validation_bits & CPER_MEM_VALID_BANK_ADDRESS)
+               p += sprintf(p, "bank_address:%d ",
+                            mem_err->bank & CPER_MEM_BANK_ADDRESS_MASK);
+       if (mem_err->validation_bits & (CPER_MEM_VALID_ROW | CPER_MEM_VALID_ROW_EXT)) {
+               u32 row = mem_err->row;
+               row |= cper_get_mem_extension(mem_err->validation_bits, mem_err->extended);
+               p += sprintf(p, "row:%d ", row);
+       }
        if (mem_err->validation_bits & CPER_MEM_VALID_COLUMN)
                p += sprintf(p, "col:%d ", mem_err->column);
        if (mem_err->validation_bits & CPER_MEM_VALID_BIT_POSITION)
                        strcpy(e->label, dimm->label);
                }
        }
+       if (mem_err->validation_bits & CPER_MEM_VALID_CHIP_ID)
+               p += sprintf(p, "chipID: %d ",
+                            mem_err->extended >> CPER_MEM_CHIP_ID_SHIFT);
        if (p > e->location)
                *(p - 1) = '\0';
  
@@@ -508,7 -521,6 +521,7 @@@ int ghes_edac_register(struct ghes *ghe
                if (!force_load && idx < 0)
                        return -ENODEV;
        } else {
 +              force_load = true;
                idx = 0;
        }
  
@@@ -630,14 -642,8 +643,14 @@@ void ghes_edac_unregister(struct ghes *
        struct mem_ctl_info *mci;
        unsigned long flags;
  
 +      if (!force_load)
 +              return;
 +
        mutex_lock(&ghes_reg_mutex);
  
 +      system_scanned = false;
 +      memset(&ghes_hw, 0, sizeof(struct ghes_hw_desc));
 +
        if (!refcount_dec_and_test(&ghes_refcount))
                goto unlock;
  
index fc178398f1acd21cb2d18f91af7eb9df78e66c4b,54b3327ef0089b17e5eb18c74be92d727271da82..22ece1ad68a8f8fd90873cd7882a5352713e4df0
@@@ -50,7 -50,6 +50,6 @@@ efi_status_t handle_kernel_image(unsign
                                 unsigned long *image_size,
                                 unsigned long *reserve_addr,
                                 unsigned long *reserve_size,
-                                unsigned long dram_base,
                                 efi_loaded_image_t *image)
  {
        efi_status_t status;
                        status = efi_get_random_bytes(sizeof(phys_seed),
                                                      (u8 *)&phys_seed);
                        if (status == EFI_NOT_FOUND) {
-                               efi_info("EFI_RNG_PROTOCOL unavailable, no randomness supplied\n");
+                               efi_info("EFI_RNG_PROTOCOL unavailable, KASLR will be disabled\n");
+                               efi_nokaslr = true;
                        } else if (status != EFI_SUCCESS) {
-                               efi_err("efi_get_random_bytes() failed\n");
-                               return status;
+                               efi_err("efi_get_random_bytes() failed (0x%lx), KASLR will be disabled\n",
+                                       status);
+                               efi_nokaslr = true;
                        }
                } else {
                        efi_info("KASLR disabled on kernel command line\n");
@@@ -77,7 -78,7 +78,7 @@@
  
        kernel_size = _edata - _text;
        kernel_memsize = kernel_size + (_end - _edata);
 -      *reserve_size = kernel_memsize + TEXT_OFFSET % min_kimg_align();
 +      *reserve_size = kernel_memsize;
  
        if (IS_ENABLED(CONFIG_RANDOMIZE_BASE) && phys_seed != 0) {
                /*
@@@ -91,7 -92,7 +92,7 @@@
        }
  
        if (status != EFI_SUCCESS) {
 -              if (IS_ALIGNED((u64)_text - TEXT_OFFSET, min_kimg_align())) {
 +              if (IS_ALIGNED((u64)_text, min_kimg_align())) {
                        /*
                         * Just execute from wherever we were loaded by the
                         * UEFI PE/COFF loader if the alignment is suitable.
                }
        }
  
 -      *image_addr = *reserve_addr + TEXT_OFFSET % min_kimg_align();
 +      *image_addr = *reserve_addr;
        memcpy((void *)*image_addr, _text, kernel_size);
  
        return EFI_SUCCESS;
This page took 0.08376 seconds and 4 git commands to generate.