Browse Source

E1000: Disable interrupts while getting ready to wait on TX completion

Andreas Kling 5 years ago
parent
commit
9d67a6ba34
1 changed files with 4 additions and 1 deletions
  1. 4 1
      Kernel/Net/E1000NetworkAdapter.cpp

+ 4 - 1
Kernel/Net/E1000NetworkAdapter.cpp

@@ -340,10 +340,13 @@ void E1000NetworkAdapter::send_raw(const u8* data, int length)
 #endif
 #endif
     tx_current = (tx_current + 1) % number_of_tx_descriptors;
     tx_current = (tx_current + 1) % number_of_tx_descriptors;
     out32(REG_TXDESCTAIL, tx_current);
     out32(REG_TXDESCTAIL, tx_current);
+    cli();
     enable_irq();
     enable_irq();
     for (;;) {
     for (;;) {
-        if (descriptor.status)
+        if (descriptor.status) {
+            sti();
             break;
             break;
+        }
         current->wait_on(m_wait_queue);
         current->wait_on(m_wait_queue);
     }
     }
 #ifdef E1000_DEBUG
 #ifdef E1000_DEBUG