Clean up the virtio console IRQ handler a bit

This commit is contained in:
Ruihan Li 2024-07-14 01:10:20 +08:00 committed by Tate, Hongliang Tian
parent a465ec1346
commit 3d2a0c33af

View File

@ -130,18 +130,18 @@ impl ConsoleDevice {
fn handle_recv_irq(&self) { fn handle_recv_irq(&self) {
let mut receive_queue = self.receive_queue.lock_irq_disabled(); let mut receive_queue = self.receive_queue.lock_irq_disabled();
if !receive_queue.can_pop() {
let Ok((_, len)) = receive_queue.pop_used() else {
return; return;
} };
let (_, len) = receive_queue.pop_used().unwrap();
self.receive_buffer.sync(0..len as usize).unwrap(); self.receive_buffer.sync(0..len as usize).unwrap();
let callbacks = self.callbacks.read_irq_disabled(); let callbacks = self.callbacks.read_irq_disabled();
for callback in callbacks.iter() { for callback in callbacks.iter() {
let reader = self.receive_buffer.reader().unwrap().limit(len as usize); let reader = self.receive_buffer.reader().unwrap().limit(len as usize);
callback(reader); callback(reader);
} }
drop(callbacks);
self.activate_receive_buffer(&mut receive_queue); self.activate_receive_buffer(&mut receive_queue);
} }