From 898ec5acbddda7e7704873fc67b5ec7953127392 Mon Sep 17 00:00:00 2001 From: Jeremy Soller Date: Tue, 21 Mar 2017 20:38:57 -0600 Subject: [PATCH] Yield unstead of pause in loops in rtl8168d --- rtl8168d/src/device.rs | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/rtl8168d/src/device.rs b/rtl8168d/src/device.rs index 1f09f8372c..9cb3205708 100644 --- a/rtl8168d/src/device.rs +++ b/rtl8168d/src/device.rs @@ -1,4 +1,4 @@ -use std::mem; +use std::{mem, thread}; use netutils::setcfg; use syscall::error::{Error, EACCES, EWOULDBLOCK, Result}; @@ -133,7 +133,7 @@ impl SchemeMut for Rtl8168 { self.regs.tppoll.writef(1 << 6, true); //Notify of normal priority packet while self.regs.tppoll.readf(1 << 6) { - unsafe { asm!("pause" : : : "memory" : "intel", "volatile"); } + thread::yield_now(); } return Ok(i); @@ -224,7 +224,9 @@ impl Rtl8168 { // Reset - this will disable tx and rx, reinitialize FIFOs, and set the system buffer pointer to the initial value self.regs.cmd.writef(1 << 4, true); - while self.regs.cmd.readf(1 << 4) {} + while self.regs.cmd.readf(1 << 4) { + thread::yield_now(); + } // Set up rx buffers for i in 0..self.receive_ring.len() {