|
@@ -156,6 +156,7 @@ unsigned int extmemsize ( void ) {
|
156
|
156
|
*/
|
157
|
157
|
static int meme820 ( struct memory_map *memmap ) {
|
158
|
158
|
struct memory_region *region = memmap->regions;
|
|
159
|
+ struct memory_region *prev_region = NULL;
|
159
|
160
|
uint32_t next = 0;
|
160
|
161
|
uint32_t smap;
|
161
|
162
|
size_t size;
|
|
@@ -238,8 +239,15 @@ static int meme820 ( struct memory_map *memmap ) {
|
238
|
239
|
|
239
|
240
|
region->start = e820buf.start;
|
240
|
241
|
region->end = e820buf.start + e820buf.len;
|
241
|
|
- region++;
|
242
|
|
- memmap->count++;
|
|
242
|
+
|
|
243
|
+ /* Check for adjacent regions and merge them */
|
|
244
|
+ if ( prev_region && ( region->start == prev_region->end ) ) {
|
|
245
|
+ prev_region->end = region->end;
|
|
246
|
+ } else {
|
|
247
|
+ prev_region = region;
|
|
248
|
+ region++;
|
|
249
|
+ memmap->count++;
|
|
250
|
+ }
|
243
|
251
|
|
244
|
252
|
if ( memmap->count >= ( sizeof ( memmap->regions ) /
|
245
|
253
|
sizeof ( memmap->regions[0] ) ) ) {
|