Skip to content

Commit 1371958

Browse files
committed
revise mmap / munmap to be more combatible to POSIX
1 parent 6f4e44f commit 1371958

File tree

6 files changed

+318
-55
lines changed

6 files changed

+318
-55
lines changed

Cargo.lock

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/arch/x86_64/kernel/interrupts.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,10 @@ pub(crate) fn install() {
158158
.set_stack_index(0);
159159
}
160160

161-
IRQ_NAMES.lock().insert(7, "FPU");
161+
let mut guard = IRQ_NAMES.lock();
162+
#[cfg(feature = "mman")]
163+
guard.insert(14, "Page Fault");
164+
guard.insert(7, "FPU");
162165
}
163166

164167
pub(crate) fn install_handlers() {

src/arch/x86_64/mm/paging.rs

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -279,8 +279,18 @@ pub(crate) extern "x86-interrupt" fn page_fault_handler(
279279
stack_frame: ExceptionStackFrame,
280280
error_code: PageFaultErrorCode,
281281
) {
282+
let addr = Cr2::read().unwrap();
283+
284+
#[cfg(feature = "mman")]
285+
crate::arch::x86_64::kernel::core_local::increment_irq_counter(14);
286+
#[cfg(feature = "mman")]
287+
if crate::syscalls::mman::resolve_page_fault(addr.into()).is_ok() {
288+
crate::kernel::apic::eoi();
289+
return;
290+
}
291+
282292
error!("Page fault (#PF)!");
283-
error!("page_fault_linear_address = {:p}", Cr2::read().unwrap());
293+
error!("page_fault_linear_address = {addr:p}");
284294
error!("error_code = {error_code:?}");
285295
error!("fs = {:#X}", processor::readfs());
286296
error!("gs = {:#X}", processor::readgs());

src/lib.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
#![feature(allocator_api)]
1212
#![feature(linkage)]
1313
#![feature(linked_list_cursors)]
14+
#![feature(linked_list_retain)]
1415
#![feature(map_try_insert)]
1516
#![feature(maybe_uninit_as_bytes)]
1617
#![feature(maybe_uninit_slice)]

0 commit comments

Comments
 (0)