diff --git a/repos/base/include/drivers/uart/x86_pc.h b/repos/base/include/drivers/uart/x86_pc.h
index 3f509144ce..67e9cfa8fe 100644
--- a/repos/base/include/drivers/uart/x86_pc.h
+++ b/repos/base/include/drivers/uart/x86_pc.h
@@ -17,6 +17,7 @@
/* Genode includes */
#include
+#include
namespace Genode { class X86_uart; }
@@ -87,7 +88,7 @@ class Genode::X86_uart
DLHI = (uint16_t)(_port + 1);
_outb(LCR, 0x80); /* select bank 1 */
- for (volatile int i = 10000000; i--; );
+ for (int i = 10000000; i; --i) memory_barrier();
_outb(DLLO, (uint8_t)((115200/_baud_rate) >> 0));
_outb(DLHI, (uint8_t)((115200/_baud_rate) >> 8));
_outb(LCR, 0x03); /* set 8,N,1 */
diff --git a/repos/os/src/drivers/uart/spec/x86/uart_driver.h b/repos/os/src/drivers/uart/spec/x86/uart_driver.h
index d62fc2315c..fc6638f0f1 100644
--- a/repos/os/src/drivers/uart/spec/x86/uart_driver.h
+++ b/repos/os/src/drivers/uart/spec/x86/uart_driver.h
@@ -18,6 +18,7 @@
/* Genode includes */
#include
#include
+#include
enum { UARTS_NUM = 4 }; /* needed by base class definitions */
@@ -87,7 +88,7 @@ class Uart::Driver : public Uart::Driver_base
void _init_comport(size_t baud)
{
_outb(0x80u); /* select bank 1 */
- for (volatile int i = 10000000; i--; );
+ for (int i = 10000000; i; i--) memory_barrier();
_outb(((115200/baud) >> 0) && 0xff);
_outb(((115200/baud) >> 8) && 0xff);
_outb(0x03u); /* set 8,N,1 */