@@ -97,27 +97,14 @@ pub(crate) fn map_segment(
9797 for frame in PhysFrame :: range_inclusive ( start_frame, end_frame) {
9898 let offset = frame - start_frame;
9999 let page = start_page + offset;
100- match unsafe {
101- map_page ( page, frame, page_table_flags, page_table, frame_allocator)
102- } {
103- Ok ( flusher) => flusher. flush ( ) ,
104- Err ( MapToError :: PageAlreadyMapped ( to) ) if to == frame => {
105- let flags = match page_table. translate ( page. start_address ( ) ) {
106- TranslateResult :: Mapped { flags, .. } => flags,
107- _ => unreachable ! ( ) ,
108- } ;
109- if flags != page_table_flags {
110- unsafe {
111- page_table
112- . update_flags ( page, flags | page_table_flags)
113- . unwrap ( )
114- . flush ( )
115- } ;
116- }
117- // nothing to do, page is already mapped to the correct frame
118- }
119- Err ( err) => return Err ( err) ,
120- }
100+ unsafe { map_page ( page, frame, page_table_flags, page_table, frame_allocator) }
101+ . unwrap_or_else ( |err| {
102+ panic ! (
103+ "failed to map segment starting at {:?}: failed to map page {:?} to frame {:?}: {:?}" ,
104+ start_page, page, frame, err
105+ )
106+ } )
107+ . flush ( ) ;
121108 }
122109
123110 if mem_size > file_size {
@@ -187,7 +174,7 @@ pub(crate) fn map_segment(
187174 zero_start. as_u64 ( ) ,
188175 Size4KiB :: SIZE ,
189176 ) ) ) ;
190- let end_page = Page :: containing_address ( zero_end) ;
177+ let end_page = Page :: containing_address ( zero_end - 1usize ) ;
191178 for page in Page :: range_inclusive ( start_page, end_page) {
192179 let frame = frame_allocator
193180 . allocate_frame ( MemoryRegionType :: Kernel )
0 commit comments