mirror of
https://github.com/wichtounet/thor-os.git
synced 2025-09-14 06:56:51 -04:00
Protect kalloc
This commit is contained in:
parent
78554b3242
commit
ae0b2463a5
@ -10,6 +10,7 @@
|
||||
#include "physical_allocator.hpp"
|
||||
#include "paging.hpp"
|
||||
#include "e820.hpp"
|
||||
#include "mutex.hpp"
|
||||
|
||||
#include "fs/sysfs.hpp"
|
||||
|
||||
@ -20,6 +21,8 @@ namespace {
|
||||
const bool DEBUG_MALLOC = false;
|
||||
const bool TRACE_MALLOC = false;
|
||||
|
||||
mutex lock;
|
||||
|
||||
size_t _used_memory;
|
||||
size_t _allocated_memory;
|
||||
|
||||
@ -320,6 +323,18 @@ std::string sysfs_used(){
|
||||
return std::to_string(kalloc::used_memory());
|
||||
}
|
||||
|
||||
void malloc_lock(){
|
||||
if(scheduler::is_started()){
|
||||
lock.acquire();
|
||||
}
|
||||
}
|
||||
|
||||
void malloc_unlock(){
|
||||
if(scheduler::is_started()){
|
||||
lock.release();
|
||||
}
|
||||
}
|
||||
|
||||
} //end of anonymous namespace
|
||||
|
||||
void kalloc::init(){
|
||||
@ -334,9 +349,13 @@ void kalloc::finalize(){
|
||||
sysfs::set_dynamic_value("/sys/", "/memory/dynamic/free", &sysfs_free);
|
||||
sysfs::set_dynamic_value("/sys/", "/memory/dynamic/used", &sysfs_used);
|
||||
sysfs::set_dynamic_value("/sys/", "/memory/dynamic/allocated", &sysfs_allocated);
|
||||
|
||||
lock.init();
|
||||
}
|
||||
|
||||
void* kalloc::k_malloc(uint64_t bytes){
|
||||
malloc_lock();
|
||||
|
||||
auto current = malloc_head->next();
|
||||
|
||||
//Try not to create too small blocks
|
||||
@ -417,10 +436,14 @@ void* kalloc::k_malloc(uint64_t bytes){
|
||||
printf("m %u(%u) %h ", bytes, current->size(), block_start);
|
||||
}
|
||||
|
||||
malloc_unlock();
|
||||
|
||||
return reinterpret_cast<void*>(block_start);
|
||||
}
|
||||
|
||||
void kalloc::k_free(void* block){
|
||||
malloc_lock();
|
||||
|
||||
auto free_header = reinterpret_cast<malloc_header_chunk*>(
|
||||
reinterpret_cast<uintptr_t>(block) - sizeof(malloc_header_chunk));
|
||||
|
||||
@ -442,6 +465,8 @@ void kalloc::k_free(void* block){
|
||||
insert_after(malloc_head, free_header);
|
||||
|
||||
debug_malloc<DEBUG_MALLOC>("after free");
|
||||
|
||||
malloc_unlock();
|
||||
}
|
||||
|
||||
size_t kalloc::allocated_memory(){
|
||||
|
Loading…
x
Reference in New Issue
Block a user