pmm: use tmp zone on oom

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
This commit is contained in:
Gerd Hoffmann 2018-06-15 12:07:34 +02:00
parent 7bf9ffff1a
commit a638acfa4c
1 changed files with 13 additions and 0 deletions

View File

@ -8,6 +8,7 @@
#include "config.h" // CONFIG_*
#include "malloc.h" // _malloc
#include "output.h" // dprintf
#include "e820map.h" // struct e820entry
#include "std/pmm.h" // PMM_SIGNATURE
#include "string.h" // checksum
#include "util.h" // pmm_init
@ -75,6 +76,18 @@ handle_pmm00(u16 *args)
break;
case 2:
data = malloc_palloc(highzone, size, align);
if (!data && (flags & 8)) {
/*
* We are out of meory. So go allocate from the (big)
* ZoneTmpHigh instead and reserve the block in the e820
* map so the OS will not override it. That way we can
* handle big permanent allocations without needing a big
* ZoneHigh.
*/
data = malloc_palloc(&ZoneTmpHigh, size, align);
if (data)
e820_add(data, size, E820_RESERVED);
}
break;
case 3: {
data = malloc_palloc(lowzone, size, align);