From 2f942e17213292a6ddad409c067bb0602d3e9279 Mon Sep 17 00:00:00 2001 From: Mark Poliakov Date: Mon, 20 Jan 2025 13:59:06 +0200 Subject: [PATCH] maint: sync up other archs --- Cargo.toml | 15 ++++++--------- kernel/arch/aarch64/src/context.rs | 4 +++- kernel/arch/aarch64/src/lib.rs | 4 +++- kernel/arch/aarch64/src/mem/process.rs | 5 +++-- kernel/arch/i686/src/lib.rs | 4 +++- kernel/arch/i686/src/mem/process.rs | 4 ++-- kernel/arch/x86_64/src/lib.rs | 4 +++- kernel/arch/x86_64/src/mem/process.rs | 4 ++-- kernel/src/arch/i686/mod.rs | 4 +++- 9 files changed, 28 insertions(+), 20 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 48e8b109..e21f198c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -91,17 +91,14 @@ unexpected_cfgs = { level = "allow", check-cfg = ['cfg(rust_analyzer)'] } [workspace.lints.clippy] derivable_impls = { level = "allow" } -# [profile.dev] -# opt-level = 1 +[profile.dev] +opt-level = 1 # split-debuginfo = "packed" -# lto = "thin" -# panic = "abort" +lto = "thin" +panic = "abort" [profile.test] split-debuginfo = "none" -# [profile.dev.package."*"] -# opt-level = 3 - -# [profile.dev] -# opt-level = "s" +[profile.dev.package."*"] +opt-level = 3 diff --git a/kernel/arch/aarch64/src/context.rs b/kernel/arch/aarch64/src/context.rs index b16adfc2..a10c8605 100644 --- a/kernel/arch/aarch64/src/context.rs +++ b/kernel/arch/aarch64/src/context.rs @@ -208,10 +208,12 @@ impl>, } +impl CpuData for PerCpuData {} + static IPI_QUEUES: OneTimeInit>> = OneTimeInit::new(); pub static CPU_COUNT: AtomicUsize = AtomicUsize::new(1); diff --git a/kernel/arch/aarch64/src/mem/process.rs b/kernel/arch/aarch64/src/mem/process.rs index 0d2d6db9..4626338c 100644 --- a/kernel/arch/aarch64/src/mem/process.rs +++ b/kernel/arch/aarch64/src/mem/process.rs @@ -83,8 +83,9 @@ impl ProcessAddressSpaceManager for ProcessAddressSpaceI self.pop_l3_entry(address) } - fn as_address_with_asid(&self) -> u64 { - unsafe { u64::from(self.l1.as_physical_address()) | ((self.asid as u64) << 48) | 1 } + fn as_address_with_asid(&self) -> (u64, u64) { + let physical = unsafe { u64::from(self.l1.as_physical_address()) }; + (physical, self.asid as u64) } unsafe fn clear(&mut self) { diff --git a/kernel/arch/i686/src/lib.rs b/kernel/arch/i686/src/lib.rs index 122713ad..058a3884 100644 --- a/kernel/arch/i686/src/lib.rs +++ b/kernel/arch/i686/src/lib.rs @@ -8,7 +8,7 @@ use core::ptr::null_mut; use alloc::vec::Vec; use device_api::interrupt::{LocalInterruptController, MessageInterruptController}; use kernel_arch_interface::{ - cpu::{CpuImpl, IpiQueue}, + cpu::{CpuData, CpuImpl, IpiQueue}, task::Scheduler, Architecture, }; @@ -29,6 +29,8 @@ pub struct PerCpuData { pub enabled_features: CpuFeatures, } +impl CpuData for PerCpuData {} + static mut CPU: *mut () = null_mut(); #[naked] diff --git a/kernel/arch/i686/src/mem/process.rs b/kernel/arch/i686/src/mem/process.rs index 7a2e7a9e..ac9ad8dc 100644 --- a/kernel/arch/i686/src/mem/process.rs +++ b/kernel/arch/i686/src/mem/process.rs @@ -68,8 +68,8 @@ impl ProcessAddressSpaceManager for ProcessAddressSpaceI self.pop_l3_entry(address) } - fn as_address_with_asid(&self) -> u64 { - unsafe { self.l0.as_physical_address().into_u64() } + fn as_address_with_asid(&self) -> (u64, u64) { + (unsafe { self.l0.as_physical_address().into_u64() }, 0) } } diff --git a/kernel/arch/x86_64/src/lib.rs b/kernel/arch/x86_64/src/lib.rs index d3386776..fad56e2a 100644 --- a/kernel/arch/x86_64/src/lib.rs +++ b/kernel/arch/x86_64/src/lib.rs @@ -12,7 +12,7 @@ use core::{ use alloc::{boxed::Box, vec::Vec}; use device_api::interrupt::{LocalInterruptController, MessageInterruptController}; use kernel_arch_interface::{ - cpu::{CpuImpl, IpiQueue}, + cpu::{CpuData, CpuImpl, IpiQueue}, task::Scheduler, util::OneTimeInit, Architecture, @@ -58,6 +58,8 @@ pub struct PerCpuData { pub enabled_features: CpuFeatures, } +impl CpuData for PerCpuData {} + impl PerCpuData { #[inline] pub fn local_apic(&self) -> &dyn LocalApicInterface { diff --git a/kernel/arch/x86_64/src/mem/process.rs b/kernel/arch/x86_64/src/mem/process.rs index cc8df965..d8856d27 100644 --- a/kernel/arch/x86_64/src/mem/process.rs +++ b/kernel/arch/x86_64/src/mem/process.rs @@ -71,9 +71,9 @@ impl ProcessAddressSpaceManager for ProcessAddressSpaceI .ok_or(Error::InvalidMemoryOperation) } - fn as_address_with_asid(&self) -> u64 { + fn as_address_with_asid(&self) -> (u64, u64) { // TODO x86-64 PCID/ASID? - unsafe { self.l0.as_physical_address().into_u64() } + (unsafe { self.l0.as_physical_address().into_u64() }, 0) } unsafe fn clear(&mut self) { diff --git a/kernel/src/arch/i686/mod.rs b/kernel/src/arch/i686/mod.rs index 17bdae59..c2970178 100644 --- a/kernel/src/arch/i686/mod.rs +++ b/kernel/src/arch/i686/mod.rs @@ -10,7 +10,7 @@ use device_api::{ }; use kernel_arch::{Architecture, ArchitectureImpl}; use kernel_arch_i686::{gdt, mem::table::L3, PerCpuData}; -use kernel_arch_x86::cpuid::{self, CpuFeatures, EcxFeatures, EdxFeatures}; +use kernel_arch_x86::cpuid::{self, CpuFeatures, EcxFeatures, EdxFeatures, ExtEdxFeatures}; use libk::{ arch::Cpu, config, debug, @@ -95,10 +95,12 @@ impl I686 { CpuFeatures { ecx: EcxFeatures::SSE3 | EcxFeatures::XSAVE | EcxFeatures::OSXSAVE, edx: EdxFeatures::SSE2 | EdxFeatures::FXSR, + ext_edx: ExtEdxFeatures::empty(), }, CpuFeatures { ecx: EcxFeatures::empty(), edx: EdxFeatures::FPU | EdxFeatures::SSE | EdxFeatures::PSE, + ext_edx: ExtEdxFeatures::empty(), }, ); let will_features = will_features.expect("Could not enable needed CPU features");