Commit 8c58bf3eec3b8fc8162fe557e9361891c20758f2

Authored by Richard Weinberger
Committed by Matt Fleming
1 parent 3668011d4a

x86,efi: Implement efi_no_storage_paranoia parameter

Using this parameter one can disable the storage_size/2 check if
he is really sure that the UEFI does sane gc and fulfills the spec.

This parameter is useful if a devices uses more than 50% of the
storage by default.
The Intel DQSW67 desktop board is such a sucker for exmaple.

Signed-off-by: Richard Weinberger <richard@nod.at>
Signed-off-by: Matt Fleming <matt.fleming@intel.com>

Showing 2 changed files with 19 additions and 1 deletions Side-by-side Diff

Documentation/kernel-parameters.txt
... ... @@ -788,6 +788,12 @@
788 788 edd= [EDD]
789 789 Format: {"off" | "on" | "skip[mbr]"}
790 790  
  791 + efi_no_storage_paranoia [EFI; X86]
  792 + Using this parameter you can use more than 50% of
  793 + your efi variable storage. Use this parameter only if
  794 + you are really sure that your UEFI does sane gc and
  795 + fulfills the spec otherwise your board may brick.
  796 +
791 797 eisa_irq_edge= [PARISC,HW]
792 798 See header of drivers/parisc/eisa.c.
793 799  
arch/x86/platform/efi/efi.c
... ... @@ -113,7 +113,16 @@
113 113 }
114 114 early_param("add_efi_memmap", setup_add_efi_memmap);
115 115  
  116 +static bool efi_no_storage_paranoia;
116 117  
  118 +static int __init setup_storage_paranoia(char *arg)
  119 +{
  120 + efi_no_storage_paranoia = true;
  121 + return 0;
  122 +}
  123 +early_param("efi_no_storage_paranoia", setup_storage_paranoia);
  124 +
  125 +
117 126 static efi_status_t virt_efi_get_time(efi_time_t *tm, efi_time_cap_t *tc)
118 127 {
119 128 unsigned long flags;
... ... @@ -1137,7 +1146,10 @@
1137 1146 */
1138 1147  
1139 1148 if (!storage_size || size > remaining_size ||
1140   - (max_size && size > max_size) ||
  1149 + (max_size && size > max_size))
  1150 + return EFI_OUT_OF_RESOURCES;
  1151 +
  1152 + if (!efi_no_storage_paranoia &&
1141 1153 ((active_size + size + VAR_METADATA_SIZE > storage_size / 2) &&
1142 1154 (remaining_size - size < storage_size / 2)))
1143 1155 return EFI_OUT_OF_RESOURCES;