From 3d04d30eb418ffb62c8027fe09cdfa8b27704ad0 Mon Sep 17 00:00:00 2001 From: Mark Poliakov Date: Wed, 13 Mar 2024 19:14:54 +0200 Subject: [PATCH] refactor: integrate libk-thread into libk --- Cargo.lock | 30 ++++--------------- kernel/Cargo.toml | 1 - kernel/driver/block/ahci/Cargo.toml | 1 - kernel/driver/block/ahci/src/lib.rs | 6 ++-- kernel/driver/block/nvme/Cargo.toml | 1 - kernel/driver/block/nvme/src/drive.rs | 2 +- kernel/driver/block/nvme/src/lib.rs | 2 +- kernel/driver/bus/usb/Cargo.toml | 2 +- kernel/driver/bus/usb/src/class_driver/mod.rs | 2 +- kernel/driver/input/Cargo.toml | 1 - kernel/driver/input/src/lib.rs | 6 ++-- kernel/driver/net/core/Cargo.toml | 1 - kernel/driver/net/core/src/l3/arp.rs | 2 +- kernel/driver/net/core/src/lib.rs | 2 +- kernel/driver/net/core/src/socket.rs | 10 +++---- kernel/driver/usb/xhci/Cargo.toml | 2 +- kernel/driver/usb/xhci/src/controller.rs | 2 +- kernel/libk/Cargo.toml | 11 +++++-- kernel/libk/libk-thread/Cargo.toml | 26 ---------------- kernel/libk/src/arch.rs | 3 +- kernel/libk/src/lib.rs | 7 +++-- .../src => src/task}/binary/elf.rs | 2 +- .../src => src/task}/binary/mod.rs | 2 +- .../{libk-thread/src => src/task}/futex.rs | 0 .../libk/{libk-thread/src => src/task}/mem.rs | 2 +- .../src/lib.rs => src/task/mod.rs} | 22 +++++++------- .../{libk-thread/src => src/task}/process.rs | 2 +- .../src => src/task}/runtime/executor.rs | 2 +- .../src => src/task}/runtime/macros.rs | 2 +- .../src => src/task}/runtime/mod.rs | 0 .../src => src/task}/runtime/task.rs | 0 .../src => src/task}/runtime/task_queue.rs | 2 +- .../src => src/task}/runtime/timer.rs | 0 .../{libk-thread/src => src/task}/sched.rs | 2 +- .../{libk-thread/src => src/task}/sync.rs | 2 +- .../{libk-thread/src => src/task}/thread.rs | 2 +- .../{libk-thread/src => src/task}/types.rs | 0 kernel/libk/src/vfs/channel.rs | 6 ++-- kernel/libk/src/vfs/file/pipe.rs | 1 - kernel/libk/src/vfs/ioctx.rs | 10 ++++--- kernel/libk/src/vfs/poll.rs | 6 ++-- kernel/libk/src/vfs/pty.rs | 3 +- kernel/libk/src/vfs/timer.rs | 12 ++++---- kernel/src/arch/x86_64/apic/mod.rs | 2 +- kernel/src/arch/x86_64/boot/mod.rs | 2 +- kernel/src/arch/x86_64/exception.rs | 3 +- kernel/src/arch/x86_64/peripherals/i8253.rs | 2 +- kernel/src/arch/x86_64/syscall.rs | 2 +- kernel/src/debug.rs | 4 +-- kernel/src/device/display/console.rs | 2 +- kernel/src/device/display/linear_fb.rs | 3 +- kernel/src/device/tty.rs | 2 +- kernel/src/init.rs | 3 +- kernel/src/proc/io.rs | 6 ++-- kernel/src/proc/mod.rs | 5 ++-- kernel/src/syscall/arg.rs | 2 +- kernel/src/syscall/mod.rs | 11 +++---- kernel/src/task/mod.rs | 13 ++++---- kernel/src/task/process.rs | 6 ++-- 59 files changed, 120 insertions(+), 148 deletions(-) delete mode 100644 kernel/libk/libk-thread/Cargo.toml rename kernel/libk/{libk-thread/src => src/task}/binary/elf.rs (99%) rename kernel/libk/{libk-thread/src => src/task}/binary/mod.rs (99%) rename kernel/libk/{libk-thread/src => src/task}/futex.rs (100%) rename kernel/libk/{libk-thread/src => src/task}/mem.rs (99%) rename kernel/libk/{libk-thread/src/lib.rs => src/task/mod.rs} (85%) rename kernel/libk/{libk-thread/src => src/task}/process.rs (99%) rename kernel/libk/{libk-thread/src => src/task}/runtime/executor.rs (97%) rename kernel/libk/{libk-thread/src => src/task}/runtime/macros.rs (55%) rename kernel/libk/{libk-thread/src => src/task}/runtime/mod.rs (100%) rename kernel/libk/{libk-thread/src => src/task}/runtime/task.rs (100%) rename kernel/libk/{libk-thread/src => src/task}/runtime/task_queue.rs (98%) rename kernel/libk/{libk-thread/src => src/task}/runtime/timer.rs (100%) rename kernel/libk/{libk-thread/src => src/task}/sched.rs (98%) rename kernel/libk/{libk-thread/src => src/task}/sync.rs (98%) rename kernel/libk/{libk-thread/src => src/task}/thread.rs (99%) rename kernel/libk/{libk-thread/src => src/task}/types.rs (100%) diff --git a/Cargo.lock b/Cargo.lock index 0ce5bc8b..8160d5f1 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -757,13 +757,15 @@ dependencies = [ name = "libk" version = "0.1.0" dependencies = [ + "abi-lib", + "atomic_enum", "crossbeam-queue", "device-api", + "elf 0.7.2", "futures-util", "kernel-arch", "libk-device", "libk-mm", - "libk-thread", "libk-util", "log", "yggdrasil-abi", @@ -801,23 +803,6 @@ dependencies = [ "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]] name = "libk-util" version = "0.1.0" @@ -1732,7 +1717,6 @@ dependencies = [ "kernel-fs", "libk", "libk-mm", - "libk-thread", "libk-util", "log", "memoffset 0.9.0", @@ -1748,7 +1732,6 @@ version = "0.1.0" dependencies = [ "libk", "libk-mm", - "libk-thread", "libk-util", "yggdrasil-abi", ] @@ -1762,7 +1745,6 @@ dependencies = [ "libk", "libk-device", "libk-mm", - "libk-thread", "libk-util", "log", "serde", @@ -1791,7 +1773,6 @@ dependencies = [ "kernel-fs", "libk", "libk-mm", - "libk-thread", "libk-util", "log", "static_assertions", @@ -1822,8 +1803,8 @@ dependencies = [ "bytemuck", "device-api", "futures-util", + "libk", "libk-mm", - "libk-thread", "libk-util", "log", "ygg_driver_input", @@ -1838,8 +1819,8 @@ dependencies = [ "bytemuck", "device-api", "futures-util", + "libk", "libk-mm", - "libk-thread", "libk-util", "log", "tock-registers 0.9.0", @@ -1921,7 +1902,6 @@ dependencies = [ "libk", "libk-device", "libk-mm", - "libk-thread", "libk-util", "linked_list_allocator", "log", diff --git a/kernel/Cargo.toml b/kernel/Cargo.toml index 8169aefb..d75d61d9 100644 --- a/kernel/Cargo.toml +++ b/kernel/Cargo.toml @@ -17,7 +17,6 @@ device-api = { path = "lib/device-api", features = ["derive"] } libk = { path = "libk" } libk-util = { path = "libk/libk-util" } libk-mm = { path = "libk/libk-mm" } -libk-thread = { path = "libk/libk-thread" } libk-device = { path = "libk/libk-device" } memtables = { path = "lib/memtables" } vmalloc = { path = "lib/vmalloc" } diff --git a/kernel/driver/block/ahci/Cargo.toml b/kernel/driver/block/ahci/Cargo.toml index 58179082..282653a8 100644 --- a/kernel/driver/block/ahci/Cargo.toml +++ b/kernel/driver/block/ahci/Cargo.toml @@ -7,7 +7,6 @@ authors = ["Mark Poliakov "] [dependencies] yggdrasil-abi = { path = "../../../../lib/abi" } libk-mm = { path = "../../../libk/libk-mm" } -libk-thread = { path = "../../../libk/libk-thread" } libk-util = { path = "../../../libk/libk-util" } libk = { path = "../../../libk" } device-api = { path = "../../../lib/device-api", features = ["derive"] } diff --git a/kernel/driver/block/ahci/src/lib.rs b/kernel/driver/block/ahci/src/lib.rs index c3a061f0..8bb19628 100644 --- a/kernel/driver/block/ahci/src/lib.rs +++ b/kernel/driver/block/ahci/src/lib.rs @@ -13,9 +13,11 @@ use device_api::{ }; use error::AhciError; 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_thread::runtime; use libk_util::{sync::IrqSafeSpinlock, OneTimeInit}; use port::AhciPort; use regs::{PortRegs, Regs}; diff --git a/kernel/driver/block/nvme/Cargo.toml b/kernel/driver/block/nvme/Cargo.toml index f2594f1f..49a7b968 100644 --- a/kernel/driver/block/nvme/Cargo.toml +++ b/kernel/driver/block/nvme/Cargo.toml @@ -7,7 +7,6 @@ authors = ["Mark Poliakov "] [dependencies] yggdrasil-abi = { path = "../../../../lib/abi" } libk-util = { path = "../../../libk/libk-util" } -libk-thread = { path = "../../../libk/libk-thread" } libk-mm = { path = "../../../libk/libk-mm" } libk = { path = "../../../libk" } device-api = { path = "../../../lib/device-api", features = ["derive"] } diff --git a/kernel/driver/block/nvme/src/drive.rs b/kernel/driver/block/nvme/src/drive.rs index b05d20f9..75d9ba00 100644 --- a/kernel/driver/block/nvme/src/drive.rs +++ b/kernel/driver/block/nvme/src/drive.rs @@ -2,11 +2,11 @@ use core::task::Poll; use alloc::{boxed::Box, format}; use kernel_fs::devfs; +use libk::task::cpu_index; use libk::vfs::block::{ probe_partitions, IoOperation, IoRequest, IoSubmissionId, NgBlockDevice, NgBlockDeviceWrapper, }; use libk_mm::address::AsPhysicalAddress; -use libk_thread::cpu_index; use libk_util::waker::QueueWaker; use yggdrasil_abi::error::Error; diff --git a/kernel/driver/block/nvme/src/lib.rs b/kernel/driver/block/nvme/src/lib.rs index 56467f78..7f5f0b2c 100644 --- a/kernel/driver/block/nvme/src/lib.rs +++ b/kernel/driver/block/nvme/src/lib.rs @@ -17,11 +17,11 @@ use device_api::{ Device, }; use drive::NvmeDrive; +use libk::task::{cpu_count, cpu_index, runtime}; use libk_mm::{ address::{IntoRaw, PhysicalAddress}, device::DeviceMemoryIo, }; -use libk_thread::{cpu_count, cpu_index, runtime}; use libk_util::{ sync::{IrqGuard, IrqSafeSpinlock}, OneTimeInit, diff --git a/kernel/driver/bus/usb/Cargo.toml b/kernel/driver/bus/usb/Cargo.toml index e9789d97..b3f27592 100644 --- a/kernel/driver/bus/usb/Cargo.toml +++ b/kernel/driver/bus/usb/Cargo.toml @@ -11,7 +11,7 @@ ygg_driver_input = { path = "../../input" } libk-util = { path = "../../../libk/libk-util" } libk-mm = { path = "../../../libk/libk-mm" } -libk-thread = { path = "../../../libk/libk-thread" } +libk = { path = "../../../libk" } log = "0.4.20" bytemuck = { version = "1.14.0", features = ["derive"] } diff --git a/kernel/driver/bus/usb/src/class_driver/mod.rs b/kernel/driver/bus/usb/src/class_driver/mod.rs index 8b615b24..935a2ac3 100644 --- a/kernel/driver/bus/usb/src/class_driver/mod.rs +++ b/kernel/driver/bus/usb/src/class_driver/mod.rs @@ -1,6 +1,6 @@ use alloc::{sync::Arc, vec::Vec}; use futures_util::future::BoxFuture; -use libk_thread::runtime; +use libk::task::runtime; use libk_util::sync::spin_rwlock::IrqSafeRwLock; use crate::{ diff --git a/kernel/driver/input/Cargo.toml b/kernel/driver/input/Cargo.toml index b8ea0a24..17e06351 100644 --- a/kernel/driver/input/Cargo.toml +++ b/kernel/driver/input/Cargo.toml @@ -6,6 +6,5 @@ edition = "2021" [dependencies] yggdrasil-abi = { path = "../../../lib/abi" } libk-util = { path = "../../libk/libk-util" } -libk-thread = { path = "../../libk/libk-thread" } libk-mm = { path = "../../libk/libk-mm" } libk = { path = "../../libk" } diff --git a/kernel/driver/input/src/lib.rs b/kernel/driver/input/src/lib.rs index b2943090..6ec5611b 100644 --- a/kernel/driver/input/src/lib.rs +++ b/kernel/driver/input/src/lib.rs @@ -4,8 +4,10 @@ extern crate alloc; use core::task::{Context, Poll}; -use libk::vfs::{CharDevice, FileReadiness}; -use libk_thread::block; +use libk::{ + block, + vfs::{CharDevice, FileReadiness}, +}; use libk_util::ring::LossyRingQueue; use yggdrasil_abi::{ error::Error, diff --git a/kernel/driver/net/core/Cargo.toml b/kernel/driver/net/core/Cargo.toml index ae8b489a..2a66175a 100644 --- a/kernel/driver/net/core/Cargo.toml +++ b/kernel/driver/net/core/Cargo.toml @@ -7,7 +7,6 @@ edition = "2021" yggdrasil-abi = { path = "../../../../lib/abi", features = ["serde_kernel", "bytemuck"] } libk-mm = { path = "../../../libk/libk-mm" } libk-util = { path = "../../../libk/libk-util" } -libk-thread = { path = "../../../libk/libk-thread" } libk-device = { path = "../../../libk/libk-device" } libk = { path = "../../../libk" } diff --git a/kernel/driver/net/core/src/l3/arp.rs b/kernel/driver/net/core/src/l3/arp.rs index cf4dbb6f..03f04da6 100644 --- a/kernel/driver/net/core/src/l3/arp.rs +++ b/kernel/driver/net/core/src/l3/arp.rs @@ -7,7 +7,7 @@ use core::{ }; use alloc::{boxed::Box, collections::BTreeMap}; -use libk_thread::runtime; +use libk::task::runtime; use libk_util::{sync::spin_rwlock::IrqSafeRwLock, waker::QueueWaker}; use yggdrasil_abi::{ error::Error, diff --git a/kernel/driver/net/core/src/lib.rs b/kernel/driver/net/core/src/lib.rs index f3d50deb..8590f417 100644 --- a/kernel/driver/net/core/src/lib.rs +++ b/kernel/driver/net/core/src/lib.rs @@ -10,8 +10,8 @@ use alloc::sync::Arc; use bytemuck::Pod; use ethernet::L2Packet; use l3::L3Packet; +use libk::task::runtime; use libk_mm::PageBox; -use libk_thread::runtime; use libk_util::queue::UnboundedMpmcQueue; use yggdrasil_abi::{error::Error, net::protocols::EthernetFrame}; diff --git a/kernel/driver/net/core/src/socket.rs b/kernel/driver/net/core/src/socket.rs index e6dff7f0..d7196bc1 100644 --- a/kernel/driver/net/core/src/socket.rs +++ b/kernel/driver/net/core/src/socket.rs @@ -7,13 +7,13 @@ use core::{ }; 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_mm::PageBox; -use libk_thread::{ - block, - runtime::{run_with_timeout, FutureTimeout}, -}; use libk_util::{ queue::BoundedMpmcQueue, sync::{ diff --git a/kernel/driver/usb/xhci/Cargo.toml b/kernel/driver/usb/xhci/Cargo.toml index ffae1444..73174b86 100644 --- a/kernel/driver/usb/xhci/Cargo.toml +++ b/kernel/driver/usb/xhci/Cargo.toml @@ -12,7 +12,7 @@ ygg_driver_usb = { path = "../../bus/usb" } libk-util = { path = "../../../libk/libk-util" } 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" } diff --git a/kernel/driver/usb/xhci/src/controller.rs b/kernel/driver/usb/xhci/src/controller.rs index 787a9fb0..346d7981 100644 --- a/kernel/driver/usb/xhci/src/controller.rs +++ b/kernel/driver/usb/xhci/src/controller.rs @@ -4,11 +4,11 @@ use alloc::{boxed::Box, collections::BTreeMap, sync::Arc, vec, vec::Vec}; use atomic_enum::atomic_enum; use device_api::{interrupt::InterruptHandler, Device}; use futures_util::task::AtomicWaker; +use libk::task::runtime::{self, FutureTimeout}; use libk_mm::{ address::{AsPhysicalAddress, PhysicalAddress}, PageBox, }; -use libk_thread::runtime::{self, FutureTimeout}; use libk_util::{sync::spin_rwlock::IrqSafeRwLock, OneTimeInit}; use ygg_driver_usb::{ bus::UsbBusManager, diff --git a/kernel/libk/Cargo.toml b/kernel/libk/Cargo.toml index 5f903cda..20aec27f 100644 --- a/kernel/libk/Cargo.toml +++ b/kernel/libk/Cargo.toml @@ -7,13 +7,20 @@ authors = ["Mark Poliakov "] [dependencies] libk-mm = { path = "libk-mm" } libk-util = { path = "libk-util" } -libk-thread = { path = "libk-thread" } libk-device = { path = "libk-device" } 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"] } log = "0.4.20" +atomic_enum = "0.2.0" futures-util = { version = "0.3.28", default-features = false, features = ["alloc", "async-await"] } 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"] diff --git a/kernel/libk/libk-thread/Cargo.toml b/kernel/libk/libk-thread/Cargo.toml deleted file mode 100644 index 1ca8f573..00000000 --- a/kernel/libk/libk-thread/Cargo.toml +++ /dev/null @@ -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"] diff --git a/kernel/libk/src/arch.rs b/kernel/libk/src/arch.rs index f61329e9..6c9eb8a3 100644 --- a/kernel/libk/src/arch.rs +++ b/kernel/libk/src/arch.rs @@ -2,9 +2,10 @@ use core::ops::{Deref, DerefMut}; use device_api::interrupt::IpiMessage; use kernel_arch::{Architecture, ArchitectureImpl, CpuImpl, LocalCpuImpl}; -use libk_thread::sched::CpuQueue; use libk_util::sync::IrqGuard; +use crate::task::sched::CpuQueue; + /// Kernel wrapper for local CPU info structure. See [kernel_arch::LocalCpuImpl]. #[repr(transparent)] pub struct LocalCpu<'a>(LocalCpuImpl<'a, CpuQueue>); diff --git a/kernel/libk/src/lib.rs b/kernel/libk/src/lib.rs index 1765213f..173b77a2 100644 --- a/kernel/libk/src/lib.rs +++ b/kernel/libk/src/lib.rs @@ -15,12 +15,15 @@ inline_const, trait_alias, if_let_guard, - trait_upcasting + trait_upcasting, + arbitrary_self_types, + slice_split_once )] extern crate alloc; -pub use libk_thread::{block, cpu_count, cpu_index, runtime}; +#[macro_use] +pub mod task; pub mod arch; pub mod vfs; diff --git a/kernel/libk/libk-thread/src/binary/elf.rs b/kernel/libk/src/task/binary/elf.rs similarity index 99% rename from kernel/libk/libk-thread/src/binary/elf.rs rename to kernel/libk/src/task/binary/elf.rs index 0963e090..78e0debd 100644 --- a/kernel/libk/libk-thread/src/binary/elf.rs +++ b/kernel/libk/src/task/binary/elf.rs @@ -16,7 +16,7 @@ use libk_mm::{ use libk_util::io::{Read, Seek}; use yggdrasil_abi::{error::Error, io::SeekFrom}; -use crate::{ +use crate::task::{ process::ProcessImage, types::{ProcessTlsInfo, ProcessTlsLayout}, }; diff --git a/kernel/libk/libk-thread/src/binary/mod.rs b/kernel/libk/src/task/binary/mod.rs similarity index 99% rename from kernel/libk/libk-thread/src/binary/mod.rs rename to kernel/libk/src/task/binary/mod.rs index 1e9f5a31..4c7c81c8 100644 --- a/kernel/libk/libk-thread/src/binary/mod.rs +++ b/kernel/libk/src/task/binary/mod.rs @@ -21,7 +21,7 @@ use yggdrasil_abi::{ process::{ProcessGroupId, ProgramArgumentInner}, }; -use crate::{ +use crate::task::{ mem::ForeignPointer, process::{ProcessImage, ProcessImpl, ProcessIo, ProcessManager}, thread::Thread, diff --git a/kernel/libk/libk-thread/src/futex.rs b/kernel/libk/src/task/futex.rs similarity index 100% rename from kernel/libk/libk-thread/src/futex.rs rename to kernel/libk/src/task/futex.rs diff --git a/kernel/libk/libk-thread/src/mem.rs b/kernel/libk/src/task/mem.rs similarity index 99% rename from kernel/libk/libk-thread/src/mem.rs rename to kernel/libk/src/task/mem.rs index 0631e33c..6dcbb872 100644 --- a/kernel/libk/libk-thread/src/mem.rs +++ b/kernel/libk/src/task/mem.rs @@ -177,7 +177,7 @@ pub fn validate_user_region( len: usize, _need_write: bool, ) -> Result<(), Error> { - if base + len > crate::mem::KERNEL_VIRT_OFFSET { + if base + len > crate::task::mem::KERNEL_VIRT_OFFSET { panic!("Invalid argument"); } diff --git a/kernel/libk/libk-thread/src/lib.rs b/kernel/libk/src/task/mod.rs similarity index 85% rename from kernel/libk/libk-thread/src/lib.rs rename to kernel/libk/src/task/mod.rs index 43a4debb..27491687 100644 --- a/kernel/libk/libk-thread/src/lib.rs +++ b/kernel/libk/src/task/mod.rs @@ -1,15 +1,13 @@ -#![no_std] -#![feature( - trait_alias, - never_type, - inline_const, - arbitrary_self_types, - slice_ptr_get, - slice_split_once, - let_chains -)] - -extern crate alloc; +// #![no_std] +// #![feature( +// trait_alias, +// never_type, +// inline_const, +// arbitrary_self_types, +// slice_ptr_get, +// slice_split_once, +// let_chains +// )] use api::__signal_process_group; use kernel_arch::{Architecture, ArchitectureImpl, KernelTableManagerImpl}; diff --git a/kernel/libk/libk-thread/src/process.rs b/kernel/libk/src/task/process.rs similarity index 99% rename from kernel/libk/libk-thread/src/process.rs rename to kernel/libk/src/task/process.rs index 15c75192..a24bd715 100644 --- a/kernel/libk/libk-thread/src/process.rs +++ b/kernel/libk/src/task/process.rs @@ -25,7 +25,7 @@ use yggdrasil_abi::{ process::{ExitCode, ProcessGroupId, ProcessId, Signal, ThreadSpawnOptions}, }; -use crate::{ +use crate::task::{ futex::UserspaceMutex, thread::Thread, types::{AllocateProcessId, ProcessTlsInfo}, diff --git a/kernel/libk/libk-thread/src/runtime/executor.rs b/kernel/libk/src/task/runtime/executor.rs similarity index 97% rename from kernel/libk/libk-thread/src/runtime/executor.rs rename to kernel/libk/src/task/runtime/executor.rs index debf16b6..c2ca0efe 100644 --- a/kernel/libk/libk-thread/src/runtime/executor.rs +++ b/kernel/libk/src/task/runtime/executor.rs @@ -6,7 +6,7 @@ use kernel_arch::task::TaskContext; use libk_util::waker::WakeWeak; use yggdrasil_abi::error::Error; -use crate::{thread::Thread, TaskContextImpl}; +use crate::task::{thread::Thread, TaskContextImpl}; use super::{ task::{Task, Termination}, diff --git a/kernel/libk/libk-thread/src/runtime/macros.rs b/kernel/libk/src/task/runtime/macros.rs similarity index 55% rename from kernel/libk/libk-thread/src/runtime/macros.rs rename to kernel/libk/src/task/runtime/macros.rs index 00c7da9b..a6dddfdf 100644 --- a/kernel/libk/libk-thread/src/runtime/macros.rs +++ b/kernel/libk/src/task/runtime/macros.rs @@ -1,7 +1,7 @@ #[macro_export] macro_rules! block { ($($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)* })) }; diff --git a/kernel/libk/libk-thread/src/runtime/mod.rs b/kernel/libk/src/task/runtime/mod.rs similarity index 100% rename from kernel/libk/libk-thread/src/runtime/mod.rs rename to kernel/libk/src/task/runtime/mod.rs diff --git a/kernel/libk/libk-thread/src/runtime/task.rs b/kernel/libk/src/task/runtime/task.rs similarity index 100% rename from kernel/libk/libk-thread/src/runtime/task.rs rename to kernel/libk/src/task/runtime/task.rs diff --git a/kernel/libk/libk-thread/src/runtime/task_queue.rs b/kernel/libk/src/task/runtime/task_queue.rs similarity index 98% rename from kernel/libk/libk-thread/src/runtime/task_queue.rs rename to kernel/libk/src/task/runtime/task_queue.rs index fa5cf6fe..45b0479e 100644 --- a/kernel/libk/libk-thread/src/runtime/task_queue.rs +++ b/kernel/libk/src/task/runtime/task_queue.rs @@ -3,7 +3,7 @@ use crossbeam_queue::ArrayQueue; use libk_util::{sync::IrqGuard, OneTimeInit}; use yggdrasil_abi::error::Error; -use crate::thread::Thread; +use crate::task::thread::Thread; use super::task::Task; diff --git a/kernel/libk/libk-thread/src/runtime/timer.rs b/kernel/libk/src/task/runtime/timer.rs similarity index 100% rename from kernel/libk/libk-thread/src/runtime/timer.rs rename to kernel/libk/src/task/runtime/timer.rs diff --git a/kernel/libk/libk-thread/src/sched.rs b/kernel/libk/src/task/sched.rs similarity index 98% rename from kernel/libk/libk-thread/src/sched.rs rename to kernel/libk/src/task/sched.rs index 09a5d7c2..25ab177d 100644 --- a/kernel/libk/libk-thread/src/sched.rs +++ b/kernel/libk/src/task/sched.rs @@ -8,7 +8,7 @@ use kernel_arch::{ }; use libk_util::{sync::IrqGuard, OneTimeInit}; -use crate::{thread::Thread, TaskContextImpl, ThreadId, ThreadState}; +use crate::task::{thread::Thread, TaskContextImpl, ThreadId, ThreadState}; /// Per-CPU queue pub struct CpuQueue { diff --git a/kernel/libk/libk-thread/src/sync.rs b/kernel/libk/src/task/sync.rs similarity index 98% rename from kernel/libk/libk-thread/src/sync.rs rename to kernel/libk/src/task/sync.rs index 1b72581e..10339764 100644 --- a/kernel/libk/libk-thread/src/sync.rs +++ b/kernel/libk/src/task/sync.rs @@ -12,7 +12,7 @@ use kernel_arch::task::Scheduler; use libk_util::{sync::LockMethod, waker::QueueWaker}; use yggdrasil_abi::error::Error; -use crate::{sched::CpuQueue, thread::Thread}; +use crate::task::{sched::CpuQueue, thread::Thread}; struct ThreadedMutexInner { queue: ArrayQueue>, diff --git a/kernel/libk/libk-thread/src/thread.rs b/kernel/libk/src/task/thread.rs similarity index 99% rename from kernel/libk/libk-thread/src/thread.rs rename to kernel/libk/src/task/thread.rs index 5bb2aee3..4a818718 100644 --- a/kernel/libk/libk-thread/src/thread.rs +++ b/kernel/libk/src/task/thread.rs @@ -21,7 +21,7 @@ use yggdrasil_abi::{ process::{ExitCode, ProcessId, Signal, SignalEntryData}, }; -use crate::{ +use crate::task::{ mem::ForeignPointer, process::{Process, ProcessManager}, sched::CpuQueue, diff --git a/kernel/libk/libk-thread/src/types.rs b/kernel/libk/src/task/types.rs similarity index 100% rename from kernel/libk/libk-thread/src/types.rs rename to kernel/libk/src/task/types.rs diff --git a/kernel/libk/src/vfs/channel.rs b/kernel/libk/src/vfs/channel.rs index 5367bd22..8a1fceef 100644 --- a/kernel/libk/src/vfs/channel.rs +++ b/kernel/libk/src/vfs/channel.rs @@ -11,14 +11,16 @@ use alloc::{ sync::Arc, }; use futures_util::{task::AtomicWaker, Future}; -use libk_thread::{block, sync::Mutex}; use libk_util::sync::{IrqSafeSpinlock, LockMethod}; use yggdrasil_abi::{ error::Error, 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 pub struct Channel { diff --git a/kernel/libk/src/vfs/file/pipe.rs b/kernel/libk/src/vfs/file/pipe.rs index de9190d3..9743f638 100644 --- a/kernel/libk/src/vfs/file/pipe.rs +++ b/kernel/libk/src/vfs/file/pipe.rs @@ -6,7 +6,6 @@ use core::{ use alloc::{sync::Arc, vec, vec::Vec}; use futures_util::{task::AtomicWaker, Future}; -use libk_thread::block; use libk_util::sync::IrqSafeSpinlock; use yggdrasil_abi::error::Error; diff --git a/kernel/libk/src/vfs/ioctx.rs b/kernel/libk/src/vfs/ioctx.rs index 73f9b82d..735bdc23 100644 --- a/kernel/libk/src/vfs/ioctx.rs +++ b/kernel/libk/src/vfs/ioctx.rs @@ -1,14 +1,16 @@ use alloc::{borrow::ToOwned, sync::Arc}; -use libk_thread::binary::ProgramLoadSource; use yggdrasil_abi::{ error::Error, io::{FileMode, FileType, GroupId, OpenOptions, UserId}, path::{Path, PathBuf}, }; -use crate::vfs::{ - node::{AccessToken, CreateInfo}, - File, FileRef, NodeRef, +use crate::{ + task::binary::ProgramLoadSource, + vfs::{ + node::{AccessToken, CreateInfo}, + File, FileRef, NodeRef, + }, }; /// Describes a general filesystem access diff --git a/kernel/libk/src/vfs/poll.rs b/kernel/libk/src/vfs/poll.rs index 5be56239..eb0187e6 100644 --- a/kernel/libk/src/vfs/poll.rs +++ b/kernel/libk/src/vfs/poll.rs @@ -7,11 +7,13 @@ use core::{ use alloc::collections::BTreeMap; use futures_util::{future::BoxFuture, FutureExt}; -use libk_thread::{runtime, sync::Mutex}; use libk_util::sync::LockMethod; 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 /// timeout is reached. diff --git a/kernel/libk/src/vfs/pty.rs b/kernel/libk/src/vfs/pty.rs index 60e828ad..ddbf6574 100644 --- a/kernel/libk/src/vfs/pty.rs +++ b/kernel/libk/src/vfs/pty.rs @@ -8,7 +8,6 @@ use core::{ }; use alloc::{boxed::Box, sync::Arc}; -use libk_thread::{block, signal_process_group}; use libk_util::{ ring::{LossyRingQueue, RingBuffer}, sync::{spin_rwlock::IrqSafeRwLock, IrqSafeSpinlock}, @@ -22,6 +21,8 @@ use yggdrasil_abi::{ process::{ProcessGroupId, Signal}, }; +use crate::task::signal_process_group; + const CAPACITY: usize = 8192; struct PtySlaveToMasterHalf { diff --git a/kernel/libk/src/vfs/timer.rs b/kernel/libk/src/vfs/timer.rs index 7893b801..50d35e12 100644 --- a/kernel/libk/src/vfs/timer.rs +++ b/kernel/libk/src/vfs/timer.rs @@ -7,14 +7,16 @@ use core::{ use alloc::boxed::Box; use futures_util::FutureExt; -use libk_thread::{ - runtime::{self, SleepFuture}, - sync::Mutex, -}; use libk_util::sync::LockMethod; 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 pub struct TimerFile { diff --git a/kernel/src/arch/x86_64/apic/mod.rs b/kernel/src/arch/x86_64/apic/mod.rs index 89d8ce4c..98b68798 100644 --- a/kernel/src/arch/x86_64/apic/mod.rs +++ b/kernel/src/arch/x86_64/apic/mod.rs @@ -7,8 +7,8 @@ use kernel_arch_x86_64::context::IrqFrame; use libk::{ arch::Cpu, device::{external_interrupt_controller, message_interrupt_controller}, + task::thread::Thread, }; -use libk_thread::thread::Thread; use static_assertions::{const_assert, const_assert_eq}; use crate::task::process::ProcessManagerImpl; diff --git a/kernel/src/arch/x86_64/boot/mod.rs b/kernel/src/arch/x86_64/boot/mod.rs index e1d0ef21..d96fa0b6 100644 --- a/kernel/src/arch/x86_64/boot/mod.rs +++ b/kernel/src/arch/x86_64/boot/mod.rs @@ -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_fs::devfs; -use libk::runtime; +use libk::task::runtime; use tock_registers::interfaces::Writeable; use yboot_proto::{ v1::{FramebufferOption, MemoryMap}, diff --git a/kernel/src/arch/x86_64/exception.rs b/kernel/src/arch/x86_64/exception.rs index 1c032cfd..fec21b57 100644 --- a/kernel/src/arch/x86_64/exception.rs +++ b/kernel/src/arch/x86_64/exception.rs @@ -3,8 +3,7 @@ use core::{arch::global_asm, mem::size_of, ptr::addr_of}; use abi::{primitive_enum, process::Signal}; use kernel_arch_x86_64::{context::ExceptionFrame, registers::CR3}; -use libk::arch::Cpu; -use libk_thread::thread::Thread; +use libk::{arch::Cpu, task::thread::Thread}; use tock_registers::interfaces::Readable; use crate::{arch::x86_64::apic, task::process::ProcessManagerImpl}; diff --git a/kernel/src/arch/x86_64/peripherals/i8253.rs b/kernel/src/arch/x86_64/peripherals/i8253.rs index 0b3b24cf..a51351c1 100644 --- a/kernel/src/arch/x86_64/peripherals/i8253.rs +++ b/kernel/src/arch/x86_64/peripherals/i8253.rs @@ -6,7 +6,7 @@ use device_api::{ timer::MonotonicTimestampProviderDevice, Device, }; -use libk::{device::external_interrupt_controller, runtime}; +use libk::{device::external_interrupt_controller, task::runtime}; use libk_util::sync::IrqSafeSpinlock; use crate::arch::x86_64::{ diff --git a/kernel/src/arch/x86_64/syscall.rs b/kernel/src/arch/x86_64/syscall.rs index b1db7314..6622abf9 100644 --- a/kernel/src/arch/x86_64/syscall.rs +++ b/kernel/src/arch/x86_64/syscall.rs @@ -8,7 +8,7 @@ use kernel_arch_x86_64::{ context::SyscallFrame, 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 crate::{ diff --git a/kernel/src/debug.rs b/kernel/src/debug.rs index 5c28f4b7..c1d05ef0 100644 --- a/kernel/src/debug.rs +++ b/kernel/src/debug.rs @@ -2,7 +2,7 @@ use core::fmt::{self, Arguments}; use abi::error::Error; -use libk_thread::process::Process; +use libk::task::process::Process; use libk_util::{ring::RingBuffer, sync::IrqSafeSpinlock, StaticVector}; const MAX_DEBUG_SINKS: usize = 4; @@ -63,7 +63,7 @@ macro_rules! log_print_raw { macro_rules! log_print { ($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)+)) }; } diff --git a/kernel/src/device/display/console.rs b/kernel/src/device/display/console.rs index e5f5fec5..3befb6ce 100644 --- a/kernel/src/device/display/console.rs +++ b/kernel/src/device/display/console.rs @@ -5,7 +5,7 @@ use core::time::Duration; use abi::{error::Error, primitive_enum}; use alloc::{vec, vec::Vec}; use bitflags::bitflags; -use libk::runtime; +use libk::task::runtime; use libk_util::{sync::IrqSafeSpinlock, StaticVector}; use crate::debug::DebugSink; diff --git a/kernel/src/device/display/linear_fb.rs b/kernel/src/device/display/linear_fb.rs index 95a25652..b65310e7 100644 --- a/kernel/src/device/display/linear_fb.rs +++ b/kernel/src/device/display/linear_fb.rs @@ -7,14 +7,13 @@ use core::{ use abi::{error::Error, io::DeviceRequest, process::ProcessId}; use device_api::Device; -use libk::vfs::block::BlockDevice; +use libk::{task::thread::Thread, vfs::block::BlockDevice}; use libk_mm::{ address::{IntoRaw, PhysicalAddress}, device::{DeviceMemoryAttributes, DeviceMemoryCaching, RawDeviceMemoryMapping}, table::{EntryLevel, MapAttributes}, PageProvider, }; -use libk_thread::thread::Thread; use libk_util::sync::IrqSafeSpinlock; use crate::arch::L3; diff --git a/kernel/src/device/tty.rs b/kernel/src/device/tty.rs index 3fe70b21..9c037833 100644 --- a/kernel/src/device/tty.rs +++ b/kernel/src/device/tty.rs @@ -12,7 +12,7 @@ use abi::{ }; use device_api::serial::SerialDevice; use futures_util::Future; -use libk_thread::process::ProcessImpl; +use libk::task::process::ProcessImpl; use libk_util::{ring::RingBuffer, sync::IrqSafeSpinlock, waker::QueueWaker}; use crate::{proc::io::ProcessIoImpl, task::process::ProcessManagerImpl}; diff --git a/kernel/src/init.rs b/kernel/src/init.rs index 5e1167ae..21f5ef0b 100644 --- a/kernel/src/init.rs +++ b/kernel/src/init.rs @@ -3,9 +3,8 @@ use abi::error::Error; use alloc::borrow::ToOwned; use kernel_fs::devfs; -use libk::runtime; +use libk::task::{runtime, thread::Thread}; use libk::vfs::{impls::FnSymlink, IoContext, NodeRef}; -use libk_thread::thread::Thread; use memfs::MemoryFilesystem; use crate::{ diff --git a/kernel/src/proc/io.rs b/kernel/src/proc/io.rs index 44317047..5970f199 100644 --- a/kernel/src/proc/io.rs +++ b/kernel/src/proc/io.rs @@ -1,8 +1,10 @@ //! Process I/O management use abi::error::Error; -use libk::vfs::{FileSet, IoContext, Node}; -use libk_thread::process::ProcessIo; +use libk::{ + task::process::ProcessIo, + vfs::{FileSet, IoContext, Node}, +}; /// I/O context of a process, contains information like root, current directory and file /// descriptor table diff --git a/kernel/src/proc/mod.rs b/kernel/src/proc/mod.rs index 5f8df4d9..ce4f3445 100644 --- a/kernel/src/proc/mod.rs +++ b/kernel/src/proc/mod.rs @@ -2,8 +2,7 @@ use abi::{error::Error, path::Path, process::ProcessGroupId}; use alloc::sync::{Arc, Weak}; -use libk::vfs::IoContext; -use libk_thread::thread::Thread; +use libk::{task::thread::Thread, vfs::IoContext}; use crate::task::process::ProcessImpl; @@ -20,5 +19,5 @@ pub fn load_binary>( args: &[&str], envs: &[&str], ) -> Result<(Arc, Arc), Error> { - libk_thread::binary::load(ioctx, group_id, parent, path, args, envs) + libk::task::binary::load(ioctx, group_id, parent, path, args, envs) } diff --git a/kernel/src/syscall/arg.rs b/kernel/src/syscall/arg.rs index a7dcf4e8..ad784b8f 100644 --- a/kernel/src/syscall/arg.rs +++ b/kernel/src/syscall/arg.rs @@ -1,4 +1,4 @@ -use libk_thread::{mem::ForeignPointer, thread::Thread}; +use libk::task::{mem::ForeignPointer, thread::Thread}; use yggdrasil_abi::error::Error; pub(super) fn ref_const<'a, T: Sized>(addr: usize) -> Result<&'a T, Error> { diff --git a/kernel/src/syscall/mod.rs b/kernel/src/syscall/mod.rs index 8a51a69e..50c1d880 100644 --- a/kernel/src/syscall/mod.rs +++ b/kernel/src/syscall/mod.rs @@ -58,7 +58,12 @@ mod impls { }; use alloc::{boxed::Box, sync::Arc}; use libk::{ - block, runtime, + block, + task::{ + process::{Process, ProcessManager}, + runtime, + thread::Thread, + }, vfs::{self, File, IoContext, MessagePayload, Read, Seek, Write}, }; use ygg_driver_net_core::socket::{RawSocket, TcpListener, TcpSocket, UdpSocket}; @@ -73,10 +78,6 @@ mod impls { process::VirtualRangeBacking, table::{EntryLevelExt, MapAttributes}, }; - use libk_thread::{ - process::{Process, ProcessManager}, - thread::Thread, - }; use crate::{ arch::L3, diff --git a/kernel/src/task/mod.rs b/kernel/src/task/mod.rs index ccce3e8b..0502f0f9 100644 --- a/kernel/src/task/mod.rs +++ b/kernel/src/task/mod.rs @@ -8,11 +8,14 @@ use kernel_arch::{ task::{Scheduler, TaskContext, Termination}, Architecture, ArchitectureImpl, }; -use libk::{arch::Cpu, runtime}; -use libk_thread::{ - sched::{init_queues, CpuQueue}, - thread::Thread, - TaskContextImpl, +use libk::{ + arch::Cpu, + task::{ + runtime, + sched::{init_queues, CpuQueue}, + thread::Thread, + TaskContextImpl, + }, }; use libk_util::sync::SpinFence; diff --git a/kernel/src/task/process.rs b/kernel/src/task/process.rs index 9459380a..7be1ac4d 100644 --- a/kernel/src/task/process.rs +++ b/kernel/src/task/process.rs @@ -2,12 +2,12 @@ use abi::process::{ProcessGroupId, ProcessId, Signal}; 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 crate::proc::io::ProcessIoImpl; -pub use libk_thread::{ +pub use libk::task::{ process::ProcessImage, types::{ProcessTlsInfo, ProcessTlsLayout}, }; @@ -16,7 +16,7 @@ pub use libk_thread::{ pub struct ProcessManagerImpl; /// Alias type for [libk_thread::process::ProcessImpl] -pub type ProcessImpl = libk_thread::process::ProcessImpl; +pub type ProcessImpl = libk::task::process::ProcessImpl; static PROCESSES: IrqSafeRwLock>> = IrqSafeRwLock::new(BTreeMap::new());