MCPcopy Create free account
hub / github.com/bendudson/EuraliOS / free_user_stack

Function free_user_stack

kernel/src/memory.rs:835–855  ·  view source on GitHub ↗

Free frames used for a thread stack given virtual address

(
    stack_end: VirtAddr
)

Source from the content-addressed store, hash-verified

833/// Free frames used for a thread stack
834/// given virtual address
835pub fn free_user_stack(
836 stack_end: VirtAddr
837) -> Result<(), &'static str> {
838 let addr = stack_end - 1u64; // Address in last page
839 let table = active_level_1_table_containing(addr);
840
841 let memory_info = unsafe {MEMORY_INFO.as_mut().unwrap()};
842
843 let iend = usize::from(addr.p1_index());
844 for index in ((iend - 6)..=iend).rev() {
845 let entry = &mut table[index];
846 if entry.flags().contains(PageTableFlags::WRITABLE) {
847 // Free this frame
848 memory_info.frame_allocator.deallocate_frame(
849 entry.frame().unwrap());
850 }
851 entry.set_flags(PageTableFlags::empty());
852 }
853
854 Ok(())
855}

Callers 1

dropMethod · 0.85

Calls 2

deallocate_frameMethod · 0.80

Tested by

no test coverage detected