Minor - simplify add_e820() function.
authorKevin O'Connor <kevin@koconnor.net>
Mon, 27 Apr 2009 01:25:53 +0000 (21:25 -0400)
committerKevin O'Connor <kevin@koconnor.net>
Mon, 27 Apr 2009 01:25:53 +0000 (21:25 -0400)
src/memmap.c

index 5b7eba5f3514f7a7a918a891013678593b509cb9..49f129bd0adfa17749fbc2762eb3ea44e3f71f81 100644 (file)
@@ -72,26 +72,20 @@ add_e820(u64 start, u64 size, u32 type)
             continue;
         // Found position - check if an existing item needs to be split.
         if (start > e->start) {
-            e->size = start - e->start;
-            i++;
-            if (end < e_end)
-                // Need to split existing item
-                insert_e820(i, end, e_end - end, e->type);
             if (type == e->type) {
                 // Same type - merge them.
                 size += start - e->start;
                 start = e->start;
-                i--;
-                remove_e820(i);
+            } else {
+                // Split existing item.
+                e->size = start - e->start;
+                i++;
+                if (e_end > end)
+                    insert_e820(i, end, e_end - end, e->type);
             }
         }
         break;
     }
-    // Insert new item.
-    if (type != E820_HOLE) {
-        insert_e820(i, start, size, type);
-        i++;
-    }
     // Remove/adjust existing items that are overlapping.
     while (i<e820_count) {
         struct e820entry *e = &e820_list[i];
@@ -106,14 +100,17 @@ add_e820(u64 start, u64 size, u32 type)
         }
         // Not completely overlapped - adjust its start.
         e->start = end;
-        e->size = e_end - e->start;
+        e->size = e_end - end;
         if (type == e->type) {
             // Same type - merge them.
-            (e-1)->size += e->size;
+            size += e->size;
             remove_e820(i);
         }
         break;
     }
+    // Insert new item.
+    if (type != E820_HOLE)
+        insert_e820(i, start, size, type);
     //dump_map();
 }