refactor: integrate libk-thread into libk

This commit is contained in:
Mark Poliakov 2024-03-13 19:14:54 +02:00
parent 69b6a38c0a
commit 3d04d30eb4
59 changed files with 120 additions and 148 deletions

30
Cargo.lock generated
View File

@ -757,13 +757,15 @@ dependencies = [
name = "libk" name = "libk"
version = "0.1.0" version = "0.1.0"
dependencies = [ dependencies = [
"abi-lib",
"atomic_enum",
"crossbeam-queue", "crossbeam-queue",
"device-api", "device-api",
"elf 0.7.2",
"futures-util", "futures-util",
"kernel-arch", "kernel-arch",
"libk-device", "libk-device",
"libk-mm", "libk-mm",
"libk-thread",
"libk-util", "libk-util",
"log", "log",
"yggdrasil-abi", "yggdrasil-abi",
@ -801,23 +803,6 @@ dependencies = [
"yggdrasil-abi", "yggdrasil-abi",
] ]
[[package]]
name = "libk-thread"
version = "0.1.0"
dependencies = [
"abi-lib",
"atomic_enum",
"crossbeam-queue",
"elf 0.7.2",
"futures-util",
"kernel-arch",
"libk-device",
"libk-mm",
"libk-util",
"log",
"yggdrasil-abi",
]
[[package]] [[package]]
name = "libk-util" name = "libk-util"
version = "0.1.0" version = "0.1.0"
@ -1732,7 +1717,6 @@ dependencies = [
"kernel-fs", "kernel-fs",
"libk", "libk",
"libk-mm", "libk-mm",
"libk-thread",
"libk-util", "libk-util",
"log", "log",
"memoffset 0.9.0", "memoffset 0.9.0",
@ -1748,7 +1732,6 @@ version = "0.1.0"
dependencies = [ dependencies = [
"libk", "libk",
"libk-mm", "libk-mm",
"libk-thread",
"libk-util", "libk-util",
"yggdrasil-abi", "yggdrasil-abi",
] ]
@ -1762,7 +1745,6 @@ dependencies = [
"libk", "libk",
"libk-device", "libk-device",
"libk-mm", "libk-mm",
"libk-thread",
"libk-util", "libk-util",
"log", "log",
"serde", "serde",
@ -1791,7 +1773,6 @@ dependencies = [
"kernel-fs", "kernel-fs",
"libk", "libk",
"libk-mm", "libk-mm",
"libk-thread",
"libk-util", "libk-util",
"log", "log",
"static_assertions", "static_assertions",
@ -1822,8 +1803,8 @@ dependencies = [
"bytemuck", "bytemuck",
"device-api", "device-api",
"futures-util", "futures-util",
"libk",
"libk-mm", "libk-mm",
"libk-thread",
"libk-util", "libk-util",
"log", "log",
"ygg_driver_input", "ygg_driver_input",
@ -1838,8 +1819,8 @@ dependencies = [
"bytemuck", "bytemuck",
"device-api", "device-api",
"futures-util", "futures-util",
"libk",
"libk-mm", "libk-mm",
"libk-thread",
"libk-util", "libk-util",
"log", "log",
"tock-registers 0.9.0", "tock-registers 0.9.0",
@ -1921,7 +1902,6 @@ dependencies = [
"libk", "libk",
"libk-device", "libk-device",
"libk-mm", "libk-mm",
"libk-thread",
"libk-util", "libk-util",
"linked_list_allocator", "linked_list_allocator",
"log", "log",

View File

@ -17,7 +17,6 @@ device-api = { path = "lib/device-api", features = ["derive"] }
libk = { path = "libk" } libk = { path = "libk" }
libk-util = { path = "libk/libk-util" } libk-util = { path = "libk/libk-util" }
libk-mm = { path = "libk/libk-mm" } libk-mm = { path = "libk/libk-mm" }
libk-thread = { path = "libk/libk-thread" }
libk-device = { path = "libk/libk-device" } libk-device = { path = "libk/libk-device" }
memtables = { path = "lib/memtables" } memtables = { path = "lib/memtables" }
vmalloc = { path = "lib/vmalloc" } vmalloc = { path = "lib/vmalloc" }

View File

@ -7,7 +7,6 @@ authors = ["Mark Poliakov <mark@alnyan.me>"]
[dependencies] [dependencies]
yggdrasil-abi = { path = "../../../../lib/abi" } yggdrasil-abi = { path = "../../../../lib/abi" }
libk-mm = { path = "../../../libk/libk-mm" } libk-mm = { path = "../../../libk/libk-mm" }
libk-thread = { path = "../../../libk/libk-thread" }
libk-util = { path = "../../../libk/libk-util" } libk-util = { path = "../../../libk/libk-util" }
libk = { path = "../../../libk" } libk = { path = "../../../libk" }
device-api = { path = "../../../lib/device-api", features = ["derive"] } device-api = { path = "../../../lib/device-api", features = ["derive"] }

View File

@ -13,9 +13,11 @@ use device_api::{
}; };
use error::AhciError; use error::AhciError;
use kernel_fs::devfs; use kernel_fs::devfs;
use libk::vfs::block::{probe_partitions, NgBlockDeviceWrapper}; use libk::{
task::runtime,
vfs::block::{probe_partitions, NgBlockDeviceWrapper},
};
use libk_mm::{address::AsPhysicalAddress, device::DeviceMemoryIo, PageBox}; use libk_mm::{address::AsPhysicalAddress, device::DeviceMemoryIo, PageBox};
use libk_thread::runtime;
use libk_util::{sync::IrqSafeSpinlock, OneTimeInit}; use libk_util::{sync::IrqSafeSpinlock, OneTimeInit};
use port::AhciPort; use port::AhciPort;
use regs::{PortRegs, Regs}; use regs::{PortRegs, Regs};

View File

@ -7,7 +7,6 @@ authors = ["Mark Poliakov <mark@alnyan.me>"]
[dependencies] [dependencies]
yggdrasil-abi = { path = "../../../../lib/abi" } yggdrasil-abi = { path = "../../../../lib/abi" }
libk-util = { path = "../../../libk/libk-util" } libk-util = { path = "../../../libk/libk-util" }
libk-thread = { path = "../../../libk/libk-thread" }
libk-mm = { path = "../../../libk/libk-mm" } libk-mm = { path = "../../../libk/libk-mm" }
libk = { path = "../../../libk" } libk = { path = "../../../libk" }
device-api = { path = "../../../lib/device-api", features = ["derive"] } device-api = { path = "../../../lib/device-api", features = ["derive"] }

View File

@ -2,11 +2,11 @@ use core::task::Poll;
use alloc::{boxed::Box, format}; use alloc::{boxed::Box, format};
use kernel_fs::devfs; use kernel_fs::devfs;
use libk::task::cpu_index;
use libk::vfs::block::{ use libk::vfs::block::{
probe_partitions, IoOperation, IoRequest, IoSubmissionId, NgBlockDevice, NgBlockDeviceWrapper, probe_partitions, IoOperation, IoRequest, IoSubmissionId, NgBlockDevice, NgBlockDeviceWrapper,
}; };
use libk_mm::address::AsPhysicalAddress; use libk_mm::address::AsPhysicalAddress;
use libk_thread::cpu_index;
use libk_util::waker::QueueWaker; use libk_util::waker::QueueWaker;
use yggdrasil_abi::error::Error; use yggdrasil_abi::error::Error;

View File

@ -17,11 +17,11 @@ use device_api::{
Device, Device,
}; };
use drive::NvmeDrive; use drive::NvmeDrive;
use libk::task::{cpu_count, cpu_index, runtime};
use libk_mm::{ use libk_mm::{
address::{IntoRaw, PhysicalAddress}, address::{IntoRaw, PhysicalAddress},
device::DeviceMemoryIo, device::DeviceMemoryIo,
}; };
use libk_thread::{cpu_count, cpu_index, runtime};
use libk_util::{ use libk_util::{
sync::{IrqGuard, IrqSafeSpinlock}, sync::{IrqGuard, IrqSafeSpinlock},
OneTimeInit, OneTimeInit,

View File

@ -11,7 +11,7 @@ ygg_driver_input = { path = "../../input" }
libk-util = { path = "../../../libk/libk-util" } libk-util = { path = "../../../libk/libk-util" }
libk-mm = { path = "../../../libk/libk-mm" } libk-mm = { path = "../../../libk/libk-mm" }
libk-thread = { path = "../../../libk/libk-thread" } libk = { path = "../../../libk" }
log = "0.4.20" log = "0.4.20"
bytemuck = { version = "1.14.0", features = ["derive"] } bytemuck = { version = "1.14.0", features = ["derive"] }

View File

@ -1,6 +1,6 @@
use alloc::{sync::Arc, vec::Vec}; use alloc::{sync::Arc, vec::Vec};
use futures_util::future::BoxFuture; use futures_util::future::BoxFuture;
use libk_thread::runtime; use libk::task::runtime;
use libk_util::sync::spin_rwlock::IrqSafeRwLock; use libk_util::sync::spin_rwlock::IrqSafeRwLock;
use crate::{ use crate::{

View File

@ -6,6 +6,5 @@ edition = "2021"
[dependencies] [dependencies]
yggdrasil-abi = { path = "../../../lib/abi" } yggdrasil-abi = { path = "../../../lib/abi" }
libk-util = { path = "../../libk/libk-util" } libk-util = { path = "../../libk/libk-util" }
libk-thread = { path = "../../libk/libk-thread" }
libk-mm = { path = "../../libk/libk-mm" } libk-mm = { path = "../../libk/libk-mm" }
libk = { path = "../../libk" } libk = { path = "../../libk" }

View File

@ -4,8 +4,10 @@ extern crate alloc;
use core::task::{Context, Poll}; use core::task::{Context, Poll};
use libk::vfs::{CharDevice, FileReadiness}; use libk::{
use libk_thread::block; block,
vfs::{CharDevice, FileReadiness},
};
use libk_util::ring::LossyRingQueue; use libk_util::ring::LossyRingQueue;
use yggdrasil_abi::{ use yggdrasil_abi::{
error::Error, error::Error,

View File

@ -7,7 +7,6 @@ edition = "2021"
yggdrasil-abi = { path = "../../../../lib/abi", features = ["serde_kernel", "bytemuck"] } yggdrasil-abi = { path = "../../../../lib/abi", features = ["serde_kernel", "bytemuck"] }
libk-mm = { path = "../../../libk/libk-mm" } libk-mm = { path = "../../../libk/libk-mm" }
libk-util = { path = "../../../libk/libk-util" } libk-util = { path = "../../../libk/libk-util" }
libk-thread = { path = "../../../libk/libk-thread" }
libk-device = { path = "../../../libk/libk-device" } libk-device = { path = "../../../libk/libk-device" }
libk = { path = "../../../libk" } libk = { path = "../../../libk" }

View File

@ -7,7 +7,7 @@ use core::{
}; };
use alloc::{boxed::Box, collections::BTreeMap}; use alloc::{boxed::Box, collections::BTreeMap};
use libk_thread::runtime; use libk::task::runtime;
use libk_util::{sync::spin_rwlock::IrqSafeRwLock, waker::QueueWaker}; use libk_util::{sync::spin_rwlock::IrqSafeRwLock, waker::QueueWaker};
use yggdrasil_abi::{ use yggdrasil_abi::{
error::Error, error::Error,

View File

@ -10,8 +10,8 @@ use alloc::sync::Arc;
use bytemuck::Pod; use bytemuck::Pod;
use ethernet::L2Packet; use ethernet::L2Packet;
use l3::L3Packet; use l3::L3Packet;
use libk::task::runtime;
use libk_mm::PageBox; use libk_mm::PageBox;
use libk_thread::runtime;
use libk_util::queue::UnboundedMpmcQueue; use libk_util::queue::UnboundedMpmcQueue;
use yggdrasil_abi::{error::Error, net::protocols::EthernetFrame}; use yggdrasil_abi::{error::Error, net::protocols::EthernetFrame};

View File

@ -7,13 +7,13 @@ use core::{
}; };
use alloc::{collections::BTreeMap, sync::Arc, vec::Vec}; use alloc::{collections::BTreeMap, sync::Arc, vec::Vec};
use libk::vfs::{ConnectionSocket, FileReadiness, ListenerSocket, PacketSocket, Socket}; use libk::{
block,
task::runtime::{run_with_timeout, FutureTimeout},
vfs::{ConnectionSocket, FileReadiness, ListenerSocket, PacketSocket, Socket},
};
use libk_device::monotonic_timestamp; use libk_device::monotonic_timestamp;
use libk_mm::PageBox; use libk_mm::PageBox;
use libk_thread::{
block,
runtime::{run_with_timeout, FutureTimeout},
};
use libk_util::{ use libk_util::{
queue::BoundedMpmcQueue, queue::BoundedMpmcQueue,
sync::{ sync::{

View File

@ -12,7 +12,7 @@ ygg_driver_usb = { path = "../../bus/usb" }
libk-util = { path = "../../../libk/libk-util" } libk-util = { path = "../../../libk/libk-util" }
libk-mm = { path = "../../../libk/libk-mm" } libk-mm = { path = "../../../libk/libk-mm" }
libk-thread = { path = "../../../libk/libk-thread" } libk = { path = "../../../libk" }
xhci_lib = { git = "https://github.com/rust-osdev/xhci.git", package = "xhci" } xhci_lib = { git = "https://github.com/rust-osdev/xhci.git", package = "xhci" }

View File

@ -4,11 +4,11 @@ use alloc::{boxed::Box, collections::BTreeMap, sync::Arc, vec, vec::Vec};
use atomic_enum::atomic_enum; use atomic_enum::atomic_enum;
use device_api::{interrupt::InterruptHandler, Device}; use device_api::{interrupt::InterruptHandler, Device};
use futures_util::task::AtomicWaker; use futures_util::task::AtomicWaker;
use libk::task::runtime::{self, FutureTimeout};
use libk_mm::{ use libk_mm::{
address::{AsPhysicalAddress, PhysicalAddress}, address::{AsPhysicalAddress, PhysicalAddress},
PageBox, PageBox,
}; };
use libk_thread::runtime::{self, FutureTimeout};
use libk_util::{sync::spin_rwlock::IrqSafeRwLock, OneTimeInit}; use libk_util::{sync::spin_rwlock::IrqSafeRwLock, OneTimeInit};
use ygg_driver_usb::{ use ygg_driver_usb::{
bus::UsbBusManager, bus::UsbBusManager,

View File

@ -7,13 +7,20 @@ authors = ["Mark Poliakov <mark@alnyan.me>"]
[dependencies] [dependencies]
libk-mm = { path = "libk-mm" } libk-mm = { path = "libk-mm" }
libk-util = { path = "libk-util" } libk-util = { path = "libk-util" }
libk-thread = { path = "libk-thread" }
libk-device = { path = "libk-device" } libk-device = { path = "libk-device" }
kernel-arch = { path = "../arch" } kernel-arch = { path = "../arch" }
yggdrasil-abi = { path = "../../lib/abi" } abi-lib = { path = "../../lib/abi-lib" }
yggdrasil-abi = { path = "../../lib/abi", features = ["alloc"] }
device-api = { path = "../lib/device-api", features = ["derive"] } device-api = { path = "../lib/device-api", features = ["derive"] }
log = "0.4.20" log = "0.4.20"
atomic_enum = "0.2.0"
futures-util = { version = "0.3.28", default-features = false, features = ["alloc", "async-await"] } futures-util = { version = "0.3.28", default-features = false, features = ["alloc", "async-await"] }
crossbeam-queue = { version = "0.3.8", default-features = false, features = ["alloc"] } crossbeam-queue = { version = "0.3.8", default-features = false, features = ["alloc"] }
[dependencies.elf]
version = "0.7.2"
git = "https://git.alnyan.me/yggdrasil/yggdrasil-elf.git"
default-features = false
features = ["no_std_stream"]

View File

@ -1,26 +0,0 @@
[package]
name = "libk-thread"
version = "0.1.0"
edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
libk-util = { path = "../libk-util" }
libk-mm = { path = "../libk-mm" }
libk-device = { path = "../libk-device" }
kernel-arch = { path = "../../arch" }
abi-lib = { path = "../../../lib/abi-lib" }
yggdrasil-abi = { path = "../../../lib/abi", features = ["alloc"] }
log = "0.4.20"
atomic_enum = "0.2.0"
crossbeam-queue = { version = "0.3.8", default-features = false, features = ["alloc"] }
futures-util = { version = "0.3.28", default-features = false, features = ["alloc", "async-await"] }
[dependencies.elf]
version = "0.7.2"
git = "https://git.alnyan.me/yggdrasil/yggdrasil-elf.git"
default-features = false
features = ["no_std_stream"]

View File

@ -2,9 +2,10 @@ use core::ops::{Deref, DerefMut};
use device_api::interrupt::IpiMessage; use device_api::interrupt::IpiMessage;
use kernel_arch::{Architecture, ArchitectureImpl, CpuImpl, LocalCpuImpl}; use kernel_arch::{Architecture, ArchitectureImpl, CpuImpl, LocalCpuImpl};
use libk_thread::sched::CpuQueue;
use libk_util::sync::IrqGuard; use libk_util::sync::IrqGuard;
use crate::task::sched::CpuQueue;
/// Kernel wrapper for local CPU info structure. See [kernel_arch::LocalCpuImpl]. /// Kernel wrapper for local CPU info structure. See [kernel_arch::LocalCpuImpl].
#[repr(transparent)] #[repr(transparent)]
pub struct LocalCpu<'a>(LocalCpuImpl<'a, CpuQueue>); pub struct LocalCpu<'a>(LocalCpuImpl<'a, CpuQueue>);

View File

@ -15,12 +15,15 @@
inline_const, inline_const,
trait_alias, trait_alias,
if_let_guard, if_let_guard,
trait_upcasting trait_upcasting,
arbitrary_self_types,
slice_split_once
)] )]
extern crate alloc; extern crate alloc;
pub use libk_thread::{block, cpu_count, cpu_index, runtime}; #[macro_use]
pub mod task;
pub mod arch; pub mod arch;
pub mod vfs; pub mod vfs;

View File

@ -16,7 +16,7 @@ use libk_mm::{
use libk_util::io::{Read, Seek}; use libk_util::io::{Read, Seek};
use yggdrasil_abi::{error::Error, io::SeekFrom}; use yggdrasil_abi::{error::Error, io::SeekFrom};
use crate::{ use crate::task::{
process::ProcessImage, process::ProcessImage,
types::{ProcessTlsInfo, ProcessTlsLayout}, types::{ProcessTlsInfo, ProcessTlsLayout},
}; };

View File

@ -21,7 +21,7 @@ use yggdrasil_abi::{
process::{ProcessGroupId, ProgramArgumentInner}, process::{ProcessGroupId, ProgramArgumentInner},
}; };
use crate::{ use crate::task::{
mem::ForeignPointer, mem::ForeignPointer,
process::{ProcessImage, ProcessImpl, ProcessIo, ProcessManager}, process::{ProcessImage, ProcessImpl, ProcessIo, ProcessManager},
thread::Thread, thread::Thread,

View File

@ -177,7 +177,7 @@ pub fn validate_user_region(
len: usize, len: usize,
_need_write: bool, _need_write: bool,
) -> Result<(), Error> { ) -> Result<(), Error> {
if base + len > crate::mem::KERNEL_VIRT_OFFSET { if base + len > crate::task::mem::KERNEL_VIRT_OFFSET {
panic!("Invalid argument"); panic!("Invalid argument");
} }

View File

@ -1,15 +1,13 @@
#![no_std] // #![no_std]
#![feature( // #![feature(
trait_alias, // trait_alias,
never_type, // never_type,
inline_const, // inline_const,
arbitrary_self_types, // arbitrary_self_types,
slice_ptr_get, // slice_ptr_get,
slice_split_once, // slice_split_once,
let_chains // let_chains
)] // )]
extern crate alloc;
use api::__signal_process_group; use api::__signal_process_group;
use kernel_arch::{Architecture, ArchitectureImpl, KernelTableManagerImpl}; use kernel_arch::{Architecture, ArchitectureImpl, KernelTableManagerImpl};

View File

@ -25,7 +25,7 @@ use yggdrasil_abi::{
process::{ExitCode, ProcessGroupId, ProcessId, Signal, ThreadSpawnOptions}, process::{ExitCode, ProcessGroupId, ProcessId, Signal, ThreadSpawnOptions},
}; };
use crate::{ use crate::task::{
futex::UserspaceMutex, futex::UserspaceMutex,
thread::Thread, thread::Thread,
types::{AllocateProcessId, ProcessTlsInfo}, types::{AllocateProcessId, ProcessTlsInfo},

View File

@ -6,7 +6,7 @@ use kernel_arch::task::TaskContext;
use libk_util::waker::WakeWeak; use libk_util::waker::WakeWeak;
use yggdrasil_abi::error::Error; use yggdrasil_abi::error::Error;
use crate::{thread::Thread, TaskContextImpl}; use crate::task::{thread::Thread, TaskContextImpl};
use super::{ use super::{
task::{Task, Termination}, task::{Task, Termination},

View File

@ -1,7 +1,7 @@
#[macro_export] #[macro_export]
macro_rules! block { macro_rules! block {
($($stmt:tt)*) => { ($($stmt:tt)*) => {
$crate::runtime::run_to_completion(alloc::boxed::Box::pin(async move { $crate::task::runtime::run_to_completion(alloc::boxed::Box::pin(async move {
$($stmt)* $($stmt)*
})) }))
}; };

View File

@ -3,7 +3,7 @@ use crossbeam_queue::ArrayQueue;
use libk_util::{sync::IrqGuard, OneTimeInit}; use libk_util::{sync::IrqGuard, OneTimeInit};
use yggdrasil_abi::error::Error; use yggdrasil_abi::error::Error;
use crate::thread::Thread; use crate::task::thread::Thread;
use super::task::Task; use super::task::Task;

View File

@ -8,7 +8,7 @@ use kernel_arch::{
}; };
use libk_util::{sync::IrqGuard, OneTimeInit}; use libk_util::{sync::IrqGuard, OneTimeInit};
use crate::{thread::Thread, TaskContextImpl, ThreadId, ThreadState}; use crate::task::{thread::Thread, TaskContextImpl, ThreadId, ThreadState};
/// Per-CPU queue /// Per-CPU queue
pub struct CpuQueue { pub struct CpuQueue {

View File

@ -12,7 +12,7 @@ use kernel_arch::task::Scheduler;
use libk_util::{sync::LockMethod, waker::QueueWaker}; use libk_util::{sync::LockMethod, waker::QueueWaker};
use yggdrasil_abi::error::Error; use yggdrasil_abi::error::Error;
use crate::{sched::CpuQueue, thread::Thread}; use crate::task::{sched::CpuQueue, thread::Thread};
struct ThreadedMutexInner { struct ThreadedMutexInner {
queue: ArrayQueue<Arc<Thread>>, queue: ArrayQueue<Arc<Thread>>,

View File

@ -21,7 +21,7 @@ use yggdrasil_abi::{
process::{ExitCode, ProcessId, Signal, SignalEntryData}, process::{ExitCode, ProcessId, Signal, SignalEntryData},
}; };
use crate::{ use crate::task::{
mem::ForeignPointer, mem::ForeignPointer,
process::{Process, ProcessManager}, process::{Process, ProcessManager},
sched::CpuQueue, sched::CpuQueue,

View File

@ -11,14 +11,16 @@ use alloc::{
sync::Arc, sync::Arc,
}; };
use futures_util::{task::AtomicWaker, Future}; use futures_util::{task::AtomicWaker, Future};
use libk_thread::{block, sync::Mutex};
use libk_util::sync::{IrqSafeSpinlock, LockMethod}; use libk_util::sync::{IrqSafeSpinlock, LockMethod};
use yggdrasil_abi::{ use yggdrasil_abi::{
error::Error, error::Error,
io::{ChannelPublisherId, MessageDestination}, io::{ChannelPublisherId, MessageDestination},
}; };
use crate::vfs::{FileReadiness, FileRef}; use crate::{
task::sync::Mutex,
vfs::{FileReadiness, FileRef},
};
/// Describes a channel over which messages can be sent to [Subscription]s /// Describes a channel over which messages can be sent to [Subscription]s
pub struct Channel { pub struct Channel {

View File

@ -6,7 +6,6 @@ use core::{
use alloc::{sync::Arc, vec, vec::Vec}; use alloc::{sync::Arc, vec, vec::Vec};
use futures_util::{task::AtomicWaker, Future}; use futures_util::{task::AtomicWaker, Future};
use libk_thread::block;
use libk_util::sync::IrqSafeSpinlock; use libk_util::sync::IrqSafeSpinlock;
use yggdrasil_abi::error::Error; use yggdrasil_abi::error::Error;

View File

@ -1,14 +1,16 @@
use alloc::{borrow::ToOwned, sync::Arc}; use alloc::{borrow::ToOwned, sync::Arc};
use libk_thread::binary::ProgramLoadSource;
use yggdrasil_abi::{ use yggdrasil_abi::{
error::Error, error::Error,
io::{FileMode, FileType, GroupId, OpenOptions, UserId}, io::{FileMode, FileType, GroupId, OpenOptions, UserId},
path::{Path, PathBuf}, path::{Path, PathBuf},
}; };
use crate::vfs::{ use crate::{
node::{AccessToken, CreateInfo}, task::binary::ProgramLoadSource,
File, FileRef, NodeRef, vfs::{
node::{AccessToken, CreateInfo},
File, FileRef, NodeRef,
},
}; };
/// Describes a general filesystem access /// Describes a general filesystem access

View File

@ -7,11 +7,13 @@ use core::{
use alloc::collections::BTreeMap; use alloc::collections::BTreeMap;
use futures_util::{future::BoxFuture, FutureExt}; use futures_util::{future::BoxFuture, FutureExt};
use libk_thread::{runtime, sync::Mutex};
use libk_util::sync::LockMethod; use libk_util::sync::LockMethod;
use yggdrasil_abi::{error::Error, io::RawFd}; use yggdrasil_abi::{error::Error, io::RawFd};
use crate::vfs::{FileReadiness, FileRef}; use crate::{
task::{runtime, sync::Mutex},
vfs::{FileReadiness, FileRef},
};
/// Poll channel implementation. Allows blocking until a file descriptor signals an event or a /// Poll channel implementation. Allows blocking until a file descriptor signals an event or a
/// timeout is reached. /// timeout is reached.

View File

@ -8,7 +8,6 @@ use core::{
}; };
use alloc::{boxed::Box, sync::Arc}; use alloc::{boxed::Box, sync::Arc};
use libk_thread::{block, signal_process_group};
use libk_util::{ use libk_util::{
ring::{LossyRingQueue, RingBuffer}, ring::{LossyRingQueue, RingBuffer},
sync::{spin_rwlock::IrqSafeRwLock, IrqSafeSpinlock}, sync::{spin_rwlock::IrqSafeRwLock, IrqSafeSpinlock},
@ -22,6 +21,8 @@ use yggdrasil_abi::{
process::{ProcessGroupId, Signal}, process::{ProcessGroupId, Signal},
}; };
use crate::task::signal_process_group;
const CAPACITY: usize = 8192; const CAPACITY: usize = 8192;
struct PtySlaveToMasterHalf { struct PtySlaveToMasterHalf {

View File

@ -7,14 +7,16 @@ use core::{
use alloc::boxed::Box; use alloc::boxed::Box;
use futures_util::FutureExt; use futures_util::FutureExt;
use libk_thread::{
runtime::{self, SleepFuture},
sync::Mutex,
};
use libk_util::sync::LockMethod; use libk_util::sync::LockMethod;
use yggdrasil_abi::error::Error; use yggdrasil_abi::error::Error;
use crate::vfs::{FileReadiness, Write}; use crate::{
task::{
runtime::{self, SleepFuture},
sync::Mutex,
},
vfs::{FileReadiness, Write},
};
/// File-like structure to generate periodic or one-shit events at certain intervals /// File-like structure to generate periodic or one-shit events at certain intervals
pub struct TimerFile { pub struct TimerFile {

View File

@ -7,8 +7,8 @@ use kernel_arch_x86_64::context::IrqFrame;
use libk::{ use libk::{
arch::Cpu, arch::Cpu,
device::{external_interrupt_controller, message_interrupt_controller}, device::{external_interrupt_controller, message_interrupt_controller},
task::thread::Thread,
}; };
use libk_thread::thread::Thread;
use static_assertions::{const_assert, const_assert_eq}; use static_assertions::{const_assert, const_assert_eq};
use crate::task::process::ProcessManagerImpl; use crate::task::process::ProcessManagerImpl;

View File

@ -3,7 +3,7 @@ use core::{arch::global_asm, sync::atomic::Ordering};
use kernel_arch_x86_64::{registers::MSR_IA32_KERNEL_GS_BASE, CPU_COUNT}; use kernel_arch_x86_64::{registers::MSR_IA32_KERNEL_GS_BASE, CPU_COUNT};
use kernel_fs::devfs; use kernel_fs::devfs;
use libk::runtime; use libk::task::runtime;
use tock_registers::interfaces::Writeable; use tock_registers::interfaces::Writeable;
use yboot_proto::{ use yboot_proto::{
v1::{FramebufferOption, MemoryMap}, v1::{FramebufferOption, MemoryMap},

View File

@ -3,8 +3,7 @@ use core::{arch::global_asm, mem::size_of, ptr::addr_of};
use abi::{primitive_enum, process::Signal}; use abi::{primitive_enum, process::Signal};
use kernel_arch_x86_64::{context::ExceptionFrame, registers::CR3}; use kernel_arch_x86_64::{context::ExceptionFrame, registers::CR3};
use libk::arch::Cpu; use libk::{arch::Cpu, task::thread::Thread};
use libk_thread::thread::Thread;
use tock_registers::interfaces::Readable; use tock_registers::interfaces::Readable;
use crate::{arch::x86_64::apic, task::process::ProcessManagerImpl}; use crate::{arch::x86_64::apic, task::process::ProcessManagerImpl};

View File

@ -6,7 +6,7 @@ use device_api::{
timer::MonotonicTimestampProviderDevice, timer::MonotonicTimestampProviderDevice,
Device, Device,
}; };
use libk::{device::external_interrupt_controller, runtime}; use libk::{device::external_interrupt_controller, task::runtime};
use libk_util::sync::IrqSafeSpinlock; use libk_util::sync::IrqSafeSpinlock;
use crate::arch::x86_64::{ use crate::arch::x86_64::{

View File

@ -8,7 +8,7 @@ use kernel_arch_x86_64::{
context::SyscallFrame, context::SyscallFrame,
registers::{MSR_IA32_EFER, MSR_IA32_LSTAR, MSR_IA32_SFMASK, MSR_IA32_STAR}, registers::{MSR_IA32_EFER, MSR_IA32_LSTAR, MSR_IA32_SFMASK, MSR_IA32_STAR},
}; };
use libk_thread::thread::Thread; use libk::task::thread::Thread;
use tock_registers::interfaces::{ReadWriteable, Writeable}; use tock_registers::interfaces::{ReadWriteable, Writeable};
use crate::{ use crate::{

View File

@ -2,7 +2,7 @@
use core::fmt::{self, Arguments}; use core::fmt::{self, Arguments};
use abi::error::Error; use abi::error::Error;
use libk_thread::process::Process; use libk::task::process::Process;
use libk_util::{ring::RingBuffer, sync::IrqSafeSpinlock, StaticVector}; use libk_util::{ring::RingBuffer, sync::IrqSafeSpinlock, StaticVector};
const MAX_DEBUG_SINKS: usize = 4; const MAX_DEBUG_SINKS: usize = 4;
@ -63,7 +63,7 @@ macro_rules! log_print_raw {
macro_rules! log_print { macro_rules! log_print {
($level:expr, $($args:tt)+) => { ($level:expr, $($args:tt)+) => {
log_print_raw!($level, "cpu{}:{}:{}: {}", libk::cpu_index(), file!(), line!(), format_args!($($args)+)) log_print_raw!($level, "cpu{}:{}:{}: {}", libk::task::cpu_index(), file!(), line!(), format_args!($($args)+))
}; };
} }

View File

@ -5,7 +5,7 @@ use core::time::Duration;
use abi::{error::Error, primitive_enum}; use abi::{error::Error, primitive_enum};
use alloc::{vec, vec::Vec}; use alloc::{vec, vec::Vec};
use bitflags::bitflags; use bitflags::bitflags;
use libk::runtime; use libk::task::runtime;
use libk_util::{sync::IrqSafeSpinlock, StaticVector}; use libk_util::{sync::IrqSafeSpinlock, StaticVector};
use crate::debug::DebugSink; use crate::debug::DebugSink;

View File

@ -7,14 +7,13 @@ use core::{
use abi::{error::Error, io::DeviceRequest, process::ProcessId}; use abi::{error::Error, io::DeviceRequest, process::ProcessId};
use device_api::Device; use device_api::Device;
use libk::vfs::block::BlockDevice; use libk::{task::thread::Thread, vfs::block::BlockDevice};
use libk_mm::{ use libk_mm::{
address::{IntoRaw, PhysicalAddress}, address::{IntoRaw, PhysicalAddress},
device::{DeviceMemoryAttributes, DeviceMemoryCaching, RawDeviceMemoryMapping}, device::{DeviceMemoryAttributes, DeviceMemoryCaching, RawDeviceMemoryMapping},
table::{EntryLevel, MapAttributes}, table::{EntryLevel, MapAttributes},
PageProvider, PageProvider,
}; };
use libk_thread::thread::Thread;
use libk_util::sync::IrqSafeSpinlock; use libk_util::sync::IrqSafeSpinlock;
use crate::arch::L3; use crate::arch::L3;

View File

@ -12,7 +12,7 @@ use abi::{
}; };
use device_api::serial::SerialDevice; use device_api::serial::SerialDevice;
use futures_util::Future; use futures_util::Future;
use libk_thread::process::ProcessImpl; use libk::task::process::ProcessImpl;
use libk_util::{ring::RingBuffer, sync::IrqSafeSpinlock, waker::QueueWaker}; use libk_util::{ring::RingBuffer, sync::IrqSafeSpinlock, waker::QueueWaker};
use crate::{proc::io::ProcessIoImpl, task::process::ProcessManagerImpl}; use crate::{proc::io::ProcessIoImpl, task::process::ProcessManagerImpl};

View File

@ -3,9 +3,8 @@
use abi::error::Error; use abi::error::Error;
use alloc::borrow::ToOwned; use alloc::borrow::ToOwned;
use kernel_fs::devfs; use kernel_fs::devfs;
use libk::runtime; use libk::task::{runtime, thread::Thread};
use libk::vfs::{impls::FnSymlink, IoContext, NodeRef}; use libk::vfs::{impls::FnSymlink, IoContext, NodeRef};
use libk_thread::thread::Thread;
use memfs::MemoryFilesystem; use memfs::MemoryFilesystem;
use crate::{ use crate::{

View File

@ -1,8 +1,10 @@
//! Process I/O management //! Process I/O management
use abi::error::Error; use abi::error::Error;
use libk::vfs::{FileSet, IoContext, Node}; use libk::{
use libk_thread::process::ProcessIo; task::process::ProcessIo,
vfs::{FileSet, IoContext, Node},
};
/// I/O context of a process, contains information like root, current directory and file /// I/O context of a process, contains information like root, current directory and file
/// descriptor table /// descriptor table

View File

@ -2,8 +2,7 @@
use abi::{error::Error, path::Path, process::ProcessGroupId}; use abi::{error::Error, path::Path, process::ProcessGroupId};
use alloc::sync::{Arc, Weak}; use alloc::sync::{Arc, Weak};
use libk::vfs::IoContext; use libk::{task::thread::Thread, vfs::IoContext};
use libk_thread::thread::Thread;
use crate::task::process::ProcessImpl; use crate::task::process::ProcessImpl;
@ -20,5 +19,5 @@ pub fn load_binary<P: AsRef<Path>>(
args: &[&str], args: &[&str],
envs: &[&str], envs: &[&str],
) -> Result<(Arc<ProcessImpl>, Arc<Thread>), Error> { ) -> Result<(Arc<ProcessImpl>, Arc<Thread>), Error> {
libk_thread::binary::load(ioctx, group_id, parent, path, args, envs) libk::task::binary::load(ioctx, group_id, parent, path, args, envs)
} }

View File

@ -1,4 +1,4 @@
use libk_thread::{mem::ForeignPointer, thread::Thread}; use libk::task::{mem::ForeignPointer, thread::Thread};
use yggdrasil_abi::error::Error; use yggdrasil_abi::error::Error;
pub(super) fn ref_const<'a, T: Sized>(addr: usize) -> Result<&'a T, Error> { pub(super) fn ref_const<'a, T: Sized>(addr: usize) -> Result<&'a T, Error> {

View File

@ -58,7 +58,12 @@ mod impls {
}; };
use alloc::{boxed::Box, sync::Arc}; use alloc::{boxed::Box, sync::Arc};
use libk::{ use libk::{
block, runtime, block,
task::{
process::{Process, ProcessManager},
runtime,
thread::Thread,
},
vfs::{self, File, IoContext, MessagePayload, Read, Seek, Write}, vfs::{self, File, IoContext, MessagePayload, Read, Seek, Write},
}; };
use ygg_driver_net_core::socket::{RawSocket, TcpListener, TcpSocket, UdpSocket}; use ygg_driver_net_core::socket::{RawSocket, TcpListener, TcpSocket, UdpSocket};
@ -73,10 +78,6 @@ mod impls {
process::VirtualRangeBacking, process::VirtualRangeBacking,
table::{EntryLevelExt, MapAttributes}, table::{EntryLevelExt, MapAttributes},
}; };
use libk_thread::{
process::{Process, ProcessManager},
thread::Thread,
};
use crate::{ use crate::{
arch::L3, arch::L3,

View File

@ -8,11 +8,14 @@ use kernel_arch::{
task::{Scheduler, TaskContext, Termination}, task::{Scheduler, TaskContext, Termination},
Architecture, ArchitectureImpl, Architecture, ArchitectureImpl,
}; };
use libk::{arch::Cpu, runtime}; use libk::{
use libk_thread::{ arch::Cpu,
sched::{init_queues, CpuQueue}, task::{
thread::Thread, runtime,
TaskContextImpl, sched::{init_queues, CpuQueue},
thread::Thread,
TaskContextImpl,
},
}; };
use libk_util::sync::SpinFence; use libk_util::sync::SpinFence;

View File

@ -2,12 +2,12 @@
use abi::process::{ProcessGroupId, ProcessId, Signal}; use abi::process::{ProcessGroupId, ProcessId, Signal};
use alloc::{collections::BTreeMap, sync::Arc}; use alloc::{collections::BTreeMap, sync::Arc};
use libk_thread::process::{Process, ProcessManager}; use libk::task::process::{Process, ProcessManager};
use libk_util::sync::spin_rwlock::IrqSafeRwLock; use libk_util::sync::spin_rwlock::IrqSafeRwLock;
use crate::proc::io::ProcessIoImpl; use crate::proc::io::ProcessIoImpl;
pub use libk_thread::{ pub use libk::task::{
process::ProcessImage, process::ProcessImage,
types::{ProcessTlsInfo, ProcessTlsLayout}, types::{ProcessTlsInfo, ProcessTlsLayout},
}; };
@ -16,7 +16,7 @@ pub use libk_thread::{
pub struct ProcessManagerImpl; pub struct ProcessManagerImpl;
/// Alias type for [libk_thread::process::ProcessImpl] /// Alias type for [libk_thread::process::ProcessImpl]
pub type ProcessImpl = libk_thread::process::ProcessImpl<ProcessManagerImpl, ProcessIoImpl>; pub type ProcessImpl = libk::task::process::ProcessImpl<ProcessManagerImpl, ProcessIoImpl>;
static PROCESSES: IrqSafeRwLock<BTreeMap<ProcessId, Arc<ProcessImpl>>> = static PROCESSES: IrqSafeRwLock<BTreeMap<ProcessId, Arc<ProcessImpl>>> =
IrqSafeRwLock::new(BTreeMap::new()); IrqSafeRwLock::new(BTreeMap::new());