> On 16-Nov-2023, at 5:23 PM, Nicholas Piggin <npig...@gmail.com> wrote: > > Like replay_linux.py, reverse_debugging.py starts the vm with console > set but does not interact with it (e.g., with wait_for_console_pattern). > In this situation, the console should have a drainer attached so the > socket does not fill. replay_linux.py has a drainer, but it is missing > from reverse_debugging.py. > > Per analysis in Link: this can cause the console socket/pipe to fill and > QEMU get stuck in qemu_chr_write_buffer, leading to strange test case > failures (ppc64 fails because it prints a lot to console in early bios). > Attaching a drainer prevents this. > > Note, this commit does not fix bugs introduced by the commits referenced > in the first two Fixes: tags, but together those commits conspire to > irritate the problem and cause test case failure, which this commit > fixes. > > Link: https://lore.kernel.org/qemu-devel/zvt-by9yor69q...@redhat.com/ > Fixes: 1d4796cd0083 ("python/machine: use socketpair() for console > connections") > Fixes: 761a13b23946 ("tests/avocado: ppc64 reverse debugging tests for > pseries and powernv") > Fixes: be52eca30978 ("tests/acceptance: add reverse debugging test") > Tested-by: Thomas Huth <th...@redhat.com> > Signed-off-by: Nicholas Piggin <npig...@gmail.com>
Reviewed-by: Ani Sinha <anisi...@redhat.com <mailto:anisi...@redhat.com> <mailto:anisi...@redhat.com>> > --- > tests/avocado/reverse_debugging.py | 5 +++++ > 1 file changed, 5 insertions(+) > > diff --git a/tests/avocado/reverse_debugging.py > b/tests/avocado/reverse_debugging.py > index fc47874eda..128d85bc0e 100644 > --- a/tests/avocado/reverse_debugging.py > +++ b/tests/avocado/reverse_debugging.py > @@ -12,6 +12,7 @@ > > from avocado import skipIf > from avocado_qemu import BUILD_DIR > +from avocado.utils import datadrainer > from avocado.utils import gdb > from avocado.utils import process > from avocado.utils.network.ports import find_free_port > @@ -52,6 +53,10 @@ def run_vm(self, record, shift, args, replay_path, > image_path, port): > if args: > vm.add_args(*args) > vm.launch() > + console_drainer = datadrainer.LineLogger(vm.console_socket.fileno(), > + logger=self.log.getChild('console'), > + stop_check=(lambda : not > vm.is_running())) > + console_drainer.start() > return vm > > @staticmethod > -- > 2.42.0