Commit 8c58bf3eec3b8fc8162fe557e9361891c20758f2
Committed by
Matt Fleming
1 parent
3668011d4a
Exists in
master
and in
20 other branches
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; |