Просмотр исходного кода

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.
Gunnar Beutner 4 лет назад
Родитель
Сommit
addddb4880
1 измененных файлов с 1 добавлено и 3 удалено
  1. 1 3
      Kernel/Net/E1000NetworkAdapter.cpp

+ 1 - 3
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;