summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/arch/i386/firmware/pcbios/memmap.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/src/arch/i386/firmware/pcbios/memmap.c b/src/arch/i386/firmware/pcbios/memmap.c
index 01080c7b8..493d2c201 100644
--- a/src/arch/i386/firmware/pcbios/memmap.c
+++ b/src/arch/i386/firmware/pcbios/memmap.c
@@ -156,6 +156,7 @@ unsigned int extmemsize ( void ) {
*/
static int meme820 ( struct memory_map *memmap ) {
struct memory_region *region = memmap->regions;
+ struct memory_region *prev_region = NULL;
uint32_t next = 0;
uint32_t smap;
size_t size;
@@ -238,8 +239,15 @@ static int meme820 ( struct memory_map *memmap ) {
region->start = e820buf.start;
region->end = e820buf.start + e820buf.len;
- region++;
- memmap->count++;
+
+ /* Check for adjacent regions and merge them */
+ if ( prev_region && ( region->start == prev_region->end ) ) {
+ prev_region->end = region->end;
+ } else {
+ prev_region = region;
+ region++;
+ memmap->count++;
+ }
if ( memmap->count >= ( sizeof ( memmap->regions ) /
sizeof ( memmap->regions[0] ) ) ) {