fix(paging): load back original P4 instead of temporary page frame in InactivePageTable::under
	
		
			
	
		
	
	
		
	
		
			All checks were successful
		
		
	
	
		
			
				
	
				continuous-integration/drone/push Build is passing
				
			
		
		
	
	
				
					
				
			
		
			All checks were successful
		
		
	
	continuous-integration/drone/push Build is passing
				
			Signed-off-by: Julien CLEMENT <julien.clement@epita.fr>
This commit is contained in:
		
							parent
							
								
									a5ba50f0aa
								
							
						
					
					
						commit
						fcf2f7f439
					
				@ -10,6 +10,7 @@ SECTIONS {
 | 
			
		||||
        . = ALIGN(4K);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    . = ALIGN(4K);
 | 
			
		||||
    .text :
 | 
			
		||||
    {
 | 
			
		||||
        *(.text .text.*)
 | 
			
		||||
 | 
			
		||||
@ -27,13 +27,13 @@ pub fn kernel_remap<A>(allocator: &mut A, boot_info: &BootInformation)
 | 
			
		||||
                // section is not loaded to memory
 | 
			
		||||
                continue;
 | 
			
		||||
            }
 | 
			
		||||
            println!("mapping section at addr: {:#x}, size: {:#x}",
 | 
			
		||||
                section.addr, section.size);
 | 
			
		||||
            assert!(section.start_address() % PAGE_SIZE == 0,
 | 
			
		||||
                    "sections need to be page aligned");
 | 
			
		||||
 | 
			
		||||
            println!("mapping section at addr: {:#x}, size: {:#x}",
 | 
			
		||||
                section.addr, section.size);
 | 
			
		||||
 | 
			
		||||
            let flags = Flags::WRITABLE;
 | 
			
		||||
            let flags = Flags::WRITABLE | Flags::PRESENT;
 | 
			
		||||
 | 
			
		||||
            let start_frame = Frame::<Size4KiB>::containing_address(PhysAddr::new(section.start_address() as u64));
 | 
			
		||||
            let end_frame = Frame::containing_address(PhysAddr::new(section.end_address() as u64 - 1));
 | 
			
		||||
@ -74,7 +74,7 @@ impl InactivePageTable {
 | 
			
		||||
 | 
			
		||||
        f(active_table);
 | 
			
		||||
 | 
			
		||||
        p4_table[511].set_frame(self.p4_frame, Flags::PRESENT | Flags::WRITABLE);
 | 
			
		||||
        p4_table[511].set_frame(backup, Flags::PRESENT | Flags::WRITABLE);
 | 
			
		||||
        x86_64::instructions::tlb::flush_all();
 | 
			
		||||
 | 
			
		||||
        temporary_page.unmap(active_table);
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user