diff --git a/kernel/src/drivers/irq/plic.rs b/kernel/src/drivers/irq/plic.rs index 2e8f474..f8de629 100644 --- a/kernel/src/drivers/irq/plic.rs +++ b/kernel/src/drivers/irq/plic.rs @@ -4,7 +4,6 @@ use crate::entry::HART_ID; use crate::plat::irq::IrqController; use fdt::{node::FdtNode, Fdt}; use log::trace; -use spin::Mutex; const IRQ_OCCUPIED: usize = u32::MAX as usize; // OpenSBI will rewrite IRQ_M_EXT to this value const IRQ_S_EXT: usize = 9; @@ -34,7 +33,6 @@ where IrqPlic: IrqDriver control: *mut PlicCtrl, nr_irqs: usize, - lock: Mutex<()>, } impl Driver for IrqPlic { @@ -96,7 +94,6 @@ impl Driver for IrqPlic { enable: unsafe { base_address.add(PLIC_ENABLE_OFFSET + ctx_id * PLIC_ENABLE_STRIDE) as *mut u32 }, control: unsafe { (base_address.add(PLIC_CONTROL_OFFSET) as *mut PlicCtrl).add(ctx_id) }, nr_irqs: nr_irqs.unwrap(), - lock: Mutex::new(()), } } } @@ -110,15 +107,9 @@ impl IrqController for IrqPlic { let word = irq / 32; let bit = irq % 32; - { - let guard = self.lock.lock(); - - let val = unsafe { self.enable.add(word).read_volatile() }; - let val = val | (1 << bit); - unsafe { self.enable.add(word).write_volatile(val) }; - - drop(guard); - } + let val = unsafe { self.enable.add(word).read_volatile() }; + let val = val | (1 << bit); + unsafe { self.enable.add(word).write_volatile(val) }; } fn disable(&mut self, irq: usize) { @@ -129,15 +120,9 @@ impl IrqController for IrqPlic { let word = irq / 32; let bit = irq % 32; - { - let guard = self.lock.lock(); - - let val = unsafe { self.enable.add(word).read_volatile() }; - let val = val & !(1 << bit); - unsafe { self.enable.add(word).write_volatile(val) }; - - drop(guard); - } + let val = unsafe { self.enable.add(word).read_volatile() }; + let val = val & !(1 << bit); + unsafe { self.enable.add(word).write_volatile(val) }; } fn is_pending(&mut self, irq: usize) -> bool {