@@ -147,9 +147,10 @@ where
147
147
. allocate_frame ( )
148
148
. expect ( "frame allocation failed when mapping a kernel stack" ) ;
149
149
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
+ }
153
154
}
154
155
155
156
// identity-map context switch function, so that we don't get an immediate pagefault
@@ -161,9 +162,12 @@ where
161
162
context_switch_function_start_frame,
162
163
context_switch_function_start_frame + 1 ,
163
164
) {
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
+ }
167
171
}
168
172
169
173
// map framebuffer
@@ -179,9 +183,13 @@ where
179
183
{
180
184
let page = start_page + u64:: from_usize ( i) ;
181
185
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
+ }
185
193
}
186
194
let framebuffer_virt_addr = start_page. start_address ( ) ;
187
195
Some ( framebuffer_virt_addr)
@@ -202,9 +210,13 @@ where
202
210
for frame in PhysFrame :: range_inclusive ( start_frame, end_frame) {
203
211
let page = Page :: containing_address ( offset + frame. start_address ( ) . as_u64 ( ) ) ;
204
212
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
+ } ;
208
220
}
209
221
210
222
Some ( offset)
@@ -299,21 +311,23 @@ where
299
311
let frame = frame_allocator
300
312
. allocate_frame ( )
301
313
. expect ( "frame allocation for boot info failed" ) ;
302
- unsafe {
314
+ match unsafe {
303
315
page_tables
304
316
. kernel
305
317
. map_to ( page, frame, flags, & mut frame_allocator)
318
+ } {
319
+ Ok ( tlb) => tlb. flush ( ) ,
320
+ Err ( err) => panic ! ( "failed to map page {:?}: {:?}" , page, err) ,
306
321
}
307
- . unwrap ( )
308
- . flush ( ) ;
309
322
// we need to be able to access it too
310
- unsafe {
323
+ match unsafe {
311
324
page_tables
312
325
. bootloader
313
326
. map_to ( page, frame, flags, & mut frame_allocator)
327
+ } {
328
+ Ok ( tlb) => tlb. flush ( ) ,
329
+ Err ( err) => panic ! ( "failed to map page {:?}: {:?}" , page, err) ,
314
330
}
315
- . unwrap ( )
316
- . flush ( ) ;
317
331
}
318
332
319
333
let boot_info: & ' static mut MaybeUninit < BootInfo > =
0 commit comments