diff options
author | Matt Fleming <matt.fleming@intel.com> | 2013-07-16 22:16:11 +0100 |
---|---|---|
committer | Matt Fleming <matt.fleming@intel.com> | 2013-07-17 18:29:16 +0100 |
commit | ba638fd9bf72b0c786c88909014136cfa641a147 (patch) | |
tree | 0d4b018660a4010fc13a3f320e8b701ea78621c6 | |
parent | a1331f8d04dbeb06d6f6c4c1fc736a50b0c0299a (diff) | |
download | syslinux-ba638fd9bf72b0c786c88909014136cfa641a147.tar.gz |
movebits: Add SMT_TERMINAL - a last resort region type
Some memory regions are usable, but only as a last resort just before we
hand over control to a kernel image. Add the necessary movebits
infrastructure to use these regions when all other options have been
exhausted.
Signed-off-by: Matt Fleming <matt.fleming@intel.com>
-rw-r--r-- | com32/include/syslinux/movebits.h | 1 | ||||
-rw-r--r-- | com32/lib/syslinux/movebits.c | 2 | ||||
-rw-r--r-- | com32/lib/syslinux/zonelist.c | 2 |
3 files changed, 3 insertions, 2 deletions
diff --git a/com32/include/syslinux/movebits.h b/com32/include/syslinux/movebits.h index feeab3aa..d5c903a0 100644 --- a/com32/include/syslinux/movebits.h +++ b/com32/include/syslinux/movebits.h @@ -35,6 +35,7 @@ enum syslinux_memmap_types { SMT_RESERVED, /* Unusable memory */ SMT_ALLOC, /* Memory allocated by user */ SMT_ZERO, /* Memory that should be zeroed */ + SMT_TERMINAL, /* Memory to be used as a last resort */ }; struct syslinux_memmap { diff --git a/com32/lib/syslinux/movebits.c b/com32/lib/syslinux/movebits.c index 7a05f3c1..8ffdc630 100644 --- a/com32/lib/syslinux/movebits.c +++ b/com32/lib/syslinux/movebits.c @@ -160,7 +160,7 @@ static const struct syslinux_memmap *is_free_zone(const struct syslinux_memmap if (list->start <= start) { if (llast >= last) { /* Chunk has a single, well-defined type */ - if (list->type == SMT_FREE) { + if (list->type == SMT_FREE || list->type == SMT_TERMINAL) { dprintf("F: 0x%08x bytes at 0x%08x\n", list->next->start, list->start); return list; /* It's free */ diff --git a/com32/lib/syslinux/zonelist.c b/com32/lib/syslinux/zonelist.c index 7cd83642..a6de1d85 100644 --- a/com32/lib/syslinux/zonelist.c +++ b/com32/lib/syslinux/zonelist.c @@ -300,7 +300,7 @@ int syslinux_memmap_find(struct syslinux_memmap *mmap, return 0; type = syslinux_memmap_type(mmap, *base, size); - if (type == SMT_FREE) + if (type == SMT_FREE || type == SMT_TERMINAL) return 0; if (!relocate) { |