> 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

Reply via email to