oeqa/qemurunner: Add newlines serial workaround

We're struggling with the 6.5 kernel as the serial port getty doesn't appears sometimes
leading to failures in CI. Add a workaround of sending some newlines as a way of
unblocking the kernel/release issues whilst we try and work out how to get to the bottom
of the issue.

(From OE-Core rev: 0a65f0d272895ba13c8c133ee71f3605d765a8a7)

Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Richard Purdie
2023-10-09 17:47:53 +01:00
parent 36d6275314
commit ef7e7b446a

View File

@@ -444,9 +444,11 @@ class QemuRunner:
self.logger.debug("Waiting at most %d seconds for login banner (%s)" %
(self.boottime, time.strftime("%D %H:%M:%S")))
endtime = time.time() + self.boottime
newlinetime = time.time() + 120
filelist = [self.server_socket, self.runqemu.stdout]
reachedlogin = False
stopread = False
sentnewlines = False
qemusock = None
bootlog = b''
data = b''
@@ -455,6 +457,16 @@ class QemuRunner:
sread, swrite, serror = select.select(filelist, [], [], 5)
except InterruptedError:
continue
# With the 6.5 kernel, the serial port getty sometimes fails to appear, the data
# appears lost in some buffer somewhere. Wait two minutes, then if we've not had a login,
# try and provoke one. This is a workaround until we can work out the root cause.
if time.time() > newlinetime and not sentnewlines:
self.logger.warning('Probing the serial port to wake it up!')
try:
self.server_socket.sendall(bytes("\n\n", "utf-8"))
except BrokenPipeError as e:
self.logger.debug('Probe failed %s' % repr(e))
sentnewlines = True
for file in sread:
if file is self.server_socket:
qemusock, addr = self.server_socket.accept()