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

Method return_frame

kernel/src/memory/frame_allocator.rs:254–279  ·  view source on GitHub ↗

Put a frame back into the bitmap Input is the frame number returned by fetch_frame, not a physical address

(&mut self, frame_number: u64)

Source from the content-addressed store, hash-verified

252 /// Input is the frame number returned by fetch_frame, not
253 /// a physical address
254 fn return_frame(&mut self, frame_number: u64) {
255 if self.frame_stack_number < FRAME_ALLOCATOR_STACK_SIZE {
256 self.frame_stack[self.frame_stack_number] = frame_number;
257 self.frame_stack_number += 1;
258 return;
259 }
260
261 // Calculate indices
262 let mut chunk_number = frame_number;
263 for level in 0..self.nlevels {
264 let ptr = unsafe{(self.bitmap_virt_addr[level].as_mut_ptr() as *mut u32)
265 .offset(chunk_number as isize)};
266 let bitmap_was_empty = unsafe{*ptr} == 0;
267 let index = chunk_number & 31; // Low 5 bits are the index
268
269 // Set bit
270 unsafe{*ptr |= 1 << index;}
271
272 if !bitmap_was_empty {
273 // No need to change higher bitmaps
274 break;
275 }
276 // Divide by 32 to get chunk number of higher level
277 chunk_number = chunk_number >> 5;
278 }
279 }
280
281 pub fn deallocate_frame(&mut self, frame: PhysFrame) {
282 if frame.start_address() < self.frame_phys_addr {

Callers 2

deallocate_frameMethod · 0.80
test_quick_returnFunction · 0.80

Calls 1

as_mut_ptrMethod · 0.80

Tested by 1

test_quick_returnFunction · 0.64