mirror of
https://github.com/hexagonal-sun/moss-kernel.git
synced 2026-04-23 16:48:57 -04:00
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.
This commit is contained in:
@@ -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` |
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -14,7 +14,7 @@ use crate::{
|
||||
memory::{
|
||||
PAGE_SIZE,
|
||||
address::{TPA, TVA, VA},
|
||||
permissions::PtePermissions,
|
||||
paging::permissions::PtePermissions,
|
||||
region::{PhysMemoryRegion, VirtMemoryRegion},
|
||||
},
|
||||
};
|
||||
|
||||
@@ -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<PM: PageTableMapper>(
|
||||
|
||||
@@ -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]
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
//! Architecture-specific support code.
|
||||
|
||||
pub mod arm64;
|
||||
pub mod x86_64;
|
||||
|
||||
@@ -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},
|
||||
},
|
||||
};
|
||||
|
||||
@@ -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.
|
||||
///
|
||||
|
||||
@@ -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;
|
||||
|
||||
3
libkernel/src/memory/paging/mod.rs
Normal file
3
libkernel/src/memory/paging/mod.rs
Normal file
@@ -0,0 +1,3 @@
|
||||
//! Architecture agnostic paging-related traits and types.
|
||||
|
||||
pub mod permissions;
|
||||
@@ -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();
|
||||
@@ -8,7 +8,7 @@ use crate::{
|
||||
memory::{
|
||||
address::VA,
|
||||
page::PageFrame,
|
||||
permissions::PtePermissions,
|
||||
paging::permissions::PtePermissions,
|
||||
region::{PhysMemoryRegion, VirtMemoryRegion},
|
||||
},
|
||||
sync::spinlock::SpinLockIrq,
|
||||
@@ -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,
|
||||
},
|
||||
};
|
||||
|
||||
@@ -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},
|
||||
},
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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.
|
||||
@@ -16,7 +16,7 @@ use libkernel::{
|
||||
error::Result,
|
||||
memory::{
|
||||
address::{TPA, TVA},
|
||||
permissions::PtePermissions,
|
||||
paging::permissions::PtePermissions,
|
||||
},
|
||||
};
|
||||
|
||||
|
||||
@@ -14,7 +14,7 @@ use libkernel::{
|
||||
memory::{
|
||||
PAGE_SIZE,
|
||||
address::{PA, TPA, VA},
|
||||
permissions::PtePermissions,
|
||||
paging::permissions::PtePermissions,
|
||||
region::{PhysMemoryRegion, VirtMemoryRegion},
|
||||
},
|
||||
};
|
||||
|
||||
@@ -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};
|
||||
|
||||
@@ -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};
|
||||
|
||||
@@ -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},
|
||||
},
|
||||
};
|
||||
|
||||
@@ -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},
|
||||
},
|
||||
};
|
||||
|
||||
@@ -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)]
|
||||
|
||||
@@ -16,7 +16,7 @@ use libkernel::{
|
||||
memory::{
|
||||
PAGE_SIZE,
|
||||
address::{IdentityTranslator, TPA, TVA, VA},
|
||||
permissions::PtePermissions,
|
||||
paging::permissions::PtePermissions,
|
||||
region::PhysMemoryRegion,
|
||||
},
|
||||
};
|
||||
|
||||
@@ -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},
|
||||
},
|
||||
};
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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"));
|
||||
|
||||
@@ -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},
|
||||
},
|
||||
};
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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},
|
||||
|
||||
@@ -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::{
|
||||
|
||||
@@ -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,
|
||||
},
|
||||
};
|
||||
|
||||
@@ -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},
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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,
|
||||
},
|
||||
};
|
||||
|
||||
@@ -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,
|
||||
},
|
||||
};
|
||||
|
||||
@@ -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};
|
||||
|
||||
@@ -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,
|
||||
},
|
||||
};
|
||||
|
||||
@@ -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};
|
||||
|
||||
@@ -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},
|
||||
|
||||
@@ -18,7 +18,8 @@ pub mod page;
|
||||
pub mod process_vm;
|
||||
pub mod uaccess;
|
||||
|
||||
pub type PageOffsetTranslator = libkernel::memory::pg_offset::PageOffsetTranslator<ArchImpl>;
|
||||
pub type PageOffsetTranslator =
|
||||
libkernel::memory::proc_vm::pg_offset::PageOffsetTranslator<ArchImpl>;
|
||||
|
||||
// Initial memory allocator. Used for initial memory setup.
|
||||
const STATIC_REGION_COUNT: usize = 128;
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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::{
|
||||
|
||||
@@ -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},
|
||||
},
|
||||
};
|
||||
|
||||
|
||||
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user