From 0a470e66f20d1b002b86217ec657f96fe9e72329 Mon Sep 17 00:00:00 2001 From: Stefan Kalkowski Date: Thu, 4 Apr 2019 16:38:28 +0200 Subject: [PATCH] vmm_arm: uart device model needs to take all chars When receiving a terminal signal, the uart device model has to take all characters out of the stream. Otherwise, characters might never arrive at the VM. This was not recognized before, because it was used with a quite slow UART only, which obviously never achieved to send more characters at once. Ref #3278 --- repos/os/src/server/vmm/main.cc | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/repos/os/src/server/vmm/main.cc b/repos/os/src/server/vmm/main.cc index 89653826c9..701385bc43 100644 --- a/repos/os/src/server/vmm/main.cc +++ b/repos/os/src/server/vmm/main.cc @@ -1185,9 +1185,11 @@ class Vmm { if (!_terminal.avail()) return; - unsigned char c = 0; - _terminal.read(&c, 1); - _rx_buf.add(c); + while (_terminal.avail()) { + unsigned char c = 0; + _terminal.read(&c, 1); + _rx_buf.add(c); + } _gic.inject_irq(Board::PL011_0_IRQ); _ris |= 1 << 4;