@@ -199,9 +199,7 @@ static __init void reserve_regions(void)
199
199
if (is_normal_ram (md ))
200
200
early_init_dt_add_memory_arch (paddr , size );
201
201
202
- if (is_reserve_region (md ) ||
203
- md -> type == EFI_BOOT_SERVICES_CODE ||
204
- md -> type == EFI_BOOT_SERVICES_DATA ) {
202
+ if (is_reserve_region (md )) {
205
203
memblock_reserve (paddr , size );
206
204
if (uefi_debug )
207
205
pr_cont ("*" );
@@ -214,123 +212,6 @@ static __init void reserve_regions(void)
214
212
set_bit (EFI_MEMMAP , & efi .flags );
215
213
}
216
214
217
-
218
- static u64 __init free_one_region (u64 start , u64 end )
219
- {
220
- u64 size = end - start ;
221
-
222
- if (uefi_debug )
223
- pr_info (" EFI freeing: 0x%012llx-0x%012llx\n" , start , end - 1 );
224
-
225
- free_bootmem_late (start , size );
226
- return size ;
227
- }
228
-
229
- static u64 __init free_region (u64 start , u64 end )
230
- {
231
- u64 map_start , map_end , total = 0 ;
232
-
233
- if (end <= start )
234
- return total ;
235
-
236
- map_start = (u64 )memmap .phys_map ;
237
- map_end = PAGE_ALIGN (map_start + (memmap .map_end - memmap .map ));
238
- map_start &= PAGE_MASK ;
239
-
240
- if (start < map_end && end > map_start ) {
241
- /* region overlaps UEFI memmap */
242
- if (start < map_start )
243
- total += free_one_region (start , map_start );
244
-
245
- if (map_end < end )
246
- total += free_one_region (map_end , end );
247
- } else
248
- total += free_one_region (start , end );
249
-
250
- return total ;
251
- }
252
-
253
- static void __init free_boot_services (void )
254
- {
255
- u64 total_freed = 0 ;
256
- u64 keep_end , free_start , free_end ;
257
- efi_memory_desc_t * md ;
258
-
259
- /*
260
- * If kernel uses larger pages than UEFI, we have to be careful
261
- * not to inadvertantly free memory we want to keep if there is
262
- * overlap at the kernel page size alignment. We do not want to
263
- * free is_reserve_region() memory nor the UEFI memmap itself.
264
- *
265
- * The memory map is sorted, so we keep track of the end of
266
- * any previous region we want to keep, remember any region
267
- * we want to free and defer freeing it until we encounter
268
- * the next region we want to keep. This way, before freeing
269
- * it, we can clip it as needed to avoid freeing memory we
270
- * want to keep for UEFI.
271
- */
272
-
273
- keep_end = 0 ;
274
- free_start = 0 ;
275
-
276
- for_each_efi_memory_desc (& memmap , md ) {
277
- u64 paddr , npages , size ;
278
-
279
- if (is_reserve_region (md )) {
280
- /*
281
- * We don't want to free any memory from this region.
282
- */
283
- if (free_start ) {
284
- /* adjust free_end then free region */
285
- if (free_end > md -> phys_addr )
286
- free_end -= PAGE_SIZE ;
287
- total_freed += free_region (free_start , free_end );
288
- free_start = 0 ;
289
- }
290
- keep_end = md -> phys_addr + (md -> num_pages << EFI_PAGE_SHIFT );
291
- continue ;
292
- }
293
-
294
- if (md -> type != EFI_BOOT_SERVICES_CODE &&
295
- md -> type != EFI_BOOT_SERVICES_DATA ) {
296
- /* no need to free this region */
297
- continue ;
298
- }
299
-
300
- /*
301
- * We want to free memory from this region.
302
- */
303
- paddr = md -> phys_addr ;
304
- npages = md -> num_pages ;
305
- memrange_efi_to_native (& paddr , & npages );
306
- size = npages << PAGE_SHIFT ;
307
-
308
- if (free_start ) {
309
- if (paddr <= free_end )
310
- free_end = paddr + size ;
311
- else {
312
- total_freed += free_region (free_start , free_end );
313
- free_start = paddr ;
314
- free_end = paddr + size ;
315
- }
316
- } else {
317
- free_start = paddr ;
318
- free_end = paddr + size ;
319
- }
320
- if (free_start < keep_end ) {
321
- free_start += PAGE_SIZE ;
322
- if (free_start >= free_end )
323
- free_start = 0 ;
324
- }
325
- }
326
- if (free_start )
327
- total_freed += free_region (free_start , free_end );
328
-
329
- if (total_freed )
330
- pr_info ("Freed 0x%llx bytes of EFI boot services memory" ,
331
- total_freed );
332
- }
333
-
334
215
void __init efi_init (void )
335
216
{
336
217
struct efi_fdt_params params ;
@@ -402,8 +283,6 @@ static int __init arm64_enable_runtime_services(void)
402
283
}
403
284
set_bit (EFI_SYSTEM_TABLES , & efi .flags );
404
285
405
- free_boot_services ();
406
-
407
286
if (!efi_enabled (EFI_VIRTMAP )) {
408
287
pr_err ("No UEFI virtual mapping was installed -- runtime services will not be available\n" );
409
288
return -1 ;
0 commit comments