Skip to content

Commit 0b0e364

Browse files
author
Jiajie Chen
committed
Use Option to replace usage of MaybeUninit in paging
1 parent de6d5b6 commit 0b0e364

File tree

4 files changed

+21
-22
lines changed

4 files changed

+21
-22
lines changed

kernel/src/arch/aarch64/paging.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ type Page = PageAllSizes<Size4KiB>;
1919
pub struct PageTableImpl {
2020
page_table: MappedPageTable<'static, fn(Frame) -> *mut Aarch64PageTable>,
2121
root_frame: Frame,
22-
entry: PageEntry,
22+
entry: Option<PageEntry>,
2323
}
2424

2525
pub struct PageEntry(&'static mut PageTableEntry, Page);
@@ -55,8 +55,8 @@ impl PageTable for PageTableImpl {
5555
let page = Page::of_addr(vaddr as u64);
5656
if let Ok(e) = self.page_table.get_entry_mut(page) {
5757
let e = unsafe { &mut *(e as *mut PageTableEntry) };
58-
self.entry = PageEntry(e, page);
59-
Some(&mut self.entry as &mut Entry)
58+
self.entry = Some(PageEntry(e, page));
59+
Some(self.entry.as_mut().unwrap())
6060
} else {
6161
None
6262
}
@@ -213,7 +213,7 @@ impl PageTableImpl {
213213
ManuallyDrop::new(PageTableImpl {
214214
page_table: MappedPageTable::new(table, frame_to_page_table),
215215
root_frame: frame,
216-
entry: core::mem::MaybeUninit::zeroed().assume_init(),
216+
entry: None,
217217
})
218218
}
219219
/// The method for getting the kernel page table.
@@ -224,7 +224,7 @@ impl PageTableImpl {
224224
ManuallyDrop::new(PageTableImpl {
225225
page_table: MappedPageTable::new(table, frame_to_page_table),
226226
root_frame: frame,
227-
entry: core::mem::MaybeUninit::zeroed().assume_init(),
227+
entry: None,
228228
})
229229
}
230230
}
@@ -239,7 +239,7 @@ impl PageTableExt for PageTableImpl {
239239
PageTableImpl {
240240
page_table: MappedPageTable::new(table, frame_to_page_table),
241241
root_frame: frame,
242-
entry: core::mem::MaybeUninit::zeroed().assume_init(),
242+
entry: None,
243243
}
244244
}
245245
}

kernel/src/arch/mipsel/paging.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ use rcore_memory::paging::*;
1212
pub struct PageTableImpl {
1313
page_table: TwoLevelPageTable<'static>,
1414
root_frame: Frame,
15-
entry: PageEntry,
15+
entry: Option<PageEntry>,
1616
}
1717

1818
/// PageTableEntry: the contents of this entry.
@@ -43,8 +43,8 @@ impl PageTable for PageTableImpl {
4343
let page = Page::of_addr(VirtAddr::new(vaddr));
4444
if let Ok(e) = self.page_table.ref_entry(page.clone()) {
4545
let e = unsafe { &mut *(e as *mut PageTableEntry) };
46-
self.entry = PageEntry(e, page);
47-
Some(&mut self.entry as &mut Entry)
46+
self.entry = Some(PageEntry(e, page));
47+
Some(self.entry.as_mut().unwrap())
4848
} else {
4949
None
5050
}
@@ -154,7 +154,7 @@ impl PageTableImpl {
154154
ManuallyDrop::new(PageTableImpl {
155155
page_table: TwoLevelPageTable::new(table),
156156
root_frame: frame,
157-
entry: core::mem::MaybeUninit::zeroed().assume_init(),
157+
entry: None,
158158
})
159159
}
160160

@@ -176,7 +176,7 @@ impl PageTableExt for PageTableImpl {
176176
PageTableImpl {
177177
page_table: TwoLevelPageTable::new(table),
178178
root_frame: frame,
179-
entry: unsafe { core::mem::MaybeUninit::zeroed().assume_init() },
179+
entry: None,
180180
}
181181
}
182182

kernel/src/arch/riscv32/paging.rs

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ type TopLevelPageTable<'a> = riscv::paging::Rv39PageTable<'a>;
2020
pub struct PageTableImpl {
2121
page_table: TopLevelPageTable<'static>,
2222
root_frame: Frame,
23-
entry: PageEntry,
23+
entry: Option<PageEntry>,
2424
}
2525

2626
/// PageTableEntry: the contents of this entry.
@@ -51,8 +51,8 @@ impl PageTable for PageTableImpl {
5151
let page = Page::of_addr(VirtAddr::new(vaddr));
5252
if let Ok(e) = self.page_table.ref_entry(page.clone()) {
5353
let e = unsafe { &mut *(e as *mut PageTableEntry) };
54-
self.entry = PageEntry(e, page);
55-
Some(&mut self.entry as &mut Entry)
54+
self.entry = Some(PageEntry(e, page));
55+
Some(self.entry.as_mut().unwrap())
5656
} else {
5757
None
5858
}
@@ -158,7 +158,7 @@ impl PageTableImpl {
158158
ManuallyDrop::new(PageTableImpl {
159159
page_table: TopLevelPageTable::new(table, PHYSICAL_MEMORY_OFFSET),
160160
root_frame: frame,
161-
entry: core::mem::MaybeUninit::zeroed().assume_init(),
161+
entry: None,
162162
})
163163
}
164164
/// The method for getting the kernel page table.
@@ -176,11 +176,10 @@ impl PageTableExt for PageTableImpl {
176176
let table = unsafe { &mut *(phys_to_virt(target) as *mut RvPageTable) };
177177
table.zero();
178178

179-
// MaybeUninit is not working, dunno why
180179
PageTableImpl {
181180
page_table: TopLevelPageTable::new(table, PHYSICAL_MEMORY_OFFSET),
182181
root_frame: frame,
183-
entry: unsafe { core::mem::uninitialized() },
182+
entry: None,
184183
}
185184
}
186185

kernel/src/arch/x86_64/paging.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ impl FrameExt for Frame {
4141

4242
pub struct PageTableImpl(
4343
MappedPageTable<'static, fn(Frame) -> *mut x86PageTable>,
44-
PageEntry,
44+
Option<PageEntry>,
4545
Frame,
4646
);
4747

@@ -77,8 +77,8 @@ impl PageTable for PageTableImpl {
7777
let entry = unsafe { &mut (&mut *page_table)[index] };
7878
if level == 3 {
7979
let page = Page::of_addr(addr);
80-
self.1 = PageEntry(entry, page, self.2);
81-
return Some(&mut self.1 as &mut Entry);
80+
self.1 = Some(PageEntry(entry, page, self.2));
81+
return Some(self.1.as_mut().unwrap());
8282
}
8383
if !entry.flags().contains(EF::PRESENT) {
8484
return None;
@@ -203,7 +203,7 @@ impl PageTableImpl {
203203
let table = &mut *frame_to_page_table(frame);
204204
ManuallyDrop::new(PageTableImpl(
205205
MappedPageTable::new(table, frame_to_page_table),
206-
core::mem::MaybeUninit::zeroed().assume_init(),
206+
None,
207207
frame,
208208
))
209209
}
@@ -223,7 +223,7 @@ impl PageTableExt for PageTableImpl {
223223
unsafe {
224224
PageTableImpl(
225225
MappedPageTable::new(table, frame_to_page_table),
226-
core::mem::MaybeUninit::zeroed().assume_init(),
226+
None,
227227
frame,
228228
)
229229
}

0 commit comments

Comments
 (0)