]> git.ipfire.org Git - thirdparty/openembedded/openembedded-core-contrib.git/commitdiff
oeqa/qemurunner: Add newlines serial workaround
authorRichard Purdie <richard.purdie@linuxfoundation.org>
Mon, 9 Oct 2023 16:47:53 +0000 (17:47 +0100)
committerRichard Purdie <richard.purdie@linuxfoundation.org>
Tue, 10 Oct 2023 08:50:42 +0000 (09:50 +0100)
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.

Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
meta/lib/oeqa/utils/qemurunner.py

index 5fed705977887534ae656f1414702b5c3044769b..554946e2d7093f1277f3060cf8ada45129d626cc 100644 (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()