Compare commits
2 Commits
cedcfa9c63
...
2e24e09146
Author | SHA1 | Date | |
---|---|---|---|
2e24e09146 | |||
a32590ff8a |
@ -105,10 +105,12 @@ namespace MemoryManager
|
|||||||
// there's no point in continuing.
|
// there's no point in continuing.
|
||||||
auto bitmap_pages = g_frame_bitmap.size_in_bytes() / ARCH_PAGE_SIZE;
|
auto bitmap_pages = g_frame_bitmap.size_in_bytes() / ARCH_PAGE_SIZE;
|
||||||
|
|
||||||
auto virtual_bitmap_base = KernelVM::alloc_several_pages(bitmap_pages).release_value();
|
auto virtual_bitmap_base =
|
||||||
|
KernelVM::alloc_several_pages(bitmap_pages)
|
||||||
|
.expect_value("Unable to allocate virtual memory for the physical frame bitmap, cannot continue");
|
||||||
map_frames_at(virtual_bitmap_base, (u64)g_frame_bitmap.location(), bitmap_pages,
|
map_frames_at(virtual_bitmap_base, (u64)g_frame_bitmap.location(), bitmap_pages,
|
||||||
MMU::ReadWrite | MMU::NoExecute)
|
MMU::ReadWrite | MMU::NoExecute)
|
||||||
.release_value();
|
.expect_value("Unable to map the physical frame bitmap to virtual memory, cannot continue");
|
||||||
|
|
||||||
g_frame_bitmap.initialize((void*)virtual_bitmap_base, g_frame_bitmap.size_in_bytes());
|
g_frame_bitmap.initialize((void*)virtual_bitmap_base, g_frame_bitmap.size_in_bytes());
|
||||||
}
|
}
|
||||||
@ -292,7 +294,7 @@ namespace MemoryManager
|
|||||||
{
|
{
|
||||||
auto rc = MMU::get_flags(address);
|
auto rc = MMU::get_flags(address);
|
||||||
if (rc.has_error()) return false;
|
if (rc.has_error()) return false;
|
||||||
if (rc.release_value() & MMU::ReadWrite) return true;
|
if (rc.value() & MMU::ReadWrite) return true;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -35,13 +35,13 @@ void MemoryMapIterator::rewind()
|
|||||||
m_cur_ent = 0;
|
m_cur_ent = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
Result<MemoryMapEntry> MemoryMapIterator::at(usize index) const
|
Option<MemoryMapEntry> MemoryMapIterator::at(usize index) const
|
||||||
{
|
{
|
||||||
if (index >= m_mmap_entries) return err(ERANGE);
|
if (index >= m_mmap_entries) return {};
|
||||||
return memory_map_entry_from_mmapent(m_base_ent + index);
|
return memory_map_entry_from_mmapent(m_base_ent + index);
|
||||||
}
|
}
|
||||||
|
|
||||||
Result<MemoryMapEntry> MemoryMapIterator::next()
|
Option<MemoryMapEntry> MemoryMapIterator::next()
|
||||||
{
|
{
|
||||||
return at(m_cur_ent++);
|
return at(m_cur_ent++);
|
||||||
}
|
}
|
||||||
@ -63,7 +63,7 @@ MemoryMapEntry MemoryMapIterator::largest_free()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return at(largest_index).release_value();
|
return at(largest_index).value();
|
||||||
}
|
}
|
||||||
|
|
||||||
MemoryMapEntry MemoryMapIterator::highest()
|
MemoryMapEntry MemoryMapIterator::highest()
|
||||||
@ -83,5 +83,5 @@ MemoryMapEntry MemoryMapIterator::highest()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return at(highest_index).release_value();
|
return at(highest_index).value();
|
||||||
}
|
}
|
@ -44,13 +44,13 @@ class MemoryMapIterator
|
|||||||
|
|
||||||
void rewind();
|
void rewind();
|
||||||
|
|
||||||
Result<MemoryMapEntry> next();
|
Option<MemoryMapEntry> next();
|
||||||
|
|
||||||
MemoryMapEntry largest_free();
|
MemoryMapEntry largest_free();
|
||||||
|
|
||||||
MemoryMapEntry highest();
|
MemoryMapEntry highest();
|
||||||
|
|
||||||
Result<MemoryMapEntry> at(usize index) const;
|
Option<MemoryMapEntry> at(usize index) const;
|
||||||
|
|
||||||
usize entries() const
|
usize entries() const
|
||||||
{
|
{
|
||||||
|
@ -24,7 +24,8 @@ namespace Scheduler
|
|||||||
g_idle.ticks_left = 1;
|
g_idle.ticks_left = 1;
|
||||||
|
|
||||||
// Map some stack for the idle task
|
// Map some stack for the idle task
|
||||||
u64 idle_stack_vm = MemoryManager::alloc_for_kernel(1, MMU::NoExecute | MMU::ReadWrite).release_value();
|
u64 idle_stack_vm = MemoryManager::alloc_for_kernel(1, MMU::NoExecute | MMU::ReadWrite)
|
||||||
|
.expect_value("Error while setting up the idle task, cannot continue");
|
||||||
|
|
||||||
Stack idle_stack{idle_stack_vm, ARCH_PAGE_SIZE};
|
Stack idle_stack{idle_stack_vm, ARCH_PAGE_SIZE};
|
||||||
g_idle.set_sp(idle_stack.top());
|
g_idle.set_sp(idle_stack.top());
|
||||||
|
Loading…
Reference in New Issue
Block a user