From 465fcb7acbb8fa1ad367560a8fb9b70b600d747f Mon Sep 17 00:00:00 2001 From: Matthew Leach Date: Sat, 11 Apr 2026 09:03:33 +0100 Subject: [PATCH] libkenrel: memory: move paging-related modules to paging module Move PtePermissions to paging module which is feature-gated behind `paging`. Also move all AddressSpace related functionality behind the `proc_vm` feature gate. --- libkernel/README.md | 2 +- libkernel/src/arch/arm64/memory/pg_descriptors.rs | 2 +- libkernel/src/arch/arm64/memory/pg_tables.rs | 2 +- libkernel/src/arch/arm64/memory/pg_tear_down.rs | 2 +- libkernel/src/arch/arm64/memory/pg_walk.rs | 2 +- libkernel/src/arch/mod.rs | 1 + libkernel/src/fs/blk/ramdisk.rs | 4 ++-- libkernel/src/lib.rs | 5 +---- libkernel/src/memory/mod.rs | 6 +----- libkernel/src/memory/paging/mod.rs | 3 +++ libkernel/src/memory/{ => paging}/permissions.rs | 6 +++--- .../src/memory/{ => proc_vm}/address_space.rs | 2 +- libkernel/src/memory/proc_vm/memory_map/mod.rs | 8 +++++--- libkernel/src/memory/proc_vm/memory_map/tests.rs | 4 ++-- libkernel/src/memory/proc_vm/mod.rs | 10 +++++----- libkernel/src/memory/{ => proc_vm}/pg_offset.rs | 4 ++-- src/arch/arm64/boot/logical_map.rs | 2 +- src/arch/arm64/boot/memory.rs | 2 +- src/arch/arm64/boot/paging_bootstrap.rs | 2 +- src/arch/arm64/boot/secondary.rs | 5 +++-- src/arch/arm64/exceptions/mod.rs | 4 ++-- src/arch/arm64/memory/address_space.rs | 4 ++-- src/arch/arm64/memory/fault.rs | 7 +++++-- src/arch/arm64/memory/fixmap.rs | 2 +- src/arch/arm64/memory/mmu.rs | 4 ++-- src/arch/arm64/mod.rs | 7 +++++-- src/arch/arm64/proc.rs | 2 +- src/arch/arm64/proc/idle.rs | 14 +++++++------- src/arch/arm64/proc/vdso.rs | 4 ++-- src/arch/mod.rs | 7 +++++-- src/drivers/display/virtio.rs | 2 +- src/drivers/interrupts/arm_gic_v2.rs | 7 +++++-- src/drivers/interrupts/arm_gic_v3.rs | 2 +- src/drivers/rng/virtio.rs | 2 +- src/drivers/rtc/pl031.rs | 2 +- src/drivers/uart/imx_lp.rs | 2 +- src/drivers/uart/pl011.rs | 2 +- src/drivers/virtio_hal.rs | 2 +- src/main.rs | 3 ++- src/memory/fault.rs | 10 ++++++++-- src/memory/mincore.rs | 2 +- src/memory/mod.rs | 3 ++- src/process/exec.rs | 4 ++-- src/process/mod.rs | 2 +- src/process/owned.rs | 3 +-- src/process/threading/futex/key.rs | 2 +- 46 files changed, 99 insertions(+), 80 deletions(-) create mode 100644 libkernel/src/memory/paging/mod.rs rename libkernel/src/memory/{ => paging}/permissions.rs (97%) rename libkernel/src/memory/{ => proc_vm}/address_space.rs (99%) rename libkernel/src/memory/{ => proc_vm}/pg_offset.rs (88%) diff --git a/libkernel/README.md b/libkernel/README.md index 036c805..2e83b5e 100644 --- a/libkernel/README.md +++ b/libkernel/README.md @@ -13,7 +13,7 @@ gates to keep the dependency footprint minimal. |-----------|-------------------------------------------------------|------------------| | `sync` | Synchronisation primitives (spinlock, mutex, rwlock…) | — | | `alloc` | Memory allocators (buddy, slab) and collection types | `sync` | -| `paging` | Page tables, address-space management, PTE helpers | `alloc` | +| `paging` | Page tables, PTE helpers | `alloc` | | `proc` | Process identity types (UID/GID, capabilities) | — | | `fs` | VFS traits, path manipulation, block I/O | `proc`, `sync` | | `proc_vm` | Process virtual-memory management (mmap, brk, CoW) | `paging`, `fs` | diff --git a/libkernel/src/arch/arm64/memory/pg_descriptors.rs b/libkernel/src/arch/arm64/memory/pg_descriptors.rs index 71ae99b..16ee7de 100644 --- a/libkernel/src/arch/arm64/memory/pg_descriptors.rs +++ b/libkernel/src/arch/arm64/memory/pg_descriptors.rs @@ -6,7 +6,7 @@ use tock_registers::{register_bitfields, registers::InMemoryRegister}; use crate::memory::PAGE_SHIFT; use crate::memory::address::{PA, VA}; -use crate::memory::permissions::PtePermissions; +use crate::memory::paging::permissions::PtePermissions; use crate::memory::region::PhysMemoryRegion; /// Trait for common behavior across different types of page table entries. diff --git a/libkernel/src/arch/arm64/memory/pg_tables.rs b/libkernel/src/arch/arm64/memory/pg_tables.rs index 92a1da6..c6ccd9a 100644 --- a/libkernel/src/arch/arm64/memory/pg_tables.rs +++ b/libkernel/src/arch/arm64/memory/pg_tables.rs @@ -14,7 +14,7 @@ use crate::{ memory::{ PAGE_SIZE, address::{TPA, TVA, VA}, - permissions::PtePermissions, + paging::permissions::PtePermissions, region::{PhysMemoryRegion, VirtMemoryRegion}, }, }; diff --git a/libkernel/src/arch/arm64/memory/pg_tear_down.rs b/libkernel/src/arch/arm64/memory/pg_tear_down.rs index 8a7af7d..5d371b1 100644 --- a/libkernel/src/arch/arm64/memory/pg_tear_down.rs +++ b/libkernel/src/arch/arm64/memory/pg_tear_down.rs @@ -135,7 +135,7 @@ mod tests { use super::*; use crate::arch::arm64::memory::pg_tables::tests::TestHarness; use crate::memory::address::VA; - use crate::memory::permissions::PtePermissions; + use crate::memory::paging::permissions::PtePermissions; use std::collections::HashSet; fn capture_freed_pages( diff --git a/libkernel/src/arch/arm64/memory/pg_walk.rs b/libkernel/src/arch/arm64/memory/pg_walk.rs index a1c57a4..5ce46be 100644 --- a/libkernel/src/arch/arm64/memory/pg_walk.rs +++ b/libkernel/src/arch/arm64/memory/pg_walk.rs @@ -189,7 +189,7 @@ mod tests { use crate::error::KernelError; use crate::memory::PAGE_SIZE; use crate::memory::address::{PA, VA}; - use crate::memory::permissions::PtePermissions; + use crate::memory::paging::permissions::PtePermissions; use std::sync::atomic::{AtomicUsize, Ordering}; #[test] diff --git a/libkernel/src/arch/mod.rs b/libkernel/src/arch/mod.rs index 5a4f22f..be812f5 100644 --- a/libkernel/src/arch/mod.rs +++ b/libkernel/src/arch/mod.rs @@ -1,3 +1,4 @@ //! Architecture-specific support code. pub mod arm64; +pub mod x86_64; diff --git a/libkernel/src/fs/blk/ramdisk.rs b/libkernel/src/fs/blk/ramdisk.rs index aa30082..dc5f3ea 100644 --- a/libkernel/src/fs/blk/ramdisk.rs +++ b/libkernel/src/fs/blk/ramdisk.rs @@ -1,13 +1,13 @@ //! RAM-backed block device implementation. use crate::{ - KernAddressSpace, error::{IoError, KernelError, Result}, fs::BlockDevice, memory::{ PAGE_SIZE, address::{TVA, VA}, - permissions::PtePermissions, + paging::permissions::PtePermissions, + proc_vm::address_space::KernAddressSpace, region::{PhysMemoryRegion, VirtMemoryRegion}, }, }; diff --git a/libkernel/src/lib.rs b/libkernel/src/lib.rs index 66455b6..f508a8a 100644 --- a/libkernel/src/lib.rs +++ b/libkernel/src/lib.rs @@ -18,7 +18,7 @@ //! |-----------|-------------------------------------------------------|------------------| //! | `sync` | Synchronisation primitives (spinlock, mutex, rwlock…) | — | //! | `alloc` | Memory allocators (buddy, slab) and collection types | `sync` | -//! | `paging` | Page tables, address-space management, PTE helpers | `alloc` | +//! | `paging` | Page tables, PTE helpers | `alloc` | //! | `proc` | Process identity types (UID/GID, capabilities) | — | //! | `fs` | VFS traits, path manipulation, block I/O | `proc`, `sync` | //! | `proc_vm` | Process virtual-memory management (mmap, brk, CoW) | `paging`, `fs` | @@ -66,9 +66,6 @@ pub mod sync; extern crate alloc; -#[cfg(feature = "paging")] -pub use memory::address_space::{KernAddressSpace, PageInfo, UserAddressSpace, VirtualMemory}; - /// Trait abstracting the small set of CPU operations that the /// architecture-independent kernel code requires. /// diff --git a/libkernel/src/memory/mod.rs b/libkernel/src/memory/mod.rs index d149dc2..3fc8051 100644 --- a/libkernel/src/memory/mod.rs +++ b/libkernel/src/memory/mod.rs @@ -9,8 +9,6 @@ //! feature flags. pub mod address; -#[cfg(feature = "paging")] -pub mod address_space; #[cfg(feature = "alloc")] pub mod allocators; #[cfg(feature = "alloc")] @@ -19,9 +17,7 @@ pub mod claimed_page; pub mod kbuf; pub mod page; #[cfg(feature = "paging")] -pub mod permissions; -#[cfg(feature = "paging")] -pub mod pg_offset; +pub mod paging; #[cfg(feature = "proc_vm")] pub mod proc_vm; pub mod region; diff --git a/libkernel/src/memory/paging/mod.rs b/libkernel/src/memory/paging/mod.rs new file mode 100644 index 0000000..9693d4a --- /dev/null +++ b/libkernel/src/memory/paging/mod.rs @@ -0,0 +1,3 @@ +//! Architecture agnostic paging-related traits and types. + +pub mod permissions; diff --git a/libkernel/src/memory/permissions.rs b/libkernel/src/memory/paging/permissions.rs similarity index 97% rename from libkernel/src/memory/permissions.rs rename to libkernel/src/memory/paging/permissions.rs index fe4fdaf..b6af717 100644 --- a/libkernel/src/memory/permissions.rs +++ b/libkernel/src/memory/paging/permissions.rs @@ -3,7 +3,7 @@ use core::fmt; #[cfg(feature = "proc_vm")] -use super::proc_vm::vmarea::VMAPermissions; +use crate::memory::proc_vm::vmarea::VMAPermissions; /// Represents the memory permissions for a virtual memory mapping. #[derive(Clone, Copy, PartialEq, Eq, Default)] @@ -135,7 +135,7 @@ impl PtePermissions { /// /// # Example /// ``` - /// use libkernel::memory::permissions::PtePermissions; + /// use libkernel::memory::paging::permissions::PtePermissions; /// /// let perms = PtePermissions::rw(true); /// let cow_perms = perms.into_cow(); @@ -165,7 +165,7 @@ impl PtePermissions { /// /// # Example /// ``` - /// use libkernel::memory::permissions::PtePermissions; + /// use libkernel::memory::paging::permissions::PtePermissions; /// /// let cow_perms = PtePermissions::rw(true).into_cow(); /// let writable_perms = cow_perms.from_cow(); diff --git a/libkernel/src/memory/address_space.rs b/libkernel/src/memory/proc_vm/address_space.rs similarity index 99% rename from libkernel/src/memory/address_space.rs rename to libkernel/src/memory/proc_vm/address_space.rs index 52c9d8b..68d80d9 100644 --- a/libkernel/src/memory/address_space.rs +++ b/libkernel/src/memory/proc_vm/address_space.rs @@ -8,7 +8,7 @@ use crate::{ memory::{ address::VA, page::PageFrame, - permissions::PtePermissions, + paging::permissions::PtePermissions, region::{PhysMemoryRegion, VirtMemoryRegion}, }, sync::spinlock::SpinLockIrq, diff --git a/libkernel/src/memory/proc_vm/memory_map/mod.rs b/libkernel/src/memory/proc_vm/memory_map/mod.rs index 1461a1d..508f8e6 100644 --- a/libkernel/src/memory/proc_vm/memory_map/mod.rs +++ b/libkernel/src/memory/proc_vm/memory_map/mod.rs @@ -1,11 +1,13 @@ //! Memory map management for a process address space. -use super::vmarea::{VMAPermissions, VMArea, VMAreaKind}; +use super::{ + address_space::UserAddressSpace, + vmarea::{VMAPermissions, VMArea, VMAreaKind}, +}; use crate::{ - UserAddressSpace, error::{KernelError, Result}, memory::{ - PAGE_MASK, PAGE_SIZE, address::VA, page::PageFrame, permissions::PtePermissions, + PAGE_MASK, PAGE_SIZE, address::VA, page::PageFrame, paging::permissions::PtePermissions, region::VirtMemoryRegion, }, }; diff --git a/libkernel/src/memory/proc_vm/memory_map/tests.rs b/libkernel/src/memory/proc_vm/memory_map/tests.rs index f0158a6..52e493a 100644 --- a/libkernel/src/memory/proc_vm/memory_map/tests.rs +++ b/libkernel/src/memory/proc_vm/memory_map/tests.rs @@ -1,14 +1,14 @@ use super::MemoryMap; use crate::{ - PageInfo, UserAddressSpace, error::Result, fs::Inode, memory::{ PAGE_SIZE, address::VA, page::PageFrame, - permissions::PtePermissions, + paging::permissions::PtePermissions, proc_vm::{ + address_space::{PageInfo, UserAddressSpace}, memory_map::{AddressRequest, MMAP_BASE}, vmarea::{VMAPermissions, VMArea, VMAreaKind, VMFileMapping, tests::DummyTestInode}, }, diff --git a/libkernel/src/memory/proc_vm/mod.rs b/libkernel/src/memory/proc_vm/mod.rs index cf890b0..8e0c08d 100644 --- a/libkernel/src/memory/proc_vm/mod.rs +++ b/libkernel/src/memory/proc_vm/mod.rs @@ -1,16 +1,16 @@ //! Manages the virtual memory address space of a process. -use crate::{ - UserAddressSpace, - error::{KernelError, Result}, +use super::{ + PAGE_SIZE, address::VA, proc_vm::address_space::UserAddressSpace, region::VirtMemoryRegion, }; +use crate::error::{KernelError, Result}; use alloc::string::ToString; use memory_map::{AddressRequest, MemoryMap}; use vmarea::{AccessKind, FaultValidation, VMAPermissions, VMArea, VMAreaKind}; -use super::{PAGE_SIZE, address::VA, region::VirtMemoryRegion}; - +pub mod address_space; pub mod memory_map; +pub mod pg_offset; pub mod vmarea; const BRK_PERMISSIONS: VMAPermissions = VMAPermissions::rw(); diff --git a/libkernel/src/memory/pg_offset.rs b/libkernel/src/memory/proc_vm/pg_offset.rs similarity index 88% rename from libkernel/src/memory/pg_offset.rs rename to libkernel/src/memory/proc_vm/pg_offset.rs index b8fca33..e7fce19 100644 --- a/libkernel/src/memory/pg_offset.rs +++ b/libkernel/src/memory/proc_vm/pg_offset.rs @@ -1,7 +1,7 @@ //! Page-offset arithmetic helpers. -use super::address::{AddressTranslator, TPA, TVA}; -use crate::VirtualMemory; +use super::address_space::VirtualMemory; +use crate::memory::address::{AddressTranslator, TPA, TVA}; use core::marker::PhantomData; /// Translates between physical and virtual addresses using a fixed page-offset mapping. diff --git a/src/arch/arm64/boot/logical_map.rs b/src/arch/arm64/boot/logical_map.rs index ca8866c..a429f63 100644 --- a/src/arch/arm64/boot/logical_map.rs +++ b/src/arch/arm64/boot/logical_map.rs @@ -16,7 +16,7 @@ use libkernel::{ error::Result, memory::{ address::{TPA, TVA}, - permissions::PtePermissions, + paging::permissions::PtePermissions, }, }; diff --git a/src/arch/arm64/boot/memory.rs b/src/arch/arm64/boot/memory.rs index c687190..c381aac 100644 --- a/src/arch/arm64/boot/memory.rs +++ b/src/arch/arm64/boot/memory.rs @@ -14,7 +14,7 @@ use libkernel::{ memory::{ PAGE_SIZE, address::{PA, TPA, VA}, - permissions::PtePermissions, + paging::permissions::PtePermissions, region::{PhysMemoryRegion, VirtMemoryRegion}, }, }; diff --git a/src/arch/arm64/boot/paging_bootstrap.rs b/src/arch/arm64/boot/paging_bootstrap.rs index 044cb80..2640969 100644 --- a/src/arch/arm64/boot/paging_bootstrap.rs +++ b/src/arch/arm64/boot/paging_bootstrap.rs @@ -10,7 +10,7 @@ use libkernel::arch::arm64::memory::pg_tables::{ use libkernel::arch::arm64::memory::tlb::NullTlbInvalidator; use libkernel::error::{KernelError, Result}; use libkernel::memory::address::{AddressTranslator, IdentityTranslator, PA, TPA, TVA}; -use libkernel::memory::permissions::PtePermissions; +use libkernel::memory::paging::permissions::PtePermissions; use libkernel::memory::region::PhysMemoryRegion; use libkernel::memory::{PAGE_MASK, PAGE_SIZE}; use tock_registers::interfaces::{ReadWriteable, Writeable}; diff --git a/src/arch/arm64/boot/secondary.rs b/src/arch/arm64/boot/secondary.rs index 20b3c1d..3ae3a4b 100644 --- a/src/arch/arm64/boot/secondary.rs +++ b/src/arch/arm64/boot/secondary.rs @@ -24,11 +24,12 @@ use core::{ time::Duration, }; use libkernel::{ - CpuOps, KernAddressSpace, VirtualMemory, + CpuOps, error::{KernelError, Result}, memory::{ address::{PA, VA}, - permissions::PtePermissions, + paging::permissions::PtePermissions, + proc_vm::address_space::{KernAddressSpace, VirtualMemory}, }, }; use log::{info, warn}; diff --git a/src/arch/arm64/exceptions/mod.rs b/src/arch/arm64/exceptions/mod.rs index 972b14e..c90c60f 100644 --- a/src/arch/arm64/exceptions/mod.rs +++ b/src/arch/arm64/exceptions/mod.rs @@ -14,11 +14,11 @@ use aarch64_cpu::registers::{CPACR_EL1, ReadWriteable, VBAR_EL1}; use core::{arch::global_asm, fmt::Display}; use esr::{Esr, Exception}; use libkernel::{ - KernAddressSpace, VirtualMemory, error::Result, memory::{ address::VA, - permissions::PtePermissions, + paging::permissions::PtePermissions, + proc_vm::address_space::{KernAddressSpace, VirtualMemory}, region::{PhysMemoryRegion, VirtMemoryRegion}, }, }; diff --git a/src/arch/arm64/memory/address_space.rs b/src/arch/arm64/memory/address_space.rs index 4e0baa3..6780a63 100644 --- a/src/arch/arm64/memory/address_space.rs +++ b/src/arch/arm64/memory/address_space.rs @@ -10,7 +10,6 @@ use aarch64_cpu::{ }; use alloc::vec::Vec; use libkernel::{ - PageInfo, UserAddressSpace, arch::arm64::memory::{ pg_descriptors::{L3Descriptor, MemoryType, PaMapper, PageTableEntry}, pg_tables::{ @@ -24,7 +23,8 @@ use libkernel::{ PAGE_SIZE, address::{TPA, VA}, page::PageFrame, - permissions::PtePermissions, + paging::permissions::PtePermissions, + proc_vm::address_space::{PageInfo, UserAddressSpace}, region::{PhysMemoryRegion, VirtMemoryRegion}, }, }; diff --git a/src/arch/arm64/memory/fault.rs b/src/arch/arm64/memory/fault.rs index bb30153..a40df10 100644 --- a/src/arch/arm64/memory/fault.rs +++ b/src/arch/arm64/memory/fault.rs @@ -16,9 +16,12 @@ use crate::{ }; use alloc::{boxed::Box, sync::Arc}; use libkernel::{ - UserAddressSpace, error::Result, - memory::{address::VA, proc_vm::vmarea::AccessKind, region::VirtMemoryRegion}, + memory::{ + address::VA, + proc_vm::{address_space::UserAddressSpace, vmarea::AccessKind}, + region::VirtMemoryRegion, + }, }; #[repr(C)] diff --git a/src/arch/arm64/memory/fixmap.rs b/src/arch/arm64/memory/fixmap.rs index d3980e0..3de7686 100644 --- a/src/arch/arm64/memory/fixmap.rs +++ b/src/arch/arm64/memory/fixmap.rs @@ -16,7 +16,7 @@ use libkernel::{ memory::{ PAGE_SIZE, address::{IdentityTranslator, TPA, TVA, VA}, - permissions::PtePermissions, + paging::permissions::PtePermissions, region::PhysMemoryRegion, }, }; diff --git a/src/arch/arm64/memory/mmu.rs b/src/arch/arm64/memory/mmu.rs index fe7ffba..0970ef3 100644 --- a/src/arch/arm64/memory/mmu.rs +++ b/src/arch/arm64/memory/mmu.rs @@ -1,7 +1,6 @@ use super::{MMIO_BASE, tlb::AllEl1TlbInvalidator}; use crate::sync::{OnceLock, SpinLock}; use libkernel::{ - KernAddressSpace, arch::arm64::memory::{ pg_descriptors::{MemoryType, PaMapper}, pg_tables::{L0Table, MapAttributes, MappingContext, PgTableArray, map_range}, @@ -10,7 +9,8 @@ use libkernel::{ error::Result, memory::{ address::{PA, TPA, VA}, - permissions::PtePermissions, + paging::permissions::PtePermissions, + proc_vm::address_space::KernAddressSpace, region::{PhysMemoryRegion, VirtMemoryRegion}, }, }; diff --git a/src/arch/arm64/mod.rs b/src/arch/arm64/mod.rs index bee58b0..83ea82e 100644 --- a/src/arch/arm64/mod.rs +++ b/src/arch/arm64/mod.rs @@ -7,10 +7,13 @@ use alloc::sync::Arc; use cpu_ops::{local_irq_restore, local_irq_save}; use exceptions::ExceptionState; use libkernel::{ - CpuOps, VirtualMemory, + CpuOps, arch::arm64::memory::pg_tables::{L0Table, PgTableArray}, error::Result, - memory::address::{UA, VA}, + memory::{ + address::{UA, VA}, + proc_vm::address_space::VirtualMemory, + }, }; use memory::{ PAGE_OFFSET, diff --git a/src/arch/arm64/proc.rs b/src/arch/arm64/proc.rs index afd06c6..341e57d 100644 --- a/src/arch/arm64/proc.rs +++ b/src/arch/arm64/proc.rs @@ -1,6 +1,6 @@ use crate::process::Task; use alloc::sync::Arc; -use libkernel::UserAddressSpace; +use libkernel::memory::proc_vm::address_space::UserAddressSpace; pub mod idle; pub mod signal; diff --git a/src/arch/arm64/proc/idle.rs b/src/arch/arm64/proc/idle.rs index f2ae0cb..5a68301 100644 --- a/src/arch/arm64/proc/idle.rs +++ b/src/arch/arm64/proc/idle.rs @@ -4,14 +4,14 @@ use crate::{ process::owned::OwnedTask, }; use core::arch::global_asm; -use libkernel::{ - UserAddressSpace, VirtualMemory, - memory::{ - address::VA, - permissions::PtePermissions, - proc_vm::vmarea::{VMAPermissions, VMArea, VMAreaKind}, - region::VirtMemoryRegion, +use libkernel::memory::{ + address::VA, + paging::permissions::PtePermissions, + proc_vm::{ + address_space::{UserAddressSpace, VirtualMemory}, + vmarea::{VMAPermissions, VMArea, VMAreaKind}, }, + region::VirtMemoryRegion, }; global_asm!(include_str!("idle.s")); diff --git a/src/arch/arm64/proc/vdso.rs b/src/arch/arm64/proc/vdso.rs index b5fe7e7..4946a3a 100644 --- a/src/arch/arm64/proc/vdso.rs +++ b/src/arch/arm64/proc/vdso.rs @@ -1,10 +1,10 @@ use core::arch::global_asm; use libkernel::{ - KernAddressSpace, VirtualMemory, error::Result, memory::{ address::VA, - permissions::PtePermissions, + paging::permissions::PtePermissions, + proc_vm::address_space::{KernAddressSpace, VirtualMemory}, region::{PhysMemoryRegion, VirtMemoryRegion}, }, }; diff --git a/src/arch/mod.rs b/src/arch/mod.rs index 27aafda..b026af1 100644 --- a/src/arch/mod.rs +++ b/src/arch/mod.rs @@ -20,9 +20,12 @@ use crate::{ use alloc::string::String; use alloc::sync::Arc; use libkernel::{ - CpuOps, VirtualMemory, + CpuOps, error::Result, - memory::address::{UA, VA}, + memory::{ + address::{UA, VA}, + proc_vm::address_space::VirtualMemory, + }, }; pub trait Arch: CpuOps + VirtualMemory { diff --git a/src/drivers/display/virtio.rs b/src/drivers/display/virtio.rs index 51c397f..25fd452 100644 --- a/src/drivers/display/virtio.rs +++ b/src/drivers/display/virtio.rs @@ -12,8 +12,8 @@ use crate::{ }; use alloc::{boxed::Box, sync::Arc}; use core::ptr::NonNull; +use libkernel::memory::proc_vm::address_space::{KernAddressSpace, VirtualMemory}; use libkernel::{ - KernAddressSpace, VirtualMemory, error::{KernelError, ProbeError, Result}, memory::{ address::{PA, VA}, diff --git a/src/drivers/interrupts/arm_gic_v2.rs b/src/drivers/interrupts/arm_gic_v2.rs index f00f379..a497af4 100644 --- a/src/drivers/interrupts/arm_gic_v2.rs +++ b/src/drivers/interrupts/arm_gic_v2.rs @@ -3,9 +3,12 @@ use alloc::{ sync::{Arc, Weak}, }; use libkernel::{ - KernAddressSpace, VirtualMemory, error::{KernelError, Result}, - memory::{address::PA, region::PhysMemoryRegion}, + memory::{ + address::PA, + proc_vm::address_space::{KernAddressSpace, VirtualMemory}, + region::PhysMemoryRegion, + }, }; use log::info; use tock_registers::{ diff --git a/src/drivers/interrupts/arm_gic_v3.rs b/src/drivers/interrupts/arm_gic_v3.rs index be6d2ca..85128df 100644 --- a/src/drivers/interrupts/arm_gic_v3.rs +++ b/src/drivers/interrupts/arm_gic_v3.rs @@ -16,10 +16,10 @@ use aarch64_cpu::registers::MPIDR_EL1; use alloc::{boxed::Box, sync::Arc}; use core::arch::asm; use libkernel::{ - KernAddressSpace, VirtualMemory, error::{KernelError, Result}, memory::{ address::{PA, VA}, + proc_vm::address_space::{KernAddressSpace, VirtualMemory}, region::PhysMemoryRegion, }, }; diff --git a/src/drivers/rng/virtio.rs b/src/drivers/rng/virtio.rs index d761cca..5b56375 100644 --- a/src/drivers/rng/virtio.rs +++ b/src/drivers/rng/virtio.rs @@ -12,8 +12,8 @@ use crate::{ }; use alloc::{boxed::Box, sync::Arc}; use core::ptr::NonNull; +use libkernel::memory::proc_vm::address_space::{KernAddressSpace, VirtualMemory}; use libkernel::{ - KernAddressSpace, VirtualMemory, error::{KernelError, ProbeError, Result}, memory::{ address::{PA, VA}, diff --git a/src/drivers/rtc/pl031.rs b/src/drivers/rtc/pl031.rs index df40fa2..53010da 100644 --- a/src/drivers/rtc/pl031.rs +++ b/src/drivers/rtc/pl031.rs @@ -9,8 +9,8 @@ use alloc::sync::Arc; use core::time::Duration; use libkernel::error::{ProbeError, Result}; use libkernel::memory::address::{PA, VA}; +use libkernel::memory::proc_vm::address_space::{KernAddressSpace, VirtualMemory}; use libkernel::memory::region::PhysMemoryRegion; -use libkernel::{KernAddressSpace, VirtualMemory}; /// Driver for a PL031 real-time clock. pub struct PL031 { diff --git a/src/drivers/uart/imx_lp.rs b/src/drivers/uart/imx_lp.rs index 2026fdc..89f68a6 100644 --- a/src/drivers/uart/imx_lp.rs +++ b/src/drivers/uart/imx_lp.rs @@ -12,10 +12,10 @@ use aarch64_cpu::registers::{ReadWriteable, Readable, Writeable}; use alloc::{boxed::Box, sync::Arc}; use core::hint::spin_loop; use libkernel::{ - KernAddressSpace, VirtualMemory, error::Result, memory::{ address::{PA, VA}, + proc_vm::address_space::{KernAddressSpace, VirtualMemory}, region::PhysMemoryRegion, }, }; diff --git a/src/drivers/uart/pl011.rs b/src/drivers/uart/pl011.rs index 67a98e1..01ad7e8 100644 --- a/src/drivers/uart/pl011.rs +++ b/src/drivers/uart/pl011.rs @@ -13,10 +13,10 @@ use arm_pl011_uart::{ }; use core::ptr::NonNull; use libkernel::{ - KernAddressSpace, VirtualMemory, error::{ProbeError, Result}, memory::{ address::{PA, VA}, + proc_vm::address_space::{KernAddressSpace, VirtualMemory}, region::PhysMemoryRegion, }, }; diff --git a/src/drivers/virtio_hal.rs b/src/drivers/virtio_hal.rs index df1f089..55c0b92 100644 --- a/src/drivers/virtio_hal.rs +++ b/src/drivers/virtio_hal.rs @@ -1,9 +1,9 @@ use crate::arch::ArchImpl; use crate::memory::PageOffsetTranslator; use core::ptr::NonNull; -use libkernel::VirtualMemory; use libkernel::memory::PAGE_SIZE; use libkernel::memory::address::{PA, TPA}; +use libkernel::memory::proc_vm::address_space::VirtualMemory; use libkernel::memory::region::PhysMemoryRegion; use log::trace; use virtio_drivers::{BufferDirection, Hal, PhysAddr}; diff --git a/src/main.rs b/src/main.rs index dd6c244..b41c707 100644 --- a/src/main.rs +++ b/src/main.rs @@ -21,13 +21,14 @@ use drivers::{fdt_prober::get_fdt, fs::register_fs_drivers}; use fs::VFS; use getargs::{Opt, Options}; use libkernel::{ - CpuOps, VirtualMemory, + CpuOps, fs::{ BlockDevice, OpenFlags, attr::FilePermissions, blk::ramdisk::RamdiskBlkDev, path::Path, pathbuf::PathBuf, }, memory::{ address::{PA, VA}, + proc_vm::address_space::VirtualMemory, region::PhysMemoryRegion, }, }; diff --git a/src/memory/fault.rs b/src/memory/fault.rs index e7ae863..a09a31b 100644 --- a/src/memory/fault.rs +++ b/src/memory/fault.rs @@ -2,9 +2,15 @@ use crate::{process::ProcVM, sync::SpinLock}; use alloc::boxed::Box; use alloc::sync::Arc; use libkernel::{ - PageInfo, UserAddressSpace, error::{KernelError, MapError, Result}, - memory::{address::VA, permissions::PtePermissions, proc_vm::vmarea::AccessKind}, + memory::{ + address::VA, + paging::permissions::PtePermissions, + proc_vm::{ + address_space::{PageInfo, UserAddressSpace}, + vmarea::AccessKind, + }, + }, }; use super::{PAGE_ALLOC, page::ClaimedPage}; diff --git a/src/memory/mincore.rs b/src/memory/mincore.rs index c313cad..658512f 100644 --- a/src/memory/mincore.rs +++ b/src/memory/mincore.rs @@ -1,11 +1,11 @@ use alloc::vec; use alloc::vec::Vec; +use libkernel::memory::proc_vm::address_space::UserAddressSpace; use crate::memory::uaccess::copy_to_user_slice; use crate::sched::syscall_ctx::ProcessCtx; use libkernel::memory::region::VirtMemoryRegion; use libkernel::{ - UserAddressSpace, error::{KernelError, Result}, memory::PAGE_SHIFT, memory::address::{UA, VA}, diff --git a/src/memory/mod.rs b/src/memory/mod.rs index d2c0731..7fbd663 100644 --- a/src/memory/mod.rs +++ b/src/memory/mod.rs @@ -18,7 +18,8 @@ pub mod page; pub mod process_vm; pub mod uaccess; -pub type PageOffsetTranslator = libkernel::memory::pg_offset::PageOffsetTranslator; +pub type PageOffsetTranslator = + libkernel::memory::proc_vm::pg_offset::PageOffsetTranslator; // Initial memory allocator. Used for initial memory setup. const STATIC_REGION_COUNT: usize = 128; diff --git a/src/process/exec.rs b/src/process/exec.rs index 75cecb8..9c58a50 100644 --- a/src/process/exec.rs +++ b/src/process/exec.rs @@ -16,14 +16,14 @@ use alloc::{string::String, vec}; use alloc::{string::ToString, sync::Arc, vec::Vec}; use auxv::{AT_BASE, AT_ENTRY, AT_NULL, AT_PAGESZ, AT_PHDR, AT_PHENT, AT_PHNUM, AT_RANDOM}; use core::{ffi::c_char, mem, slice}; +use libkernel::memory::proc_vm::address_space::{UserAddressSpace, VirtualMemory}; use libkernel::{ - UserAddressSpace, VirtualMemory, error::{ExecError, KernelError, Result}, fs::{Inode, path::Path}, memory::{ PAGE_SIZE, address::{TUA, VA}, - permissions::PtePermissions, + paging::permissions::PtePermissions, proc_vm::{ ProcessVM, memory_map::MemoryMap, diff --git a/src/process/mod.rs b/src/process/mod.rs index 0d0fed0..5bccf2c 100644 --- a/src/process/mod.rs +++ b/src/process/mod.rs @@ -18,8 +18,8 @@ use alloc::{ use core::sync::atomic::{AtomicU32, AtomicUsize, Ordering}; use creds::Credentials; use fd_table::FileDescriptorTable; +use libkernel::memory::proc_vm::address_space::{UserAddressSpace, VirtualMemory}; use libkernel::{ - UserAddressSpace, VirtualMemory, error::{KernelError, Result}, fs::{Inode, pathbuf::PathBuf}, memory::{ diff --git a/src/process/owned.rs b/src/process/owned.rs index a309021..ea651cd 100644 --- a/src/process/owned.rs +++ b/src/process/owned.rs @@ -20,11 +20,10 @@ use alloc::sync::Arc; use core::ops::Deref; use core::sync::atomic::AtomicUsize; use libkernel::{ - VirtualMemory, fs::pathbuf::PathBuf, memory::{ address::{TUA, VA}, - proc_vm::{ProcessVM, vmarea::VMArea}, + proc_vm::{ProcessVM, address_space::VirtualMemory, vmarea::VMArea}, }, }; diff --git a/src/process/threading/futex/key.rs b/src/process/threading/futex/key.rs index 6d55625..b436908 100644 --- a/src/process/threading/futex/key.rs +++ b/src/process/threading/futex/key.rs @@ -1,7 +1,7 @@ use crate::sched::syscall_ctx::ProcessCtx; -use libkernel::UserAddressSpace; use libkernel::error::{KernelError, Result}; use libkernel::memory::address::{TUA, VA}; +use libkernel::memory::proc_vm::address_space::UserAddressSpace; #[derive(PartialEq, Eq, PartialOrd, Ord, Hash, Clone, Copy)] pub enum FutexKey {