[haiku-commits] r36951 - in haiku/trunk: headers/private/kernel/boot src/system/boot/loader src/system/boot/platform/atari_m68k src/system/boot/platform/bios_ia32

  • From: ingo_weinhold@xxxxxx
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Thu, 27 May 2010 19:08:47 +0200 (CEST)

Author: bonefish
Date: 2010-05-27 19:08:47 +0200 (Thu, 27 May 2010)
New Revision: 36951
Changeset: http://dev.haiku-os.org/changeset/36951/haiku

Modified:
   haiku/trunk/headers/private/kernel/boot/addr_range.h
   haiku/trunk/src/system/boot/loader/kernel_args.cpp
   haiku/trunk/src/system/boot/platform/atari_m68k/mmu.cpp
   haiku/trunk/src/system/boot/platform/bios_ia32/mmu.cpp
Log:
Added shared sort_[physical_]address_ranges() to avoid code duplication. Also
fixes the m68k build.


Modified: haiku/trunk/headers/private/kernel/boot/addr_range.h
===================================================================
--- haiku/trunk/headers/private/kernel/boot/addr_range.h        2010-05-27 
15:53:35 UTC (rev 36950)
+++ haiku/trunk/headers/private/kernel/boot/addr_range.h        2010-05-27 
17:08:47 UTC (rev 36951)
@@ -34,6 +34,7 @@
        size_t size, addr_t* _rangeBase);
 bool is_address_range_covered(addr_range* ranges, uint32 numRanges, addr_t 
base,
        size_t size);
+void sort_address_ranges(addr_range* ranges, uint32 numRanges);
 
 status_t insert_physical_address_range(phys_addr_range* ranges,
        uint32* _numRanges, uint32 maxRanges, phys_addr_t start, phys_size_t 
size);
@@ -43,6 +44,7 @@
        phys_addr_t base, phys_size_t size, phys_addr_t* _rangeBase);
 bool is_physical_address_range_covered(phys_addr_range* ranges,
        uint32 numRanges, phys_addr_t base, phys_size_t size);
+void sort_physical_address_ranges(phys_addr_range* ranges, uint32 numRanges);
 
 status_t insert_physical_memory_range(phys_addr_t start, phys_size_t size);
 status_t insert_physical_allocated_range(phys_addr_t start, phys_size_t size);

Modified: haiku/trunk/src/system/boot/loader/kernel_args.cpp
===================================================================
--- haiku/trunk/src/system/boot/loader/kernel_args.cpp  2010-05-27 15:53:35 UTC 
(rev 36950)
+++ haiku/trunk/src/system/boot/loader/kernel_args.cpp  2010-05-27 17:08:47 UTC 
(rev 36951)
@@ -233,6 +233,28 @@
 }
 
 
+template<typename RangeType>
+static void
+sort_ranges(RangeType* ranges, uint32 count)
+{
+       // TODO: This is a pretty sucky bubble sort implementation!
+       bool done;
+
+       do {
+               done = true;
+               for (uint32 i = 1; i < count; i++) {
+                       if (ranges[i].start < ranges[i - 1].start) {
+                               done = false;
+                               RangeType tempRange;
+                               memcpy(&tempRange, &ranges[i], 
sizeof(RangeType));
+                               memcpy(&ranges[i], &ranges[i - 1], 
sizeof(RangeType));
+                               memcpy(&ranges[i - 1], &tempRange, 
sizeof(RangeType));
+                       }
+               }
+       } while (!done);
+}
+
+
 // #pragma mark -
 
 
@@ -291,6 +313,13 @@
 }
 
 
+void
+sort_address_ranges(addr_range* ranges, uint32 numRanges)
+{
+       sort_ranges(ranges, numRanges);
+}
+
+
 // #pragma mark - phys_addr_range utility functions
 
 
@@ -330,6 +359,13 @@
 }
 
 
+void
+sort_physical_address_ranges(phys_addr_range* ranges, uint32 numRanges)
+{
+       sort_ranges(ranges, numRanges);
+}
+
+
 // #pragma mark - kernel args range functions
 
 

Modified: haiku/trunk/src/system/boot/platform/atari_m68k/mmu.cpp
===================================================================
--- haiku/trunk/src/system/boot/platform/atari_m68k/mmu.cpp     2010-05-27 
15:53:35 UTC (rev 36950)
+++ haiku/trunk/src/system/boot/platform/atari_m68k/mmu.cpp     2010-05-27 
17:08:47 UTC (rev 36951)
@@ -238,27 +238,6 @@
 
 
 static void
-sort_addr_range(addr_range *range, int count)
-{
-       addr_range tempRange;
-       bool done;
-       int i;
-
-       do {
-               done = true;
-               for (i = 1; i < count; i++) {
-                       if (range[i].start < range[i - 1].start) {
-                               done = false;
-                               memcpy(&tempRange, &range[i], 
sizeof(addr_range));
-                               memcpy(&range[i], &range[i - 1], 
sizeof(addr_range));
-                               memcpy(&range[i - 1], &tempRange, 
sizeof(addr_range));
-                       }
-               }
-       } while (!done);
-}
-
-
-static void
 init_page_directory(void)
 {
        TRACE(("init_page_directory\n"));
@@ -524,9 +503,12 @@
        gKernelArgs.num_virtual_allocated_ranges = 1;
 
        // sort the address ranges
-       sort_addr_range(gKernelArgs.physical_memory_range, 
gKernelArgs.num_physical_memory_ranges);
-       sort_addr_range(gKernelArgs.physical_allocated_range, 
gKernelArgs.num_physical_allocated_ranges);
-       sort_addr_range(gKernelArgs.virtual_allocated_range, 
gKernelArgs.num_virtual_allocated_ranges);
+       sort_physical_address_ranges(gKernelArgs.physical_memory_range,
+               gKernelArgs.num_physical_memory_ranges);
+       sort_physical_address_ranges(gKernelArgs.physical_allocated_range,
+               gKernelArgs.num_physical_allocated_ranges);
+       sort_address_ranges(gKernelArgs.virtual_allocated_range,
+               gKernelArgs.num_virtual_allocated_ranges);
 
 #ifdef TRACE_MMU
        {

Modified: haiku/trunk/src/system/boot/platform/bios_ia32/mmu.cpp
===================================================================
--- haiku/trunk/src/system/boot/platform/bios_ia32/mmu.cpp      2010-05-27 
15:53:35 UTC (rev 36950)
+++ haiku/trunk/src/system/boot/platform/bios_ia32/mmu.cpp      2010-05-27 
17:08:47 UTC (rev 36951)
@@ -258,29 +258,6 @@
 }
 
 
-template<typename RangeType>
-static void
-sort_addr_range(RangeType *range, int count)
-{
-       RangeType tempRange;
-       bool done;
-       int i;
-
-       do {
-               done = true;
-               for (i = 1; i < count; i++) {
-                       if (range[i].start < range[i - 1].start) {
-                               done = false;
-                               memcpy(&tempRange, &range[i], 
sizeof(RangeType));
-                               memcpy(&range[i], &range[i - 1], 
sizeof(RangeType));
-                               memcpy(&range[i - 1], &tempRange, 
sizeof(RangeType));
-                       }
-               }
-       } while (!done);
-}
-
-
-
 #ifdef TRACE_MEMORY_MAP
 static const char *
 e820_memory_type(uint32 type)
@@ -601,11 +578,11 @@
        gKernelArgs.num_virtual_allocated_ranges = 1;
 
        // sort the address ranges
-       sort_addr_range(gKernelArgs.physical_memory_range,
+       sort_physical_address_ranges(gKernelArgs.physical_memory_range,
                gKernelArgs.num_physical_memory_ranges);
-       sort_addr_range(gKernelArgs.physical_allocated_range,
+       sort_physical_address_ranges(gKernelArgs.physical_allocated_range,
                gKernelArgs.num_physical_allocated_ranges);
-       sort_addr_range(gKernelArgs.virtual_allocated_range,
+       sort_address_ranges(gKernelArgs.virtual_allocated_range,
                gKernelArgs.num_virtual_allocated_ranges);
 
 #ifdef TRACE_MEMORY_MAP
@@ -706,7 +683,7 @@
                }
 
                // sort the ranges
-               sort_addr_range(gKernelArgs.physical_memory_range,
+               sort_physical_address_ranges(gKernelArgs.physical_memory_range,
                        gKernelArgs.num_physical_memory_ranges);
 
                // On some machines we get several ranges that contain only a 
few pages


Other related posts:

  • » [haiku-commits] r36951 - in haiku/trunk: headers/private/kernel/boot src/system/boot/loader src/system/boot/platform/atari_m68k src/system/boot/platform/bios_ia32 - ingo_weinhold