|
@@ -402,19 +402,22 @@ pmm_scan:
|
402
|
402
|
/* Shrink ROM */
|
403
|
403
|
movb shrunk_rom_size, %al
|
404
|
404
|
movb %al, romheader_size
|
405
|
|
-1: /* Allocate decompression PMM block. Round up the size to the
|
406
|
|
- * nearest 128kB and use the size within the PMM handle; this
|
407
|
|
- * allows the same decompression area to be shared between
|
408
|
|
- * multiple iPXE ROMs even with differing build IDs
|
|
405
|
+1: /* Allocate decompression PMM block. Allow 4kB for page
|
|
406
|
+ * alignment and round up the size to the nearest 128kB, then
|
|
407
|
+ * use the size within the PMM handle; this allows the same
|
|
408
|
+ * decompression area to be shared between multiple iPXE ROMs
|
|
409
|
+ * even with differing build IDs
|
409
|
410
|
*/
|
410
|
411
|
movl $_textdata_memsz_pgh, %ecx
|
411
|
|
- addl $0x00001fff, %ecx
|
412
|
|
- andl $0xffffe000, %ecx
|
|
412
|
+ addl $( 0x00000100 /* 4kB */ + 0x00001fff /* 128kB - 1 */ ), %ecx
|
|
413
|
+ andl $( 0xffffe000 /* ~( 128kB - 1 ) */ ), %ecx
|
413
|
414
|
movl %ecx, %ebx
|
414
|
415
|
shrw $12, %bx
|
415
|
416
|
orl $PMM_HANDLE_BASE_DECOMPRESS_TO, %ebx
|
416
|
417
|
movw $get_pmm_decompress_to, %bp
|
417
|
418
|
call get_pmm
|
|
419
|
+ addl $( 0x00000fff /* 4kB - 1 */ ), %esi
|
|
420
|
+ andl $( 0xfffff000 /* ~( 4kB - 1 ) */ ), %esi
|
418
|
421
|
movl %esi, decompress_to
|
419
|
422
|
/* Restore registers */
|
420
|
423
|
popal
|