mirror of
https://github.com/xcat2/xNBA.git
synced 2024-11-29 12:49:49 +00:00
Ensure that empty e820 regions are skipped even at the end of the
memory map. (We achieve this by setting CF on the last entry if it is zero-length; this avoids the need to look ahead to see at each entry if the *next* entry would be both the last entry and zero-length). This fixes the "0kB base memory" error message upon starting Windows 2003 on a SunFire X2100.
This commit is contained in:
parent
8069598a99
commit
35ee7e4479
@ -361,26 +361,33 @@ int15_e820:
|
||||
pushl %edx
|
||||
call split_e820
|
||||
pushfw
|
||||
/* Skip empty region checking if we've reached the end of the
|
||||
* map or hit an error, to avoid a potential endless loop.
|
||||
*/
|
||||
jc 1f
|
||||
testl %ebx, %ebx
|
||||
jz 1f
|
||||
/* Check for an empty region */
|
||||
/* If we've hit an error, exit immediately */
|
||||
jc 99f
|
||||
/* If region is non-empty, return this region */
|
||||
pushl %eax
|
||||
movl %es:8(%di), %eax
|
||||
orl %es:12(%di), %eax
|
||||
popl %eax
|
||||
jnz 1f
|
||||
/* Strip empty regions out of the returned map */
|
||||
jnz 99f
|
||||
/* Region is empty. If this is not the end of the map,
|
||||
* skip over this region.
|
||||
*/
|
||||
testl %ebx, %ebx
|
||||
jz 1f
|
||||
popfw
|
||||
popl %edx
|
||||
popl %ecx
|
||||
popl %eax
|
||||
jmp int15_e820
|
||||
/* Restore flags from original INT 15,e820 call and return */
|
||||
1: popfw
|
||||
1: /* Region is empty and this is the end of the map. Return
|
||||
* with CF set to avoid placing an empty region at the end of
|
||||
* the map.
|
||||
*/
|
||||
popfw
|
||||
stc
|
||||
pushfw
|
||||
99: /* Restore flags from original INT 15,e820 call and return */
|
||||
popfw
|
||||
addr32 leal 12(%esp), %esp /* avoid changing flags */
|
||||
lret $2
|
||||
.size int15_e820, . - int15_e820
|
||||
|
Loading…
Reference in New Issue
Block a user