Skip to content

Commit d6332e9

Browse files
committed
Improve reporting of mapping errors
1 parent 3be235b commit d6332e9

File tree

1 file changed

+32
-18
lines changed

1 file changed

+32
-18
lines changed

Diff for: src/binary/mod.rs

+32-18
Original file line numberDiff line numberDiff line change
@@ -147,9 +147,10 @@ where
147147
.allocate_frame()
148148
.expect("frame allocation failed when mapping a kernel stack");
149149
let flags = PageTableFlags::PRESENT | PageTableFlags::WRITABLE;
150-
unsafe { kernel_page_table.map_to(page, frame, flags, frame_allocator) }
151-
.unwrap()
152-
.flush();
150+
match unsafe { kernel_page_table.map_to(page, frame, flags, frame_allocator) } {
151+
Ok(tlb) => tlb.flush(),
152+
Err(err) => panic!("failed to map page {:?}: {:?}", page, err),
153+
}
153154
}
154155

155156
// identity-map context switch function, so that we don't get an immediate pagefault
@@ -161,9 +162,12 @@ where
161162
context_switch_function_start_frame,
162163
context_switch_function_start_frame + 1,
163164
) {
164-
unsafe { kernel_page_table.identity_map(frame, PageTableFlags::PRESENT, frame_allocator) }
165-
.unwrap()
166-
.flush();
165+
match unsafe {
166+
kernel_page_table.identity_map(frame, PageTableFlags::PRESENT, frame_allocator)
167+
} {
168+
Ok(tlb) => tlb.flush(),
169+
Err(err) => panic!("failed to identity map frame {:?}: {:?}", frame, err),
170+
}
167171
}
168172

169173
// map framebuffer
@@ -179,9 +183,13 @@ where
179183
{
180184
let page = start_page + u64::from_usize(i);
181185
let flags = PageTableFlags::PRESENT | PageTableFlags::WRITABLE;
182-
unsafe { kernel_page_table.map_to(page, frame, flags, frame_allocator) }
183-
.unwrap()
184-
.flush();
186+
match unsafe { kernel_page_table.map_to(page, frame, flags, frame_allocator) } {
187+
Ok(tlb) => tlb.flush(),
188+
Err(err) => panic!(
189+
"failed to map page {:?} to frame {:?}: {:?}",
190+
page, frame, err
191+
),
192+
}
185193
}
186194
let framebuffer_virt_addr = start_page.start_address();
187195
Some(framebuffer_virt_addr)
@@ -202,9 +210,13 @@ where
202210
for frame in PhysFrame::range_inclusive(start_frame, end_frame) {
203211
let page = Page::containing_address(offset + frame.start_address().as_u64());
204212
let flags = PageTableFlags::PRESENT | PageTableFlags::WRITABLE;
205-
unsafe { kernel_page_table.map_to(page, frame, flags, frame_allocator) }
206-
.unwrap()
207-
.ignore();
213+
match unsafe { kernel_page_table.map_to(page, frame, flags, frame_allocator) } {
214+
Ok(tlb) => tlb.ignore(),
215+
Err(err) => panic!(
216+
"failed to map page {:?} to frame {:?}: {:?}",
217+
page, frame, err
218+
),
219+
};
208220
}
209221

210222
Some(offset)
@@ -299,21 +311,23 @@ where
299311
let frame = frame_allocator
300312
.allocate_frame()
301313
.expect("frame allocation for boot info failed");
302-
unsafe {
314+
match unsafe {
303315
page_tables
304316
.kernel
305317
.map_to(page, frame, flags, &mut frame_allocator)
318+
} {
319+
Ok(tlb) => tlb.flush(),
320+
Err(err) => panic!("failed to map page {:?}: {:?}", page, err),
306321
}
307-
.unwrap()
308-
.flush();
309322
// we need to be able to access it too
310-
unsafe {
323+
match unsafe {
311324
page_tables
312325
.bootloader
313326
.map_to(page, frame, flags, &mut frame_allocator)
327+
} {
328+
Ok(tlb) => tlb.flush(),
329+
Err(err) => panic!("failed to map page {:?}: {:?}", page, err),
314330
}
315-
.unwrap()
316-
.flush();
317331
}
318332

319333
let boot_info: &'static mut MaybeUninit<BootInfo> =

0 commit comments

Comments
 (0)