From patchwork Tue Jul 7 07:08:28 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Alex_Benn=C3=A9e?= X-Patchwork-Id: 234924 Delivered-To: patch@linaro.org Received: by 2002:a92:d244:0:0:0:0:0 with SMTP id v4csp656364ilg; Tue, 7 Jul 2020 00:16:56 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxZ4fjVCzWef4FWHbU+sdBhnFi4AKfcWKzRdEG4zvsZ4hs7lVEilMHJstiWx30ugwoJ2HDB X-Received: by 2002:a25:4f85:: with SMTP id d127mr1344989ybb.155.1594106216262; Tue, 07 Jul 2020 00:16:56 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1594106216; cv=none; d=google.com; s=arc-20160816; b=bWmACQ9Tqq7oteDNsY7FXTa09XcZMyKfaSX4n8c0Y9QghzRZCOnhYVpwK1uzicziS0 rCZAU/BGAQfet+5htKaBXcZkoVyL+Bhz/CsfZv4jk38qGqqNEWk6i9M6fat+Zo3m6iB1 aKxs7kYKz9wMUIJ6rpk2j/vLQk/XuvVJn2lz1m4krusRKdl08q5yNi/p/7AsFNV2VXHG R5K3PnghaKpAx96hPDVw3KZQD4VP5hFQGQ7+Ms9GSp0P9Snx2hXVMMK6lZ/96wr6e6bU 4P6hhSNjfdUVB8T4o6G7mhQyUOiLsBAaZTt2xkS22rndhfqpqP4T/CSrL0iQ+mD2X176 f1Hw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:cc:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:content-transfer-encoding :mime-version:references:in-reply-to:message-id:date:subject:to:from :dkim-signature; bh=3f/VHOspddBHT4k11DZu6PifAAchG3ueuum87F8Ii4I=; b=Fp8cuncYGU22oziisSQUPP2loY601F/2vmBJ2eqPy9erOLQ1hH4l6c5i49Pfp+Sr7L BWtPYxEtsVQDfIRS93Qt2i9QlH5c1/Q0yy7fBdt++608ulZ2ejioW+OBuJGSSo8pk5ny RWK7GnN4nVB2JMWDebS+bTJtO24JgFaL2UkS5Hmxi2pYJs1IQowYQPwF54IB96e0lRWR i1AVxynl5Zff/+1VCRnJYywfNGu+YG9KqiHzuIfHnDuXGFtX4bkFVXkzqNCMr62sb38A BmS8h1F05VajKYBlGltGQRFSeoeZd54ke8/jI5DJybmBDVaA5RDIOI+XoWXyNcwnHM1y Z/qw== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@linaro.org header.s=google header.b=e4GgYJSG; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id m9si18878773ybt.420.2020.07.07.00.16.56 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Tue, 07 Jul 2020 00:16:56 -0700 (PDT) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; Authentication-Results: mx.google.com; dkim=fail header.i=@linaro.org header.s=google header.b=e4GgYJSG; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([::1]:40248 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jshqZ-0001oG-MV for patch@linaro.org; Tue, 07 Jul 2020 03:16:55 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:42660) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jshjF-0004wn-Kl for qemu-devel@nongnu.org; Tue, 07 Jul 2020 03:09:21 -0400 Received: from mail-wr1-x42a.google.com ([2a00:1450:4864:20::42a]:40327) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jshjD-00046L-Ku for qemu-devel@nongnu.org; Tue, 07 Jul 2020 03:09:21 -0400 Received: by mail-wr1-x42a.google.com with SMTP id f2so15988767wrp.7 for ; Tue, 07 Jul 2020 00:09:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=3f/VHOspddBHT4k11DZu6PifAAchG3ueuum87F8Ii4I=; b=e4GgYJSGSdUDdTvWp4DXuGcsoHDKKRQjBXo34oPgu/tD75FJETV0mNfIvfGa98zmK4 EM+MSZWMyZaaMN5MGhTCfBd9s7VIaFD8W/NLpkX38ZlIOxnp4hMxzmL+Yt68lxboZ2Nl y8bCL151xoeOHjR9YvcDB7+j2CK7LUrVhMczcFUbk3Hdqazl12dUkF2C6EvhSe+tJLoJ /TnGxgwWRxt/mh3kFjuSUqiR0Zj4PKao9g8GbSeQNqVrki+X7zoxTQzOOYMLQjTSV+k/ JEjqE7NFyjVJsPm6HGfEAx6vzgsVLsR+SHFirvh9QkQUdsSJkoiCqFor6yvME+8skBM4 EEAg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=3f/VHOspddBHT4k11DZu6PifAAchG3ueuum87F8Ii4I=; b=Uo0wYZu4cwpS1FvRr73DlL9zNTsuiZXlQaibDaPMyjSSqdEJJM0xrB01PJ9SBsjpEj tzZ1Hc7WcXTgP8T+mvukl9nSSuKC2zRQMvxZi7BSZDy5HZ+iH1vW5DbFAyt+Rbx+2HBM KXpbo09RqRwh/vRvM3SO4ijXXNNp9W/BZ0Fn+oWYktk+plHILTQOHc0WISMVYJtH6RTJ ihFLf3oblK30Xfeia5SGOCa/65grwmsd5zY8uozH/2LZVrBoEnDX1ufQvn3syJL4xMKR 5Umb2s7i0ys7jJf2jSI2O0eyst73lOvC62Rf5kCqMOUAO8BnrDP6lPcUt/gQiyBNT9q0 o2hw== X-Gm-Message-State: AOAM5334Vzh/RJwthQA2E3o+qACUXooZGT4X3id0UZQ85g7cCrfdZBJR fzITa6nUJNcmKZR5ct1pt40Wlg== X-Received: by 2002:adf:f14e:: with SMTP id y14mr52429711wro.151.1594105758202; Tue, 07 Jul 2020 00:09:18 -0700 (PDT) Received: from zen.linaroharston ([51.148.130.216]) by smtp.gmail.com with ESMTPSA id u2sm2137896wml.16.2020.07.07.00.09.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 07 Jul 2020 00:09:10 -0700 (PDT) Received: from zen.lan (localhost [127.0.0.1]) by zen.linaroharston (Postfix) with ESMTP id 922191FF9A; Tue, 7 Jul 2020 08:08:59 +0100 (BST) From: =?utf-8?q?Alex_Benn=C3=A9e?= To: peter.maydell@linaro.org Subject: [PULL 11/41] tests/vm: Add workaround to consume console Date: Tue, 7 Jul 2020 08:08:28 +0100 Message-Id: <20200707070858.6622-12-alex.bennee@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200707070858.6622-1-alex.bennee@linaro.org> References: <20200707070858.6622-1-alex.bennee@linaro.org> MIME-Version: 1.0 Received-SPF: pass client-ip=2a00:1450:4864:20::42a; envelope-from=alex.bennee@linaro.org; helo=mail-wr1-x42a.google.com X-detected-operating-system: by eggs.gnu.org: No matching host in p0f cache. That's all we know. X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Fam Zheng , Robert Foley , =?utf-8?q?Alex_Benn=C3=A9e?= , qemu-devel@nongnu.org, Peter Puhov , =?utf-8?q?Philippe_Mathieu-Daud?= =?utf-8?b?w6k=?= Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" From: Robert Foley This adds support to basevm.py so that we always drain the console chars. This makes use of support added in an earlier commit that allows QEMUMachine to use the ConsoleSocket. This is a workaround we found was needed since there is a known issue where QEMU will hang waiting for console characters to be consumed. We also added the option of logging the console to a file. LOG_CONSOLE=1 will now log the output to a file. Signed-off-by: Robert Foley Reviewed-by: Peter Puhov Acked-by: Alex Bennée Signed-off-by: Alex Bennée Message-Id: <20200601211421.1277-10-robert.foley@linaro.org> Message-Id: <20200701135652.1366-14-alex.bennee@linaro.org> -- 2.20.1 diff --git a/tests/vm/Makefile.include b/tests/vm/Makefile.include index 39f918a430a5..f21948c46a52 100644 --- a/tests/vm/Makefile.include +++ b/tests/vm/Makefile.include @@ -49,6 +49,7 @@ endif @echo ' EXTRA_CONFIGURE_OPTS="..."' @echo " J=[0..9]* - Override the -jN parameter for make commands" @echo " DEBUG=1 - Enable verbose output on host and interactive debugging" + @echo " LOG_CONSOLE=1 - Log console to file in: ~/.cache/qemu-vm " @echo " V=1 - Enable verbose ouput on host and guest commands" @echo " QEMU_LOCAL=1 - Use QEMU binary local to this build." @echo " QEMU=/path/to/qemu - Change path to QEMU binary" @@ -75,6 +76,7 @@ $(IMAGES_DIR)/%.img: $(SRC_PATH)/tests/vm/% \ $(if $(GENISOIMAGE),--genisoimage $(GENISOIMAGE)) \ $(if $(QEMU_LOCAL),--build-path $(BUILD_DIR)) \ $(if $(EFI_AARCH64),--efi-aarch64 $(EFI_AARCH64)) \ + $(if $(LOG_CONSOLE),--log-console) \ --image "$@" \ --force \ --build-image $@, \ @@ -91,6 +93,7 @@ vm-build-%: $(IMAGES_DIR)/%.img $(if $(V),--verbose) \ $(if $(QEMU_LOCAL),--build-path $(BUILD_DIR)) \ $(if $(EFI_AARCH64),--efi-aarch64 $(EFI_AARCH64)) \ + $(if $(LOG_CONSOLE),--log-console) \ --image "$<" \ $(if $(BUILD_TARGET),--build-target $(BUILD_TARGET)) \ --snapshot \ @@ -114,6 +117,7 @@ vm-boot-ssh-%: $(IMAGES_DIR)/%.img $(if $(V)$(DEBUG), --debug) \ $(if $(QEMU_LOCAL),--build-path $(BUILD_DIR)) \ $(if $(EFI_AARCH64),--efi-aarch64 $(EFI_AARCH64)) \ + $(if $(LOG_CONSOLE),--log-console) \ --image "$<" \ --interactive \ false, \ diff --git a/tests/vm/basevm.py b/tests/vm/basevm.py index f716798b405e..04d083409a5f 100644 --- a/tests/vm/basevm.py +++ b/tests/vm/basevm.py @@ -117,6 +117,11 @@ class BaseVM(object): "w").write(self._config['ssh_pub_key']) self.debug = args.debug + self._console_log_path = None + if args.log_console: + self._console_log_path = \ + os.path.join(os.path.expanduser("~/.cache/qemu-vm"), + "{}.install.log".format(self.name)) self._stderr = sys.stderr self._devnull = open(os.devnull, "w") if self.debug: @@ -271,7 +276,13 @@ class BaseVM(object): args += self._data_args + extra_args + self._config['extra_args'] logging.debug("QEMU args: %s", " ".join(args)) qemu_path = get_qemu_path(self.arch, self._build_path) - guest = QEMUMachine(binary=qemu_path, args=args) + + # Since console_log_path is only set when the user provides the + # log_console option, we will set drain_console=True so the + # console is always drained. + guest = QEMUMachine(binary=qemu_path, args=args, + console_log=self._console_log_path, + drain_console=True) guest.set_machine(self._config['machine']) guest.set_console() try: @@ -285,6 +296,8 @@ class BaseVM(object): raise atexit.register(self.shutdown) self._guest = guest + # Init console so we can start consuming the chars. + self.console_init() usernet_info = guest.qmp("human-monitor-command", command_line="info usernet") self.ssh_port = None @@ -296,7 +309,9 @@ class BaseVM(object): raise Exception("Cannot find ssh port from 'info usernet':\n%s" % \ usernet_info) - def console_init(self, timeout = 120): + def console_init(self, timeout = None): + if timeout == None: + timeout = self.socket_timeout vm = self._guest vm.console_socket.settimeout(timeout) self.console_raw_path = os.path.join(vm._temp_dir, @@ -578,6 +593,8 @@ def parse_args(vmcls): parser.add_option("--efi-aarch64", default="/usr/share/qemu-efi-aarch64/QEMU_EFI.fd", help="Path to efi image for aarch64 VMs.") + parser.add_option("--log-console", action="store_true", + help="Log console to file.") parser.disable_interspersed_args() return parser.parse_args()