Nothing to see here, move along
at main 87 lines 2.9 kB view raw
1use core::sync::atomic::{AtomicBool, Ordering}; 2 3pub static BREAKPOINT_HIT: AtomicBool = AtomicBool::new(false); 4 5crate::kernel_test!( 6 fn breakpoint_fires_and_returns() { 7 BREAKPOINT_HIT.store(false, Ordering::SeqCst); 8 x86_64::instructions::interrupts::int3(); 9 assert!( 10 BREAKPOINT_HIT.load(Ordering::SeqCst), 11 "breakpoint handler did not set flag" 12 ); 13 } 14); 15 16crate::kernel_test!( 17 fn apic_timer_ticks_increment() { 18 let before = crate::arch::apic::tick_count(); 19 x86_64::instructions::interrupts::enable(); 20 let start = crate::wcet::tsc::read_tsc(); 21 let freq = crate::wcet::tsc::freq_hz(); 22 let target_cycles = freq / 20; 23 let mut spins: u64 = 0; 24 #[allow(clippy::while_immutable_condition)] 25 while crate::wcet::tsc::read_tsc() - start < target_cycles { 26 x86_64::instructions::hlt(); 27 spins += 1; 28 assert!(spins < 1_000_000, "spin bound exceeded waiting for timer"); 29 } 30 let after = crate::arch::apic::tick_count(); 31 assert!( 32 after > before, 33 "tick count did not increase: before={}, after={}", 34 before, 35 after 36 ); 37 } 38); 39 40crate::kernel_test!( 41 fn tsc_calibration_sanity() { 42 let freq = crate::wcet::tsc::freq_hz(); 43 let cycles_for_1ms = freq / 1000; 44 let ns = crate::wcet::tsc::cycles_to_ns(cycles_for_1ms); 45 assert!( 46 (900_000..=1_100_000).contains(&ns), 47 "1ms worth of cycles converted to {}ns (expected ~1_000_000)", 48 ns 49 ); 50 } 51); 52 53crate::kernel_test!( 54 fn reserved_vector_validation() { 55 use crate::arch::x86_64::idt::IrqVector; 56 57 assert!( 58 crate::syscall::irq::is_reserved_vector(crate::arch::x86_64::idt::TIMER_VECTOR), 59 "TIMER_VECTOR must be reserved" 60 ); 61 assert!( 62 crate::syscall::irq::is_reserved_vector(crate::arch::x86_64::idt::ERROR_VECTOR), 63 "ERROR_VECTOR must be reserved" 64 ); 65 assert!( 66 crate::syscall::irq::is_reserved_vector(crate::arch::x86_64::idt::COM1_VECTOR), 67 "COM1_VECTOR must be reserved" 68 ); 69 assert!( 70 crate::syscall::irq::is_reserved_vector(crate::arch::x86_64::idt::SPURIOUS_VECTOR), 71 "SPURIOUS_VECTOR must be reserved" 72 ); 73 74 assert!( 75 !crate::syscall::irq::is_reserved_vector(IrqVector::new(48)), 76 "vector 48 should not be reserved" 77 ); 78 assert!( 79 !crate::syscall::irq::is_reserved_vector(IrqVector::new(64)), 80 "vector 64 should not be reserved" 81 ); 82 assert!( 83 !crate::syscall::irq::is_reserved_vector(IrqVector::new(128)), 84 "vector 128 should not be reserved" 85 ); 86 } 87);