From 1ece2b76b50cf4f48f1725aff82249971929c11f Mon Sep 17 00:00:00 2001 From: Baptiste Wicht Date: Mon, 5 Sep 2016 22:56:54 +0200 Subject: [PATCH] Handle network card interrupts better It seems that a single interrupt can be used for both a transmit and a receive --- kernel/src/drivers/rtl8139.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/kernel/src/drivers/rtl8139.cpp b/kernel/src/drivers/rtl8139.cpp index 6bfe42ff..0b4d2155 100644 --- a/kernel/src/drivers/rtl8139.cpp +++ b/kernel/src/drivers/rtl8139.cpp @@ -143,7 +143,9 @@ void packet_handler(interrupt::syscall_regs*, void* data){ } desc.cur_rx = cur_rx; - } else if(status & (TX_OK | TX_ERR)){ + } + + if(status & (TX_OK | TX_ERR)){ auto& dirty_tx = desc.dirty_tx; size_t cleaned_up = 0; @@ -174,7 +176,9 @@ void packet_handler(interrupt::syscall_regs*, void* data){ } desc.tx_sem.release(cleaned_up); - } else { + } + + if(!(status & (RX_OK | TX_OK | TX_ERR))){ // This should not happen since we only enable a few // interrupts logging::logf(logging::log_level::ERROR, "rtl8139: Receive status unhandled OK\n");