X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=Kernel%2Fheap.c;h=5593c68f70f91b14fa61e6eb6f434818e8ebb09c;hb=1baac59e0cea8985a60093e7415a1796bad138ae;hp=1a42e3513691efd52480ed19b0a1342116b7a315;hpb=f9c22b799cec923297c98b9ae5e59c4b518fd123;p=tpg%2Facess2.git diff --git a/Kernel/heap.c b/Kernel/heap.c index 1a42e351..5593c68f 100644 --- a/Kernel/heap.c +++ b/Kernel/heap.c @@ -49,7 +49,6 @@ void Heap_Install(void) } /** - * \fn void *Heap_Extend(int Bytes) * \brief Extend the size of the heap */ void *Heap_Extend(int Bytes) @@ -97,7 +96,6 @@ void *Heap_Extend(int Bytes) } /** - * \fn void *Heap_Merge(tHeapHead *Head) * \brief Merges two ajacent heap blocks */ void *Heap_Merge(tHeapHead *Head) @@ -142,10 +140,9 @@ void *Heap_Merge(tHeapHead *Head) } /** - * \brief Allocate memory from the heap * \param File Allocating source file * \param Line Source line - * \param Bytes Size of region to allocate + * \param __Bytes Size of region to allocate */ void *Heap_Allocate(const char *File, int Line, size_t __Bytes) { @@ -216,7 +213,8 @@ void *Heap_Allocate(const char *File, int Line, size_t __Bytes) head->AllocateTime = now(); Mutex_Release(&glHeap); // Release spinlock #if DEBUG_TRACE - Debug("[Heap ] Malloc'd %p (%i bytes), returning to %p", head->Data, head->Size, __builtin_return_address(0)); + Debug("[Heap ] Malloc'd %p (%i bytes), returning to %p", + head->Data, head->Size, __builtin_return_address(0)); #endif return head->Data; } @@ -285,7 +283,6 @@ void *Heap_Allocate(const char *File, int Line, size_t __Bytes) } /** - * \fn void Heap_Deallocate(void *Ptr) * \brief Free an allocated memory block */ void Heap_Deallocate(void *Ptr) @@ -310,8 +307,8 @@ void Heap_Deallocate(void *Ptr) // Sanity check if((Uint)Ptr < (Uint)gHeapStart || (Uint)Ptr > (Uint)gHeapEnd) { - Log_Warning("Heap", "free - Passed a non-heap address (%p < %p < %p)\n", - gHeapStart, Ptr, gHeapEnd); + Log_Warning("Heap", "free - Passed a non-heap address by %p (%p < %p < %p)\n", + __builtin_return_address(0), gHeapStart, Ptr, gHeapEnd); return; } @@ -520,8 +517,8 @@ void Heap_Dump(void) { foot = (void*)( (Uint)head + head->Size - sizeof(tHeapFoot) ); #if VERBOSE_DUMP - Log_Log("Heap", "%p (0x%P): 0x%08lx (%i) %4C", - head, MM_GetPhysAddr((Uint)head), head->Size, head->ValidSize, &head->Magic); + Log_Log("Heap", "%p (0x%P): 0x%08x (%i) %4C", + head, MM_GetPhysAddr((tVAddr)head), head->Size, head->ValidSize, &head->Magic); Log_Log("Heap", "%p %4C", foot->Head, &foot->Magic); if(head->File) { Log_Log("Heap", "%sowned by %s:%i", @@ -573,7 +570,7 @@ void Heap_Dump(void) Log_Log("Heap", "%p (%P): 0x%08lx %i %4C", head, MM_GetPhysAddr((Uint)head), head->Size, head->ValidSize, &head->Magic); if(foot) - Log_Log("Heap", "Foot %p = {Head:%p,Magic=:%4C}", foot, foot->Head, &foot->Magic); + Log_Log("Heap", "Foot %p = {Head:%p,Magic:%4C}", foot, foot->Head, &foot->Magic); if(head->File) { Log_Log("Heap", "%sowned by %s:%i", (head->Magic==MAGIC_FREE?"was ":""), head->File, head->Line); @@ -687,7 +684,10 @@ void Heap_Stats(void) else frag = 0; Log_Log("Heap", "%i.%02i%% Heap Fragmentation", frag/100, frag%100); - avgAlloc = (totalBytes-freeBytes)/(nBlocks-nFree); + if(nBlocks <= nFree) + avgAlloc = 0; + else + avgAlloc = (totalBytes-freeBytes)/(nBlocks-nFree); if(avgAlloc != 0) overhead = (sizeof(tHeapFoot)+sizeof(tHeapHead))*10000/avgAlloc; else