From addddb4880dadd9026752edeb6a99e488779d99c Mon Sep 17 00:00:00 2001 From: Gunnar Beutner Date: Mon, 26 Apr 2021 18:33:37 +0200 Subject: [PATCH] Kernel: Make sure the E1000 network adapter keeps receiving packets Previously the E1000 network adapter would stop receiving further packets when an RX buffer overrun occurred. This was the case when connecting the adapter to a real network where enough broadcast traffic caused the buffer to be full before the kernel had a chance to clear the RX buffer. --- Kernel/Net/E1000NetworkAdapter.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/Kernel/Net/E1000NetworkAdapter.cpp b/Kernel/Net/E1000NetworkAdapter.cpp index 241c6436d2..027063c623 100644 --- a/Kernel/Net/E1000NetworkAdapter.cpp +++ b/Kernel/Net/E1000NetworkAdapter.cpp @@ -425,10 +425,8 @@ void E1000NetworkAdapter::receive() { auto* rx_descriptors = (e1000_tx_desc*)m_rx_descriptors_region->vaddr().as_ptr(); u32 rx_current; - for (;;) { + for (u32 i = 0; i < number_of_rx_descriptors; i++) { rx_current = in32(REG_RXDESCTAIL) % number_of_rx_descriptors; - if (rx_current == (in32(REG_RXDESCHEAD) % number_of_rx_descriptors)) - return; rx_current = (rx_current + 1) % number_of_rx_descriptors; if (!(rx_descriptors[rx_current].status & 1)) break;