Parcourir la source

[romprefix] Round up PMM allocation sizes to nearest 4kB

Some AMI BIOSes apparently break in exciting ways when asked for PMM
allocations for sizes that are not multiples of 4kB.

Fix by rounding up the image source area to the nearest 4kB.  (The
temporary decompression area is already rounded up to the nearest
128kB, to facilitate sharing between multiple iPXE ROMs.)

Reported-by: Itay Gazit <itayg@mellanox.com>
Signed-off-by: Michael Brown <mcb30@ipxe.org>
tags/v1.20.1
Michael Brown il y a 11 ans
Parent
révision
1f88e9c8ea
1 fichiers modifiés avec 5 ajouts et 1 suppressions
  1. 5
    1
      src/arch/i386/prefix/romprefix.S

+ 5
- 1
src/arch/i386/prefix/romprefix.S Voir le fichier

@@ -352,9 +352,13 @@ pmm_scan:
352 352
 	call	print_message
353 353
 	/* We have PMM and so a 1kB stack: preserve whole registers */
354 354
 	pushal
355
-	/* Allocate image source PMM block */
355
+	/* Allocate image source PMM block.  Round up the size to the
356
+	 * nearest 4kB (8 512-byte sectors) to work around AMI BIOS bugs.
357
+	 */
356 358
 	movzbl	romheader_size, %ecx
357 359
 	addw	extra_size, %cx
360
+	addw	$0x0007, %cx	/* Round up to multiple of 8 512-byte sectors */
361
+	andw	$0xfff8, %cx
358 362
 	shll	$5, %ecx
359 363
 	movl	$PMM_HANDLE_BASE_IMAGE_SOURCE, %ebx
360 364
 	movw	$get_pmm_image_source, %bp

Chargement…
Annuler
Enregistrer