temp interrupt fix, problem with sds_search_service

This commit is contained in:
koniifer 2024-11-27 12:52:48 +00:00
parent 9d1c59b65d
commit fd26ec734b
3 changed files with 41 additions and 43 deletions

View file

@ -83,33 +83,31 @@ extern "x86-interrupt" fn spurious(_: InterruptStackFrame) {
} }
} }
#[allow(unused_imports)]
fn interrupt(interrupt_type: Interrupt) { fn interrupt(interrupt_type: Interrupt) {
use crate::arch::INTERRUPT_LIST; use crate::{arch::INTERRUPT_LIST, kmain::EXECUTOR};
use crate::kmain::EXECUTOR; // let il = INTERRUPT_LIST.lock();
let il = INTERRUPT_LIST.lock(); // let val = il.list.get(&interrupt_type).unwrap();
let val = il.list.get(&interrupt_type).unwrap();
use crate::holeybytes::kernel_services::service_definition_service::sds_search_service; // use crate::holeybytes::kernel_services::service_definition_service::sds_search_service;
let buffer = sds_search_service(val); // let buffer = sds_search_service(val);
if buffer != 0 { // if buffer != 0 {
use {crate::kmain::IPC_BUFFERS, alloc::vec::Vec}; // use {crate::kmain::IPC_BUFFERS, alloc::vec::Vec};
let mut buffs = IPC_BUFFERS.lock(); // let mut buffs = IPC_BUFFERS.lock();
match buffs.get_mut(&buffer) { // match buffs.get_mut(&buffer) {
Some(buff) => { // Some(buff) => {
let mut msg_vec = Vec::new(); // let mut msg_vec = Vec::new();
msg_vec.push(0xFF); // msg_vec.push(0xFF);
buff.push(msg_vec.to_vec()); // buff.push(msg_vec.to_vec());
log::debug!("Sent Message {:?} to Buffer({})", msg_vec, buffer); // log::debug!("Sent Message {:?} to Buffer({})", msg_vec, buffer);
} // }
None => { // None => {
log::error!("Access of non-existent buffer {}", buffer) // log::error!("Access of non-existent buffer {}", buffer)
} // }
} // }
// }
// log::info!("{}", buffer); unsafe {
}
unsafe{
EXECUTOR.send_interrupt(interrupt_type as u8); EXECUTOR.send_interrupt(interrupt_type as u8);
} }
} }

View file

@ -33,7 +33,7 @@ pub trait Process: Future<Output = ()> + Send {}
impl<T: Future<Output = ()> + Send> Process for T {} impl<T: Future<Output = ()> + Send> Process for T {}
pub struct Executor { pub struct Executor {
tasks: Slab<Task>, tasks: Slab<Task>,
task_queue: Arc<SegQueue<usize>>, task_queue: Arc<SegQueue<usize>>,
interrupt_lookup: [Option<usize>; u8::MAX as usize], interrupt_lookup: [Option<usize>; u8::MAX as usize],
} }
@ -41,7 +41,7 @@ pub struct Executor {
impl Executor { impl Executor {
pub fn new() -> Self { pub fn new() -> Self {
Self { Self {
tasks: Slab::new(), tasks: Slab::new(),
task_queue: Arc::new(SegQueue::new()), task_queue: Arc::new(SegQueue::new()),
interrupt_lookup: [None; u8::MAX as usize], interrupt_lookup: [None; u8::MAX as usize],
} }
@ -67,7 +67,7 @@ impl Executor {
} }
} }
pub fn interrupt_subscribe(&mut self, pid : usize, interrupt_type: u8){ pub fn interrupt_subscribe(&mut self, pid: usize, interrupt_type: u8) {
self.interrupt_lookup[interrupt_type as usize] = Some(pid); self.interrupt_lookup[interrupt_type as usize] = Some(pid);
} }
@ -85,7 +85,7 @@ impl Executor {
} }
if batch_len == 0 { if batch_len == 0 {
//break; // break;
continue; continue;
} }
@ -100,8 +100,8 @@ impl Executor {
if let Poll::Ready(()) = task.poll(&mut cx) { if let Poll::Ready(()) = task.poll(&mut cx) {
self.tasks.remove(id); self.tasks.remove(id);
self.interrupt_lookup.map(|pid|{ self.interrupt_lookup.map(|pid| {
if let Some(pid) = pid{ if let Some(pid) = pid {
if pid == id { if pid == id {
return None; return None;
} }
@ -114,9 +114,9 @@ impl Executor {
} }
} }
pub fn send_interrupt(&self, interrupt : u8){ pub fn send_interrupt(&self, interrupt: u8) {
let id = self.interrupt_lookup[interrupt as usize]; let id = self.interrupt_lookup[interrupt as usize];
if let Some(id) = id{ if let Some(id) = id {
self.unpause(id); self.unpause(id);
} }
} }

View file

@ -28,26 +28,26 @@ resolution = "1024x768x24"
# [boot.limine.ableos.modules.horizon] # [boot.limine.ableos.modules.horizon]
# path = "boot:///horizon.hbf" # path = "boot:///horizon.hbf"
# path = "boot:///ps2_mouse_driver.hbf" [boot.limine.ableos.modules.ps2_mouse_driver]
# [boot.limine.ableos.modules.ps2_mouse_driver] path = "boot:///ps2_mouse_driver.hbf"
# [boot.limine.ableos.modules.ps2_keyboard_driver] # [boot.limine.ableos.modules.ps2_keyboard_driver]
# path = "boot:///ps2_keyboard_driver.hbf" # path = "boot:///ps2_keyboard_driver.hbf"
# [boot.limine.ableos.modules.sunset_client] # [boot.limine.ableos.modules.sunset_client]
# path = "boot:///sunset_client.hbf" # path = "boot:///sunset_client.hbf"
#
# [boot.limine.ableos.modules.sunset_client_2] # [boot.limine.ableos.modules.sunset_client_2]
# path = "boot:///sunset_client_2.hbf" # path = "boot:///sunset_client_2.hbf"
#
# [boot.limine.ableos.modules.sdoom] [boot.limine.ableos.modules.sdoom]
# path = "boot:///sdoom.hbf" path = "boot:///sdoom.hbf"
#
# [boot.limine.ableos.modules.sunset_server] [boot.limine.ableos.modules.sunset_server]
# path = "boot:///sunset_server.hbf" path = "boot:///sunset_server.hbf"
# [boot.limine.ableos.modules.pcspkr] # [boot.limine.ableos.modules.pcspkr]
# path = "boot:///pcspkr.hbf" # path = "boot:///pcspkr.hbf"
[boot.limine.ableos.modules.test] # [boot.limine.ableos.modules.test]
path = "boot:///test.hbf" # path = "boot:///test.hbf"