From 252f46692bee6acdd0060b7df01d7834c83eee94 Mon Sep 17 00:00:00 2001 From: Baptiste Wicht Date: Sat, 23 Jul 2016 23:39:40 +0200 Subject: [PATCH] Better error handling --- kernel/src/physical_allocator.cpp | 11 +++++++++-- kernel/src/thor_acpi.cpp | 8 ++++++-- kernel/src/virtual_allocator.cpp | 9 ++++++++- 3 files changed, 23 insertions(+), 5 deletions(-) diff --git a/kernel/src/physical_allocator.cpp b/kernel/src/physical_allocator.cpp index ac12b10b..fd4936af 100644 --- a/kernel/src/physical_allocator.cpp +++ b/kernel/src/physical_allocator.cpp @@ -10,6 +10,7 @@ #include "paging.hpp" #include "buddy_allocator.hpp" #include "assert.hpp" +#include "logging.hpp" #include "fs/sysfs.hpp" @@ -153,11 +154,17 @@ void physical_allocator::finalize(){ } size_t physical_allocator::allocate(size_t blocks){ - thor_assert(blocks < free() / paging::PAGE_SIZE, "Not enough virtual memory"); + thor_assert(blocks < free() / paging::PAGE_SIZE, "Not enough physical memory"); allocated_memory += buddy_type::level_size(blocks) * unit; - return allocator.allocate(blocks); + auto phys = allocator.allocate(blocks); + + if(!phys){ + logging::logf(logging::log_level::ERROR, "palloc: Unable to allocate %u blocks\n", size_t(blocks)); + } + + return phys; } void physical_allocator::free(size_t address, size_t blocks){ diff --git a/kernel/src/thor_acpi.cpp b/kernel/src/thor_acpi.cpp index 1080a869..4e46a379 100644 --- a/kernel/src/thor_acpi.cpp +++ b/kernel/src/thor_acpi.cpp @@ -222,8 +222,12 @@ void AcpiOsWaitEventsComplete(){ ACPI_PHYSICAL_ADDRESS AcpiOsGetRootPointer(){ ACPI_PHYSICAL_ADDRESS root_pointer; root_pointer = 0; - AcpiFindRootPointer(&root_pointer); - logging::logf(logging::log_level::TRACE, "acpica: Root pointer at physical address %h\n", size_t(root_pointer)); + auto status = AcpiFindRootPointer(&root_pointer); + if(ACPI_FAILURE(status)){ + logging::logf(logging::log_level::ERROR, "acpica: Unable to find ACPI root pointer: error: %u\n", size_t(status)); + } else { + logging::logf(logging::log_level::TRACE, "acpica: ACPI Root pointer found at physical address %h\n", size_t(root_pointer)); + } return root_pointer; } diff --git a/kernel/src/virtual_allocator.cpp b/kernel/src/virtual_allocator.cpp index f7af5e61..39cee942 100644 --- a/kernel/src/virtual_allocator.cpp +++ b/kernel/src/virtual_allocator.cpp @@ -11,6 +11,7 @@ #include "paging.hpp" #include "buddy_allocator.hpp" #include "assert.hpp" +#include "logging.hpp" #include "fs/sysfs.hpp" @@ -85,7 +86,13 @@ size_t virtual_allocator::allocate(size_t pages){ allocated_pages += buddy_type::level_size(pages); - return allocator.allocate(pages); + auto virt = allocator.allocate(pages); + + if(!virt){ + logging::logf(logging::log_level::ERROR, "valloc: Unable to allocate %u pages\n", size_t(pages)); + } + + return virt; } void virtual_allocator::free(size_t address, size_t pages){