From patchwork Mon Mar 18 15:45:58 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Nicholas Piggin X-Patchwork-Id: 1913177 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20230601 header.b=C5y0McQ2; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=patchwork.ozlabs.org) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4Tyzkm12LCz23sJ for ; Tue, 19 Mar 2024 02:47:28 +1100 (AEDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1rmFCW-0002iu-S7; Mon, 18 Mar 2024 11:47:00 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1rmFCP-0002fI-Er for qemu-devel@nongnu.org; Mon, 18 Mar 2024 11:46:53 -0400 Received: from mail-pf1-x430.google.com ([2607:f8b0:4864:20::430]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1rmFCB-0007op-Tn for qemu-devel@nongnu.org; Mon, 18 Mar 2024 11:46:53 -0400 Received: by mail-pf1-x430.google.com with SMTP id d2e1a72fcca58-6e6b54a28ebso4510459b3a.2 for ; Mon, 18 Mar 2024 08:46:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1710776798; x=1711381598; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=kHni6ZJIfTKQTizI7ELdR6+vUEfkW9RnizQcyJ2jZu8=; b=C5y0McQ2dH9fdiWccdh3T/O4t6JjkEkDiovfBU0+Abr6Lf3BWUdQRsm4Zcz0KBTwAE ksEsAiYr+rAYnw1yBq3irKEfUpK07+dw7jOam3jqU84f4lPWLnRWaaKJ0gDzOovDeaV1 LmUSy3SniE4V+/C8Fs1YAoyREK3SCPGdKhn4PaPUhlr7oX56fRDhVb7lWXfmZuST3wZ2 19uR8xZ1T3nl501f4Itg/ixGPQLNo66UPCOHl5AexBIBe21yek0y7k5vr2Pl9iz/++SK JY1wG2VeOwaQzBtTV68zzOG+C32zghOc0MkWbwCDihWxmfYhM0eWRbx5qr8vZu/p8oYy rtVw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1710776798; x=1711381598; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=kHni6ZJIfTKQTizI7ELdR6+vUEfkW9RnizQcyJ2jZu8=; b=YJFkLicoTLRPpUZxOxmTfsXb/5SAiz0gMJBUVZSe9NMgyvwgdFTs1kXgzB6JpcD4Wq IlAqWffYCoFAdcXxtFf6MLAH65DBnkA4pfttFT76vbXyvHBT1dBzNQsd6wboQbKgz4hV xmVLzfNy+FRwQlvzzupCCPplu8ZIgDThQwF/bFpFROlOSZuc0i2B+kms2OMRh2cR6Cyv nI9NoqxgEisZgogGUK9uaKQBNV6TW2bzHHv6srdZ4qnNKVaEQQGLVhEKsCZso/FFSHah mWA6PVYj/tUz6cVZp1PDZ88dLdc4q2uOyoZtz+p8Yt/gTidYYKo/ILwzeWwO4GgzE5dZ xkRQ== X-Gm-Message-State: AOJu0YxDgdYOw5Xg0c5Lg93CLAgdvlX2MO0dLXnPboQa0UvGUhDMyMbq MkQOy9sdxSVjMS8VjlUDu/+STKHsu4aPW3VakyzNhMoMKoQu43kzoIH2iSIKVds= X-Google-Smtp-Source: AGHT+IEWOkvHufmKQxPX4pRwMY/qB5cQikvtwsfFuM9xYFtxrU68gTBPe23YUucvo+kYnqw7M2WRBw== X-Received: by 2002:a05:6a20:d48f:b0:1a3:4737:42e2 with SMTP id im15-20020a056a20d48f00b001a3473742e2mr13088495pzb.19.1710776798419; Mon, 18 Mar 2024 08:46:38 -0700 (PDT) Received: from wheely.local0.net ([118.208.155.46]) by smtp.gmail.com with ESMTPSA id v22-20020a634816000000b005dc26144d96sm7332108pga.75.2024.03.18.08.46.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 18 Mar 2024 08:46:38 -0700 (PDT) From: Nicholas Piggin To: qemu-devel@nongnu.org Cc: Nicholas Piggin , Pavel Dovgalyuk , =?utf-8?q?Philippe_Mathieu-Dau?= =?utf-8?q?d=C3=A9?= , Richard Henderson , =?utf-8?q?Alex_Benn=C3=A9?= =?utf-8?q?e?= , Paolo Bonzini , John Snow , Cleber Rosa , Wainer dos Santos Moschetta , Beraldo Leal , Michael Tokarev Subject: [PATCH v5 01/24] scripts/replay-dump.py: Update to current rr record format Date: Tue, 19 Mar 2024 01:45:58 +1000 Message-ID: <20240318154621.2361161-2-npiggin@gmail.com> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20240318154621.2361161-1-npiggin@gmail.com> References: <20240318154621.2361161-1-npiggin@gmail.com> MIME-Version: 1.0 Received-SPF: pass client-ip=2607:f8b0:4864:20::430; envelope-from=npiggin@gmail.com; helo=mail-pf1-x430.google.com 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, FREEMAIL_FROM=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org The v12 format support for replay-dump has a few issues still. This fixes async decoding; adds event, shutdown, and end decoding; fixes audio in / out events, fixes checkpoint checking of following async events. Reviewed-by: Alex Bennée Signed-off-by: Nicholas Piggin --- scripts/replay-dump.py | 127 ++++++++++++++++++++++++++++++----------- 1 file changed, 93 insertions(+), 34 deletions(-) diff --git a/scripts/replay-dump.py b/scripts/replay-dump.py index d668193e79..419ee3257b 100755 --- a/scripts/replay-dump.py +++ b/scripts/replay-dump.py @@ -20,6 +20,7 @@ import argparse import struct +import os from collections import namedtuple from os import path @@ -134,6 +135,17 @@ def swallow_async_qword(eid, name, dumpfile): print(" %s(%d) @ %d" % (name, eid, step_id)) return True +def swallow_bytes(eid, name, dumpfile, nr): + """Swallow nr bytes of data without looking at it""" + dumpfile.seek(nr, os.SEEK_CUR) + +def decode_exception(eid, name, dumpfile): + print_event(eid, name) + return True + +# v12 does away with the additional event byte and encodes it in the main type +# Between v8 and v9, REPLAY_ASYNC_BH_ONESHOT was added, but we don't decode +# those versions so leave it out. async_decode_table = [ Decoder(0, "REPLAY_ASYNC_EVENT_BH", swallow_async_qword), Decoder(1, "REPLAY_ASYNC_INPUT", decode_unimp), Decoder(2, "REPLAY_ASYNC_INPUT_SYNC", decode_unimp), @@ -142,8 +154,8 @@ def swallow_async_qword(eid, name, dumpfile): Decoder(5, "REPLAY_ASYNC_EVENT_NET", decode_unimp), ] # See replay_read_events/replay_read_event -def decode_async(eid, name, dumpfile): - """Decode an ASYNC event""" +def decode_async_old(eid, name, dumpfile): + """Decode an ASYNC event (pre-v8)""" print_event(eid, name) @@ -157,6 +169,35 @@ def decode_async(eid, name, dumpfile): return call_decode(async_decode_table, async_event_kind, dumpfile) +def decode_async_bh(eid, name, dumpfile): + op_id = read_qword(dumpfile) + print_event(eid, name) + return True + +def decode_async_bh_oneshot(eid, name, dumpfile): + op_id = read_qword(dumpfile) + print_event(eid, name) + return True + +def decode_async_char_read(eid, name, dumpfile): + char_id = read_byte(dumpfile) + size = read_dword(dumpfile) + print_event(eid, name, "device:%x chars:%s" % (char_id, dumpfile.read(size))) + return True + +def decode_async_block(eid, name, dumpfile): + op_id = read_qword(dumpfile) + print_event(eid, name) + return True + +def decode_async_net(eid, name, dumpfile): + net_id = read_byte(dumpfile) + flags = read_dword(dumpfile) + size = read_dword(dumpfile) + swallow_bytes(eid, name, dumpfile, size) + print_event(eid, name, "net:%x flags:%x bytes:%d" % (net_id, flags, size)) + return True + total_insns = 0 def decode_instruction(eid, name, dumpfile): @@ -166,6 +207,10 @@ def decode_instruction(eid, name, dumpfile): print_event(eid, name, "+ %d -> %d" % (ins_diff, total_insns)) return True +def decode_shutdown(eid, name, dumpfile): + print_event(eid, name) + return True + def decode_char_write(eid, name, dumpfile): res = read_dword(dumpfile) offset = read_dword(dumpfile) @@ -177,7 +222,7 @@ def decode_audio_out(eid, name, dumpfile): print_event(eid, name, "%d" % (audio_data)) return True -def decode_checkpoint(eid, name, dumpfile): +def __decode_checkpoint(eid, name, dumpfile, old): """Decode a checkpoint. Checkpoints contain a series of async events with their own specific data. @@ -189,14 +234,20 @@ def decode_checkpoint(eid, name, dumpfile): # if the next event is EVENT_ASYNC there are a bunch of # async events to read, otherwise we are done - if next_event != 3: - print_event(eid, name, "no additional data", event_number) - else: + if (old and next_event == 3) or (not old and next_event >= 3 and next_event <= 9): print_event(eid, name, "more data follows", event_number) + else: + print_event(eid, name, "no additional data", event_number) replay_state.reuse_event(next_event) return True +def decode_checkpoint_old(eid, name, dumpfile): + return __decode_checkpoint(eid, name, dumpfile, False) + +def decode_checkpoint(eid, name, dumpfile): + return __decode_checkpoint(eid, name, dumpfile, True) + def decode_checkpoint_init(eid, name, dumpfile): print_event(eid, name) return True @@ -212,15 +263,23 @@ def decode_clock(eid, name, dumpfile): def decode_random(eid, name, dumpfile): ret = read_dword(dumpfile) - data = read_array(dumpfile) - print_event(eid, "%d bytes of random data" % len(data)) + size = read_dword(dumpfile) + swallow_bytes(eid, name, dumpfile, size) + if (ret): + print_event(eid, name, "%d bytes (getrandom failed)" % (size)) + else: + print_event(eid, name, "%d bytes" % (size)) return True +def decode_end(eid, name, dumpfile): + print_event(eid, name) + return False + # pre-MTTCG merge v5_event_table = [Decoder(0, "EVENT_INSTRUCTION", decode_instruction), Decoder(1, "EVENT_INTERRUPT", decode_interrupt), Decoder(2, "EVENT_EXCEPTION", decode_plain), - Decoder(3, "EVENT_ASYNC", decode_async), + Decoder(3, "EVENT_ASYNC", decode_async_old), Decoder(4, "EVENT_SHUTDOWN", decode_unimp), Decoder(5, "EVENT_CHAR_WRITE", decode_char_write), Decoder(6, "EVENT_CHAR_READ_ALL", decode_unimp), @@ -242,7 +301,7 @@ def decode_random(eid, name, dumpfile): v6_event_table = [Decoder(0, "EVENT_INSTRUCTION", decode_instruction), Decoder(1, "EVENT_INTERRUPT", decode_interrupt), Decoder(2, "EVENT_EXCEPTION", decode_plain), - Decoder(3, "EVENT_ASYNC", decode_async), + Decoder(3, "EVENT_ASYNC", decode_async_old), Decoder(4, "EVENT_SHUTDOWN", decode_unimp), Decoder(5, "EVENT_CHAR_WRITE", decode_char_write), Decoder(6, "EVENT_CHAR_READ_ALL", decode_unimp), @@ -266,7 +325,7 @@ def decode_random(eid, name, dumpfile): v7_event_table = [Decoder(0, "EVENT_INSTRUCTION", decode_instruction), Decoder(1, "EVENT_INTERRUPT", decode_interrupt), Decoder(2, "EVENT_EXCEPTION", decode_unimp), - Decoder(3, "EVENT_ASYNC", decode_async), + Decoder(3, "EVENT_ASYNC", decode_async_old), Decoder(4, "EVENT_SHUTDOWN", decode_unimp), Decoder(5, "EVENT_SHUTDOWN_HOST_ERR", decode_unimp), Decoder(6, "EVENT_SHUTDOWN_HOST_QMP", decode_unimp), @@ -296,32 +355,31 @@ def decode_random(eid, name, dumpfile): v12_event_table = [Decoder(0, "EVENT_INSTRUCTION", decode_instruction), Decoder(1, "EVENT_INTERRUPT", decode_interrupt), - Decoder(2, "EVENT_EXCEPTION", decode_plain), - Decoder(3, "EVENT_ASYNC", decode_async), - Decoder(4, "EVENT_ASYNC", decode_async), - Decoder(5, "EVENT_ASYNC", decode_async), - Decoder(6, "EVENT_ASYNC", decode_async), - Decoder(6, "EVENT_ASYNC", decode_async), - Decoder(8, "EVENT_ASYNC", decode_async), - Decoder(9, "EVENT_ASYNC", decode_async), - Decoder(10, "EVENT_ASYNC", decode_async), - Decoder(11, "EVENT_SHUTDOWN", decode_unimp), - Decoder(12, "EVENT_SHUTDOWN_HOST_ERR", decode_unimp), - Decoder(13, "EVENT_SHUTDOWN_HOST_QMP_QUIT", decode_unimp), - Decoder(14, "EVENT_SHUTDOWN_HOST_QMP_RESET", decode_unimp), - Decoder(14, "EVENT_SHUTDOWN_HOST_SIGNAL", decode_unimp), - Decoder(15, "EVENT_SHUTDOWN_HOST_UI", decode_unimp), - Decoder(16, "EVENT_SHUTDOWN_GUEST_SHUTDOWN", decode_unimp), - Decoder(17, "EVENT_SHUTDOWN_GUEST_RESET", decode_unimp), - Decoder(18, "EVENT_SHUTDOWN_GUEST_PANIC", decode_unimp), - Decoder(19, "EVENT_SHUTDOWN_GUEST_SUBSYSTEM_RESET", decode_unimp), - Decoder(20, "EVENT_SHUTDOWN_GUEST_SNAPSHOT_LOAD", decode_unimp), - Decoder(21, "EVENT_SHUTDOWN___MAX", decode_unimp), + Decoder(2, "EVENT_EXCEPTION", decode_exception), + Decoder(3, "EVENT_ASYNC_BH", decode_async_bh), + Decoder(4, "EVENT_ASYNC_BH_ONESHOT", decode_async_bh_oneshot), + Decoder(5, "EVENT_ASYNC_INPUT", decode_unimp), + Decoder(6, "EVENT_ASYNC_INPUT_SYNC", decode_unimp), + Decoder(7, "EVENT_ASYNC_CHAR_READ", decode_async_char_read), + Decoder(8, "EVENT_ASYNC_BLOCK", decode_async_block), + Decoder(9, "EVENT_ASYNC_NET", decode_async_net), + Decoder(10, "EVENT_SHUTDOWN", decode_shutdown), + Decoder(11, "EVENT_SHUTDOWN_HOST_ERR", decode_shutdown), + Decoder(12, "EVENT_SHUTDOWN_HOST_QMP_QUIT", decode_shutdown), + Decoder(13, "EVENT_SHUTDOWN_HOST_QMP_RESET", decode_shutdown), + Decoder(14, "EVENT_SHUTDOWN_HOST_SIGNAL", decode_shutdown), + Decoder(15, "EVENT_SHUTDOWN_HOST_UI", decode_shutdown), + Decoder(16, "EVENT_SHUTDOWN_GUEST_SHUTDOWN", decode_shutdown), + Decoder(17, "EVENT_SHUTDOWN_GUEST_RESET", decode_shutdown), + Decoder(18, "EVENT_SHUTDOWN_GUEST_PANIC", decode_shutdown), + Decoder(19, "EVENT_SHUTDOWN_SUBSYS_RESET", decode_shutdown), + Decoder(20, "EVENT_SHUTDOWN_SNAPSHOT_LOAD", decode_shutdown), + Decoder(21, "EVENT_SHUTDOWN___MAX", decode_shutdown), Decoder(22, "EVENT_CHAR_WRITE", decode_char_write), Decoder(23, "EVENT_CHAR_READ_ALL", decode_unimp), Decoder(24, "EVENT_CHAR_READ_ALL_ERROR", decode_unimp), - Decoder(25, "EVENT_AUDIO_IN", decode_unimp), - Decoder(26, "EVENT_AUDIO_OUT", decode_audio_out), + Decoder(25, "EVENT_AUDIO_OUT", decode_audio_out), + Decoder(26, "EVENT_AUDIO_IN", decode_unimp), Decoder(27, "EVENT_RANDOM", decode_random), Decoder(28, "EVENT_CLOCK_HOST", decode_clock), Decoder(29, "EVENT_CLOCK_VIRTUAL_RT", decode_clock), @@ -334,6 +392,7 @@ def decode_random(eid, name, dumpfile): Decoder(36, "EVENT_CP_CLOCK_VIRTUAL_RT", decode_checkpoint), Decoder(37, "EVENT_CP_INIT", decode_checkpoint_init), Decoder(38, "EVENT_CP_RESET", decode_checkpoint), + Decoder(39, "EVENT_END", decode_end), ] def parse_arguments(): From patchwork Mon Mar 18 15:45:59 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Nicholas Piggin X-Patchwork-Id: 1913178 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20230601 header.b=Wi13bPoA; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=patchwork.ozlabs.org) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4Tyzkr2x19z23sG for ; Tue, 19 Mar 2024 02:47:32 +1100 (AEDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1rmFCO-0002eh-SZ; Mon, 18 Mar 2024 11:46:52 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1rmFCM-0002Ur-Od for qemu-devel@nongnu.org; Mon, 18 Mar 2024 11:46:50 -0400 Received: from mail-pf1-x42f.google.com ([2607:f8b0:4864:20::42f]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1rmFCI-0007pk-BO for qemu-devel@nongnu.org; Mon, 18 Mar 2024 11:46:50 -0400 Received: by mail-pf1-x42f.google.com with SMTP id d2e1a72fcca58-6e6ce174d45so3553047b3a.3 for ; Mon, 18 Mar 2024 08:46:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1710776804; x=1711381604; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=SLLsOmMfH6Hic0UmOy3GbMHG10bAawMzfOEyo9niiZA=; b=Wi13bPoA7Dcu93ipC8Kij6uWH9F+/xHvjgWi+OSFNsMGQ06aFkI8fcEBG04q5tfWt7 HIC/lLVQqjG1DA5k+BEOXiYHqRZ6FJimJrmhFNCeUlm/zIH98+PoD8ITh6OPCn94zBCG /f3cAEQJkO0PP+kv1ZROD5WeGHJLtcmKXvdjSwdCnrZxr/V5U3h1wSnhe4EmCNkJ3fUR tP1Tq3qdFC5sV8xWQhU+q55ZKVkknc2yTwchRwa4xf8SPABh+55yi4U8WF9UVQeFq4Up kyo8h5hz/F5gLPEOdJ2MZd/JK+Wdo7sonIsowuBg3mUoxzWOYux+xzxT+K/VlV6O89EH 2hXQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1710776804; x=1711381604; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=SLLsOmMfH6Hic0UmOy3GbMHG10bAawMzfOEyo9niiZA=; b=WoQcbeWOEEDDVlW5gnj7E6+aMiZFd7cKTFpYIpxpPHeP94jNAKJoZfdlP5TauYAyr+ huwqE6ZLhgUiDh6JAL1h/ErURSbOD2gwaSjs23cIFTr8kmtO9axsB2FMrCZ3QPdQIsuF AxV0k1NirxqmtPjXbyVE8ZiEaR+/GLH2KO6wp3IoXwwl2r5pWiRpfdZj8h2M7sDO9W/D sv1x6I5e3uc+ivFl8Z38hjM4Ivq6WXxBD4gCAPZld2YBl6cSksOpFW6COMMDsvXqcV60 CMRcFfG+XBrgC4DFsa6ymL0aZaJFvUydDaFSn9IOg8MHWQGip9ZdHEku82ZNQswJaZgn PUUQ== X-Gm-Message-State: AOJu0YxtaXkt7laclypiESvlOIAcYFvV2I7r1g2yCHoXRH+k0LeSQaz+ Oh2uHYsd0TpswhOtFCiiFy0j24nHwVVMRrtX3eOP0eoc9F+IKU7FusA58ckD2PY= X-Google-Smtp-Source: AGHT+IGtjZWBpdak5J334qTOLd36yu1+eU8bR4frRfz/bWLbjlDIqNxpMQnlrZ+/Y9AXusGEI7/JYw== X-Received: by 2002:a05:6a21:3986:b0:1a3:67cb:f7c4 with SMTP id ad6-20020a056a21398600b001a367cbf7c4mr2552443pzc.34.1710776804297; Mon, 18 Mar 2024 08:46:44 -0700 (PDT) Received: from wheely.local0.net ([118.208.155.46]) by smtp.gmail.com with ESMTPSA id v22-20020a634816000000b005dc26144d96sm7332108pga.75.2024.03.18.08.46.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 18 Mar 2024 08:46:44 -0700 (PDT) From: Nicholas Piggin To: qemu-devel@nongnu.org Cc: Nicholas Piggin , Pavel Dovgalyuk , =?utf-8?q?Philippe_Mathieu-Dau?= =?utf-8?q?d=C3=A9?= , Richard Henderson , =?utf-8?q?Alex_Benn=C3=A9?= =?utf-8?q?e?= , Paolo Bonzini , John Snow , Cleber Rosa , Wainer dos Santos Moschetta , Beraldo Leal , Michael Tokarev Subject: [PATCH v5 02/24] scripts/replay-dump.py: rejig decoders in event number order Date: Tue, 19 Mar 2024 01:45:59 +1000 Message-ID: <20240318154621.2361161-3-npiggin@gmail.com> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20240318154621.2361161-1-npiggin@gmail.com> References: <20240318154621.2361161-1-npiggin@gmail.com> MIME-Version: 1.0 Received-SPF: pass client-ip=2607:f8b0:4864:20::42f; envelope-from=npiggin@gmail.com; helo=mail-pf1-x42f.google.com 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, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sort decoder functions to be ascending in order of event number, same as the decoder tables. Reviewed-by: Alex Bennée Signed-off-by: Nicholas Piggin --- scripts/replay-dump.py | 56 +++++++++++++++++++++--------------------- 1 file changed, 28 insertions(+), 28 deletions(-) diff --git a/scripts/replay-dump.py b/scripts/replay-dump.py index 419ee3257b..b82659cfb6 100755 --- a/scripts/replay-dump.py +++ b/scripts/replay-dump.py @@ -139,6 +139,19 @@ def swallow_bytes(eid, name, dumpfile, nr): """Swallow nr bytes of data without looking at it""" dumpfile.seek(nr, os.SEEK_CUR) +total_insns = 0 + +def decode_instruction(eid, name, dumpfile): + global total_insns + ins_diff = read_dword(dumpfile) + total_insns += ins_diff + print_event(eid, name, "+ %d -> %d" % (ins_diff, total_insns)) + return True + +def decode_interrupt(eid, name, dumpfile): + print_event(eid, name) + return True + def decode_exception(eid, name, dumpfile): print_event(eid, name) return True @@ -198,15 +211,6 @@ def decode_async_net(eid, name, dumpfile): print_event(eid, name, "net:%x flags:%x bytes:%d" % (net_id, flags, size)) return True -total_insns = 0 - -def decode_instruction(eid, name, dumpfile): - global total_insns - ins_diff = read_dword(dumpfile) - total_insns += ins_diff - print_event(eid, name, "+ %d -> %d" % (ins_diff, total_insns)) - return True - def decode_shutdown(eid, name, dumpfile): print_event(eid, name) return True @@ -222,6 +226,21 @@ def decode_audio_out(eid, name, dumpfile): print_event(eid, name, "%d" % (audio_data)) return True +def decode_random(eid, name, dumpfile): + ret = read_dword(dumpfile) + size = read_dword(dumpfile) + swallow_bytes(eid, name, dumpfile, size) + if (ret): + print_event(eid, name, "%d bytes (getrandom failed)" % (size)) + else: + print_event(eid, name, "%d bytes" % (size)) + return True + +def decode_clock(eid, name, dumpfile): + clock_data = read_qword(dumpfile) + print_event(eid, name, "0x%x" % (clock_data)) + return True + def __decode_checkpoint(eid, name, dumpfile, old): """Decode a checkpoint. @@ -252,25 +271,6 @@ def decode_checkpoint_init(eid, name, dumpfile): print_event(eid, name) return True -def decode_interrupt(eid, name, dumpfile): - print_event(eid, name) - return True - -def decode_clock(eid, name, dumpfile): - clock_data = read_qword(dumpfile) - print_event(eid, name, "0x%x" % (clock_data)) - return True - -def decode_random(eid, name, dumpfile): - ret = read_dword(dumpfile) - size = read_dword(dumpfile) - swallow_bytes(eid, name, dumpfile, size) - if (ret): - print_event(eid, name, "%d bytes (getrandom failed)" % (size)) - else: - print_event(eid, name, "%d bytes" % (size)) - return True - def decode_end(eid, name, dumpfile): print_event(eid, name) return False From patchwork Mon Mar 18 15:46:00 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Nicholas Piggin X-Patchwork-Id: 1913179 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20230601 header.b=b/Q1AmHA; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=patchwork.ozlabs.org) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4TyzlF6DPTz23sG for ; Tue, 19 Mar 2024 02:47:53 +1100 (AEDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1rmFCd-0002lH-5v; Mon, 18 Mar 2024 11:47:07 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1rmFCU-0002iU-QO for qemu-devel@nongnu.org; Mon, 18 Mar 2024 11:46:58 -0400 Received: from mail-pf1-x432.google.com ([2607:f8b0:4864:20::432]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1rmFCS-0007qk-Cm for qemu-devel@nongnu.org; Mon, 18 Mar 2024 11:46:58 -0400 Received: by mail-pf1-x432.google.com with SMTP id d2e1a72fcca58-6e6b3dc3564so3675198b3a.2 for ; Mon, 18 Mar 2024 08:46:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1710776815; x=1711381615; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=oWOo89/EBibG8iMG/agMGDjbR7xyjWs28ccHoq9+4CA=; b=b/Q1AmHAV6/4HGeNtDJThM4IMQ8jZTb3k0PgMWSaGKqMRQxTTFBd9kyYHCMx8ArZFE 3B0LifVtNgOCBjJjzUruFh1kEPp2o4qDL8ETLGNOK20xOtkxRLtvi2ZZ+ZH2hG3kjls7 KjPc7QV7vGgcOs3USVEZkLqjC3zgigc3HU1YsfcknIdsjMBOIWpb9JvyhwqY+Kr0uEtP insiT8L9hlVlfiBtX3aFwsEH1qoSNpPfbHNIhajF6h7eiRmhaKLFjVzpCBP8RsN2INFF 9oTlCVbI5OFedzIPC1owJZQ2ry49HNXT4RBEx5wvLSAD+BCwjIdK4Al87Tic0gj+Y0k2 K7GA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1710776815; x=1711381615; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=oWOo89/EBibG8iMG/agMGDjbR7xyjWs28ccHoq9+4CA=; b=HdE7cyD7RD5uZ2cZCBJ3BkJWtEhp/kkFPsp6APPQ/8O5nso4LD+5cRw7SUyml5wY6j VQEUxR/6FG11m09wTjGfbzeb9gOIgwWS+Yn8B02m9jNW9mZZ1jBrvqxwRLododMcovQc vQtvvYGYv7h90j4Jkhkqvc75YmutsjdQPBeveIt7NG/kgSrjQH7tmYwesVp8JDPIGKWQ ChwCw57KpD66P1sscMLu4B837KcUYD0ZRW/wwMhi+Z0pL2PjE12OVSYMWvV0GdkYPN3Y +310FD4EjTmEZkrmAZVYjPHLgg8VQHBPc67ZnIgA7BdXQ9tZje4K54eVUfGKsfJysXE1 307A== X-Gm-Message-State: AOJu0YwS+0/6dCkEs6vEPTeTvhURBktDl57abezYQbw01As2AMCLwqy9 075MEDVBMliJqpM55F/o0k4ex6+fAvYbSsavd3FXkxKTsSctEE2IM2nntXhXG+s= X-Google-Smtp-Source: AGHT+IG0tMnhWSl754DXZClCLjCPQTvdFEpyTzD79ySGKdmVNQZHMEkrpfBs28lPSxYAZn4QE0xoKw== X-Received: by 2002:a05:6a20:c89b:b0:1a3:66e5:5c8f with SMTP id hb27-20020a056a20c89b00b001a366e55c8fmr2805111pzb.28.1710776809856; Mon, 18 Mar 2024 08:46:49 -0700 (PDT) Received: from wheely.local0.net ([118.208.155.46]) by smtp.gmail.com with ESMTPSA id v22-20020a634816000000b005dc26144d96sm7332108pga.75.2024.03.18.08.46.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 18 Mar 2024 08:46:49 -0700 (PDT) From: Nicholas Piggin To: qemu-devel@nongnu.org Cc: Nicholas Piggin , Pavel Dovgalyuk , =?utf-8?q?Philippe_Mathieu-Dau?= =?utf-8?q?d=C3=A9?= , Richard Henderson , =?utf-8?q?Alex_Benn=C3=A9?= =?utf-8?q?e?= , Paolo Bonzini , John Snow , Cleber Rosa , Wainer dos Santos Moschetta , Beraldo Leal , Michael Tokarev Subject: [PATCH v5 03/24] tests/avocado: excercise scripts/replay-dump.py in replay tests Date: Tue, 19 Mar 2024 01:46:00 +1000 Message-ID: <20240318154621.2361161-4-npiggin@gmail.com> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20240318154621.2361161-1-npiggin@gmail.com> References: <20240318154621.2361161-1-npiggin@gmail.com> MIME-Version: 1.0 Received-SPF: pass client-ip=2607:f8b0:4864:20::432; envelope-from=npiggin@gmail.com; helo=mail-pf1-x432.google.com 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, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org This runs replay-dump.py after recording a trace, and fails the test if the script fails. replay-dump.py is modified to exit with non-zero if an error is encountered while parsing, to support this. Reviewed-by: Alex Bennée Reviewed-by: Pavel Dovgalyuk Signed-off-by: Nicholas Piggin --- scripts/replay-dump.py | 6 ++++-- tests/avocado/replay_kernel.py | 13 ++++++++++++- tests/avocado/replay_linux.py | 10 ++++++++++ 3 files changed, 26 insertions(+), 3 deletions(-) diff --git a/scripts/replay-dump.py b/scripts/replay-dump.py index b82659cfb6..4ce7ff51cc 100755 --- a/scripts/replay-dump.py +++ b/scripts/replay-dump.py @@ -21,6 +21,7 @@ import argparse import struct import os +import sys from collections import namedtuple from os import path @@ -100,7 +101,7 @@ def call_decode(table, index, dumpfile): print("Could not decode index: %d" % (index)) print("Entry is: %s" % (decoder)) print("Decode Table is:\n%s" % (table)) - return False + raise(Exception("unknown event")) else: return decoder.fn(decoder.eid, decoder.name, dumpfile) @@ -121,7 +122,7 @@ def print_event(eid, name, string=None, event_count=None): def decode_unimp(eid, name, _unused_dumpfile): "Unimplemented decoder, will trigger exit" print("%s not handled - will now stop" % (name)) - return False + raise(Exception("unhandled event")) def decode_plain(eid, name, _unused_dumpfile): "Plain events without additional data" @@ -434,6 +435,7 @@ def decode_file(filename): dumpfile) except Exception as inst: print(f"error {inst}") + sys.exit(1) finally: print(f"Reached {dumpfile.tell()} of {dumpsize} bytes") diff --git a/tests/avocado/replay_kernel.py b/tests/avocado/replay_kernel.py index 10d99403a4..22032f3230 100644 --- a/tests/avocado/replay_kernel.py +++ b/tests/avocado/replay_kernel.py @@ -13,6 +13,7 @@ import shutil import logging import time +import subprocess from avocado import skip from avocado import skipUnless @@ -31,7 +32,7 @@ class ReplayKernelBase(LinuxKernelTest): terminates. """ - timeout = 120 + timeout = 180 KERNEL_COMMON_COMMAND_LINE = 'printk.time=1 panic=-1 ' def run_vm(self, kernel_path, kernel_command_line, console_pattern, @@ -63,6 +64,8 @@ def run_vm(self, kernel_path, kernel_command_line, console_pattern, vm.shutdown() logger.info('finished the recording with log size %s bytes' % os.path.getsize(replay_path)) + self.run_replay_dump(replay_path) + logger.info('successfully tested replay-dump.py') else: vm.wait() logger.info('successfully finished the replay') @@ -70,6 +73,14 @@ def run_vm(self, kernel_path, kernel_command_line, console_pattern, logger.info('elapsed time %.2f sec' % elapsed) return elapsed + def run_replay_dump(self, replay_path): + try: + subprocess.check_call(["./scripts/replay-dump.py", + "-f", replay_path], + stdout=subprocess.DEVNULL) + except subprocess.CalledProcessError: + self.fail('replay-dump.py failed') + def run_rr(self, kernel_path, kernel_command_line, console_pattern, shift=7, args=None): replay_path = os.path.join(self.workdir, 'replay.bin') diff --git a/tests/avocado/replay_linux.py b/tests/avocado/replay_linux.py index f3a43dc98c..b3b91ddd9a 100644 --- a/tests/avocado/replay_linux.py +++ b/tests/avocado/replay_linux.py @@ -94,6 +94,8 @@ def launch_and_wait(self, record, args, shift): vm.shutdown() logger.info('finished the recording with log size %s bytes' % os.path.getsize(replay_path)) + self.run_replay_dump(replay_path) + logger.info('successfully tested replay-dump.py') else: vm.event_wait('SHUTDOWN', self.timeout) vm.wait() @@ -108,6 +110,14 @@ def run_rr(self, args=None, shift=7): logger = logging.getLogger('replay') logger.info('replay overhead {:.2%}'.format(t2 / t1 - 1)) + def run_replay_dump(self, replay_path): + try: + subprocess.check_call(["./scripts/replay-dump.py", + "-f", replay_path], + stdout=subprocess.DEVNULL) + except subprocess.CalledProcessError: + self.fail('replay-dump.py failed') + @skipUnless(os.getenv('AVOCADO_TIMEOUT_EXPECTED'), 'Test might timeout') class ReplayLinuxX8664(ReplayLinux): """ From patchwork Mon Mar 18 15:46:01 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Nicholas Piggin X-Patchwork-Id: 1913181 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20230601 header.b=VQ8JuSZo; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=patchwork.ozlabs.org) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4TyzlG3lDjz23sJ for ; Tue, 19 Mar 2024 02:47:54 +1100 (AEDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1rmFCe-0002ln-Kz; Mon, 18 Mar 2024 11:47:08 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1rmFCW-0002j6-JP for qemu-devel@nongnu.org; Mon, 18 Mar 2024 11:47:00 -0400 Received: from mail-pg1-x530.google.com ([2607:f8b0:4864:20::530]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1rmFCT-0007qp-DP for qemu-devel@nongnu.org; Mon, 18 Mar 2024 11:47:00 -0400 Received: by mail-pg1-x530.google.com with SMTP id 41be03b00d2f7-5cf2d73a183so3725403a12.1 for ; Mon, 18 Mar 2024 08:46:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1710776816; x=1711381616; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=SaaO9SZsKEZz6NFFljqKDw7YBSQBKN32a+oOPm6wNWc=; b=VQ8JuSZorzEpV1lWWLO3T/j1tttnkMl5OGdNZnkK0HYmMD05n0U3YH+OYcwCj3isya BL1Z4HZSe4pDKYK7KOj72otbgkTEpWGZjoDnNsVAiZ7LZIdm3f6XzVY2sGMI0vWarW6T lJ5iXFLoHdvE8U5bOlwAfaxEpcikgQTP7BRa7rb7fPzWnCf01BhsWngds9yon056r3jA MY2cNCxzP4A1QZhAXAVxCqtfsmTYhXxvrZGZzraN4dDwSz0orv5sd+WXgoGWWoTx1adz QSUniuh/h85diuteuifFJf9toF4zSxNvDgFGAgx4kTln76p75uzkQJbXBAQMug2vxKvi +GUQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1710776816; x=1711381616; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=SaaO9SZsKEZz6NFFljqKDw7YBSQBKN32a+oOPm6wNWc=; b=YlwFuVEJxLVRGU+AALyd/FTQXReg3Fd9LyGoCwlFnu3Vp7EssnkcqWIUzj+rMv1/EA aCgMHWQdcT2BhJEwLbXjhzk425IFsRJlsQ4MnzkM/dfTRCxByda6i6ibJCSOZ3o4vWco 2d1a3YV9DA5bw5uOeFJawESvcqEAz5g+NBufstRYdxcTjjlb03EuNDUKVdt/tCE8mCSa pcf3eqrGKskATX/gPnPdKqBk8135bIWA/9a6VRNH2/boAtHVQvJbffeQ/rv6UHi7kboV 02k542GcM0koc58PtV5+kveu6PxNvEBXlpsPh8SQNrBBz5JXjcKokVGSVvEPHCurSXq/ /Vdg== X-Gm-Message-State: AOJu0Yw6CYqChtPveg8z6dCZJ8SpYNRZjw0U6MivY4WfakydC6y60KEz kCQzPf7dQhNr1obytXpX1l+HqMxhmRVUZY5ckYiaJA0djj0pZuc4flNd1Nk6w8w= X-Google-Smtp-Source: AGHT+IHSOTr/2u6EkLz5/ck5gYpngRGlREmPs99jsA/1P1jPYsWVpLVuF8CDdT9H06jNHjpZlRjxiQ== X-Received: by 2002:a17:90b:34c:b0:29e:89b:9446 with SMTP id fh12-20020a17090b034c00b0029e089b9446mr18621pjb.1.1710776815695; Mon, 18 Mar 2024 08:46:55 -0700 (PDT) Received: from wheely.local0.net ([118.208.155.46]) by smtp.gmail.com with ESMTPSA id v22-20020a634816000000b005dc26144d96sm7332108pga.75.2024.03.18.08.46.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 18 Mar 2024 08:46:55 -0700 (PDT) From: Nicholas Piggin To: qemu-devel@nongnu.org Cc: Nicholas Piggin , Pavel Dovgalyuk , =?utf-8?q?Philippe_Mathieu-Dau?= =?utf-8?q?d=C3=A9?= , Richard Henderson , =?utf-8?q?Alex_Benn=C3=A9?= =?utf-8?q?e?= , Paolo Bonzini , John Snow , Cleber Rosa , Wainer dos Santos Moschetta , Beraldo Leal , Michael Tokarev Subject: [PATCH v5 04/24] replay: allow runstate shutdown->running when replaying trace Date: Tue, 19 Mar 2024 01:46:01 +1000 Message-ID: <20240318154621.2361161-5-npiggin@gmail.com> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20240318154621.2361161-1-npiggin@gmail.com> References: <20240318154621.2361161-1-npiggin@gmail.com> MIME-Version: 1.0 Received-SPF: pass client-ip=2607:f8b0:4864:20::530; envelope-from=npiggin@gmail.com; helo=mail-pg1-x530.google.com 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, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org When replaying a trace, it is possible to go from shutdown to running with a reverse-debugging step. This can be useful if the problem being debugged triggers a reset or shutdown. This can be tested by making a recording of a machine that shuts down, then using -action shutdown=pause when replaying it. Continuing to the end of the trace then reverse-stepping in gdb crashes due to invalid runstate transition. Just permitting the transition seems to be all that's necessary for reverse-debugging to work well in such a state. Reviewed-by: Alex Bennée Reviewed-by: Pavel Dovgalyuk Signed-off-by: Nicholas Piggin --- include/sysemu/runstate.h | 1 + replay/replay.c | 2 ++ system/runstate.c | 31 ++++++++++++++++++++++++++++--- 3 files changed, 31 insertions(+), 3 deletions(-) diff --git a/include/sysemu/runstate.h b/include/sysemu/runstate.h index 0117d243c4..fe25eed3c0 100644 --- a/include/sysemu/runstate.h +++ b/include/sysemu/runstate.h @@ -9,6 +9,7 @@ void runstate_set(RunState new_state); RunState runstate_get(void); bool runstate_is_running(void); bool runstate_needs_reset(void); +void runstate_replay_enable(void); typedef void VMChangeStateHandler(void *opaque, bool running, RunState state); diff --git a/replay/replay.c b/replay/replay.c index a2c576c16e..b8564a4813 100644 --- a/replay/replay.c +++ b/replay/replay.c @@ -385,6 +385,8 @@ static void replay_enable(const char *fname, int mode) replay_fetch_data_kind(); } + runstate_replay_enable(); + replay_init_events(); } diff --git a/system/runstate.c b/system/runstate.c index d6ab860eca..8f9ee034de 100644 --- a/system/runstate.c +++ b/system/runstate.c @@ -182,6 +182,12 @@ static const RunStateTransition runstate_transitions_def[] = { { RUN_STATE__MAX, RUN_STATE__MAX }, }; +static const RunStateTransition replay_play_runstate_transitions_def[] = { + { RUN_STATE_SHUTDOWN, RUN_STATE_RUNNING}, + + { RUN_STATE__MAX, RUN_STATE__MAX }, +}; + static bool runstate_valid_transitions[RUN_STATE__MAX][RUN_STATE__MAX]; bool runstate_check(RunState state) @@ -189,14 +195,33 @@ bool runstate_check(RunState state) return current_run_state == state; } -static void runstate_init(void) +static void transitions_set_valid(const RunStateTransition *rst) { const RunStateTransition *p; - memset(&runstate_valid_transitions, 0, sizeof(runstate_valid_transitions)); - for (p = &runstate_transitions_def[0]; p->from != RUN_STATE__MAX; p++) { + for (p = rst; p->from != RUN_STATE__MAX; p++) { runstate_valid_transitions[p->from][p->to] = true; } +} + +void runstate_replay_enable(void) +{ + assert(replay_mode != REPLAY_MODE_NONE); + + if (replay_mode == REPLAY_MODE_PLAY) { + /* + * When reverse-debugging, it is possible to move state from + * shutdown to running. + */ + transitions_set_valid(&replay_play_runstate_transitions_def[0]); + } +} + +static void runstate_init(void) +{ + memset(&runstate_valid_transitions, 0, sizeof(runstate_valid_transitions)); + + transitions_set_valid(&runstate_transitions_def[0]); qemu_mutex_init(&vmstop_lock); } From patchwork Mon Mar 18 15:46:02 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Nicholas Piggin X-Patchwork-Id: 1913184 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20230601 header.b=cejnqJC2; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=patchwork.ozlabs.org) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4Tyzlx6yLSz23sG for ; Tue, 19 Mar 2024 02:48:29 +1100 (AEDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1rmFCh-0002mo-CZ; Mon, 18 Mar 2024 11:47:11 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1rmFCf-0002mR-Pn for qemu-devel@nongnu.org; Mon, 18 Mar 2024 11:47:09 -0400 Received: from mail-ot1-x32f.google.com ([2607:f8b0:4864:20::32f]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1rmFCa-0007rF-8B for qemu-devel@nongnu.org; Mon, 18 Mar 2024 11:47:09 -0400 Received: by mail-ot1-x32f.google.com with SMTP id 46e09a7af769-6e675db6fbaso2634665a34.1 for ; Mon, 18 Mar 2024 08:47:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1710776821; x=1711381621; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=eKpzpXj/rNwSAlMipdDJMEvIfQrihazLg7YHWN/oksU=; b=cejnqJC2fZhv8J58rFo4uI5m97t+7z3PUOidixe6tBiXd8PC8pxm8Wem+JRviOGBhN dKMn2GYnVy9ssr3CiZnBQAorVsi+HsDZksFpnOkpQUxPCk6fYNqUDXTI9sB1ng4+EvFf YNlxFgd87x45ddJcqXMCFx+vkb5E5RSVtiRkMiEL5u5Mx/iXuPojTXy/V7K2Np2mJ7+P ANCLbwnNX+4BphHZkY20XVGk1AuZqR+C2OAGAHbTujjCeetyVh2GAGccfBTyzo0NZmLl 6H8BWrCnwbzn4jvtVh2bNew8NGWnJ0TK18MzTOiyNBpM781HCVwfrIw0znvyj0uArb7G DRXA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1710776821; x=1711381621; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=eKpzpXj/rNwSAlMipdDJMEvIfQrihazLg7YHWN/oksU=; b=o5Z71DQYPOcX9zoV2Kfps0a1jogAU2do46WxKwCUy37TWAg9Wi04B6r/KHWzBgaWCy 4KazT8GQYAwRrmkrB+9TYYd/eB9z6N4ewd2kNU4q+LOVK54UZQpdhM3h3+PKly5I4MwR yiPCEHB+iS6irabbS/7UwRXWca+hYfFRaXbTi+11EiaLHUnWg7926/ZqhOyWmSVT24q3 0MRcNhTxvwiWl96miNaWLxmrAaT2EG2xbUv50Yi7UEl5FIOXz4UAv4yS8pLDSwAgT2KE V2PGwQQa7Fpv0OPRmIOR+BHid/fQ/nn13D0SHHNZ1bisr866f9NEQZqpO3A8kAS0Estv svaA== X-Gm-Message-State: AOJu0YwZ4ZHqT02/ZmmBFHXkH6oPl4NY4ySbYU0/Un59RJDR/uwcWXpm 8aXtvxGqKuzCe9BBs9QDKnesCfG5BJeW4LYftQ55rA6FKtZB7eLn9XehRr50nNg= X-Google-Smtp-Source: AGHT+IGkUFdHxsrsNruOAN0Rj049+O1vLPe/LU/3Vi7YHIKGXgOa9KqmeqwBpoJmTiLG/AdBaDHCNA== X-Received: by 2002:a05:6870:418d:b0:220:941d:18be with SMTP id y13-20020a056870418d00b00220941d18bemr13353120oac.25.1710776821348; Mon, 18 Mar 2024 08:47:01 -0700 (PDT) Received: from wheely.local0.net ([118.208.155.46]) by smtp.gmail.com with ESMTPSA id v22-20020a634816000000b005dc26144d96sm7332108pga.75.2024.03.18.08.46.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 18 Mar 2024 08:47:01 -0700 (PDT) From: Nicholas Piggin To: qemu-devel@nongnu.org Cc: Nicholas Piggin , Pavel Dovgalyuk , =?utf-8?q?Philippe_Mathieu-Dau?= =?utf-8?q?d=C3=A9?= , Richard Henderson , =?utf-8?q?Alex_Benn=C3=A9?= =?utf-8?q?e?= , Paolo Bonzini , John Snow , Cleber Rosa , Wainer dos Santos Moschetta , Beraldo Leal , Michael Tokarev Subject: [PATCH v5 05/24] Revert "replay: stop us hanging in rr_wait_io_event" Date: Tue, 19 Mar 2024 01:46:02 +1000 Message-ID: <20240318154621.2361161-6-npiggin@gmail.com> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20240318154621.2361161-1-npiggin@gmail.com> References: <20240318154621.2361161-1-npiggin@gmail.com> MIME-Version: 1.0 Received-SPF: pass client-ip=2607:f8b0:4864:20::32f; envelope-from=npiggin@gmail.com; helo=mail-ot1-x32f.google.com 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, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01, T_SPF_HELO_TEMPERROR=0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org This reverts commit 1f881ea4a444ef36a8b6907b0b82be4b3af253a2. That commit causes reverse_debugging.py test failures, and does not seem to solve the root cause of the problem x86-64 still hangs in record/replay tests. The problem with short-cutting the iowait that was taken during record phase is that related events will not get consumed at the same points (e.g., reading the clock). A hang with zero icount always seems to be a symptom of an earlier problem that has caused the recording to become out of synch with the execution and consumption of events by replay. Signed-off-by: Nicholas Piggin Acked-by: Alex Bennée --- include/sysemu/replay.h | 5 ----- accel/tcg/tcg-accel-ops-rr.c | 2 +- replay/replay.c | 21 --------------------- 3 files changed, 1 insertion(+), 27 deletions(-) diff --git a/include/sysemu/replay.h b/include/sysemu/replay.h index f229b2109c..8102fa54f0 100644 --- a/include/sysemu/replay.h +++ b/include/sysemu/replay.h @@ -73,11 +73,6 @@ int replay_get_instructions(void); /*! Updates instructions counter in replay mode. */ void replay_account_executed_instructions(void); -/** - * replay_can_wait: check if we should pause for wait-io - */ -bool replay_can_wait(void); - /* Processing clocks and other time sources */ /*! Save the specified clock */ diff --git a/accel/tcg/tcg-accel-ops-rr.c b/accel/tcg/tcg-accel-ops-rr.c index 894e73e52c..a942442a33 100644 --- a/accel/tcg/tcg-accel-ops-rr.c +++ b/accel/tcg/tcg-accel-ops-rr.c @@ -109,7 +109,7 @@ static void rr_wait_io_event(void) { CPUState *cpu; - while (all_cpu_threads_idle() && replay_can_wait()) { + while (all_cpu_threads_idle()) { rr_stop_kick_timer(); qemu_cond_wait_bql(first_cpu->halt_cond); } diff --git a/replay/replay.c b/replay/replay.c index b8564a4813..895fa6b67a 100644 --- a/replay/replay.c +++ b/replay/replay.c @@ -451,27 +451,6 @@ void replay_start(void) replay_enable_events(); } -/* - * For none/record the answer is yes. - */ -bool replay_can_wait(void) -{ - if (replay_mode == REPLAY_MODE_PLAY) { - /* - * For playback we shouldn't ever be at a point we wait. If - * the instruction count has reached zero and we have an - * unconsumed event we should go around again and consume it. - */ - if (replay_state.instruction_count == 0 && replay_state.has_unread_data) { - return false; - } else { - replay_sync_error("Playback shouldn't have to iowait"); - } - } - return true; -} - - void replay_finish(void) { if (replay_mode == REPLAY_MODE_NONE) { From patchwork Mon Mar 18 15:46:03 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Nicholas Piggin X-Patchwork-Id: 1913182 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20230601 header.b=eTXGfCST; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=patchwork.ozlabs.org) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4TyzlG5Jhrz23sK for ; Tue, 19 Mar 2024 02:47:54 +1100 (AEDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1rmFCs-00039p-W4; Mon, 18 Mar 2024 11:47:23 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1rmFCk-0002ol-Ey for qemu-devel@nongnu.org; Mon, 18 Mar 2024 11:47:21 -0400 Received: from mail-oa1-x2b.google.com ([2001:4860:4864:20::2b]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1rmFCg-0007rY-6E for qemu-devel@nongnu.org; Mon, 18 Mar 2024 11:47:14 -0400 Received: by mail-oa1-x2b.google.com with SMTP id 586e51a60fabf-221a9e5484aso3189679fac.0 for ; Mon, 18 Mar 2024 08:47:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1710776827; x=1711381627; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=sIxDj8qxQ1Vf3naQ804ZZJDX1uKqMaOn1Ozd3HpaNjM=; b=eTXGfCSTzffVTMtFeP+bhXY6otFj/3Q5gb3bbQq37a0N18Q1DQOYKg4iI0wQ410dIk VGTVWVbxxI5bwGI8d73xE7K/LC5fR5+MJ/pAncOirA1PEzx1pQHKTdK/ZMQBADuWnc4x qmA3qiiZ2AcsUybj0a5VXviM7Bvg/qRGzTkZltPQZ38KsGZQDGF1yPbUgZX5Jx0cWH/r 6rxCPh8MDwH5/ARNa8FIKFok+tvFMWycafKF0EtFZZDAXyMM0OKnXXanyESHxfg2Sc4I R2tIgbkotv+L+0+7bkJyzN3wtIBATKdPKHd0zva1yocrW/h4mxs8Z+4xJQzoN+nr0gp1 7izg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1710776827; x=1711381627; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=sIxDj8qxQ1Vf3naQ804ZZJDX1uKqMaOn1Ozd3HpaNjM=; b=OQEd2+GrZdPL6leuTaFR3j75FDWywiX8I/z9IYKtiHezVJhzKbNANCdarHxLITei9R Vngcof7MnT7vRW3Xe/jfY5euWv/uEqAJ8W5nnhVDBIhEMjAMT5FbKXt41fqA/664uInz pIAnQMtNchulOWrA7s+C9LhYgVwtJOfkWQzv5wZxYS0QOADiwJbHfMwbRmkbU9VOtF/J lUWlEj017XDyE4gYeZQrGJHZ1kpl25ommTBb+fO82Q5RP5KLYcdFDmLLjaYa2iPcmxS8 vVm42XSnX9n96IGSJ4B6r/4S9HhttYo3K8Z/IxDlToyHrTu/IhiwV6MQsP1EyfCVn1tm IkvQ== X-Gm-Message-State: AOJu0Yyd0X0DP2ESNfoLHjT/H61ukqQ+nxQVBrY5hfoxmFNFh/LoegUU nelSbtDNWTGWaE/TXit3x/FyEo8H1ZXkbEy0uk6yqlhZh+6ZYLuyzbK1FB8SbXk= X-Google-Smtp-Source: AGHT+IE1YrZDHhWLsIo/w2Pw8OQ6KQwBeLSkS/4KqGCJGMwVnFnjpU7j7gL3TgTVay8mkPHevo9/eA== X-Received: by 2002:a05:6871:146:b0:221:9635:da6d with SMTP id z6-20020a056871014600b002219635da6dmr13884243oab.47.1710776827079; Mon, 18 Mar 2024 08:47:07 -0700 (PDT) Received: from wheely.local0.net ([118.208.155.46]) by smtp.gmail.com with ESMTPSA id v22-20020a634816000000b005dc26144d96sm7332108pga.75.2024.03.18.08.47.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 18 Mar 2024 08:47:06 -0700 (PDT) From: Nicholas Piggin To: qemu-devel@nongnu.org Cc: Nicholas Piggin , Pavel Dovgalyuk , =?utf-8?q?Philippe_Mathieu-Dau?= =?utf-8?q?d=C3=A9?= , Richard Henderson , =?utf-8?q?Alex_Benn=C3=A9?= =?utf-8?q?e?= , Paolo Bonzini , John Snow , Cleber Rosa , Wainer dos Santos Moschetta , Beraldo Leal , Michael Tokarev Subject: [PATCH v5 06/24] tests/avocado: replay_kernel.py add x86-64 q35 machine test Date: Tue, 19 Mar 2024 01:46:03 +1000 Message-ID: <20240318154621.2361161-7-npiggin@gmail.com> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20240318154621.2361161-1-npiggin@gmail.com> References: <20240318154621.2361161-1-npiggin@gmail.com> MIME-Version: 1.0 Received-SPF: pass client-ip=2001:4860:4864:20::2b; envelope-from=npiggin@gmail.com; helo=mail-oa1-x2b.google.com 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, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org The x86-64 pc machine is flaky with record/replay, but q35 is more stable. Add a q35 test to replay_kernel.py. Signed-off-by: Nicholas Piggin Reviewed-by: Alex Bennée Tested-by: Alex Bennée --- tests/avocado/replay_kernel.py | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/tests/avocado/replay_kernel.py b/tests/avocado/replay_kernel.py index 22032f3230..df0ea0678f 100644 --- a/tests/avocado/replay_kernel.py +++ b/tests/avocado/replay_kernel.py @@ -110,7 +110,7 @@ def test_i386_pc(self): self.run_rr(kernel_path, kernel_command_line, console_pattern, shift=5) # See https://gitlab.com/qemu-project/qemu/-/issues/2094 - @skipUnless(os.getenv('QEMU_TEST_FLAKY_TESTS'), 'Test sometimes gets stuck') + @skipUnless(os.getenv('QEMU_TEST_FLAKY_TESTS'), 'pc machine is unstable with replay') def test_x86_64_pc(self): """ :avocado: tags=arch:x86_64 @@ -128,6 +128,22 @@ def test_x86_64_pc(self): self.run_rr(kernel_path, kernel_command_line, console_pattern, shift=5) + def test_x86_64_q35(self): + """ + :avocado: tags=arch:x86_64 + :avocado: tags=machine:q35 + """ + kernel_url = ('https://archives.fedoraproject.org/pub/archive/fedora' + '/linux/releases/29/Everything/x86_64/os/images/pxeboot' + '/vmlinuz') + kernel_hash = '23bebd2680757891cf7adedb033532163a792495' + kernel_path = self.fetch_asset(kernel_url, asset_hash=kernel_hash) + + kernel_command_line = self.KERNEL_COMMON_COMMAND_LINE + 'console=ttyS0' + console_pattern = 'VFS: Cannot open root device' + + self.run_rr(kernel_path, kernel_command_line, console_pattern, shift=5) + def test_mips_malta(self): """ :avocado: tags=arch:mips From patchwork Mon Mar 18 15:46:04 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Nicholas Piggin X-Patchwork-Id: 1913180 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20230601 header.b=A3hpw+62; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=patchwork.ozlabs.org) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4TyzlG0cWnz23sH for ; Tue, 19 Mar 2024 02:47:54 +1100 (AEDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1rmFCw-0003F5-Qo; Mon, 18 Mar 2024 11:47:26 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1rmFCt-0003CC-Dj for qemu-devel@nongnu.org; Mon, 18 Mar 2024 11:47:23 -0400 Received: from mail-pf1-x429.google.com ([2607:f8b0:4864:20::429]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1rmFCm-0007tR-K8 for qemu-devel@nongnu.org; Mon, 18 Mar 2024 11:47:23 -0400 Received: by mail-pf1-x429.google.com with SMTP id d2e1a72fcca58-6e704078860so1812006b3a.0 for ; Mon, 18 Mar 2024 08:47:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1710776833; x=1711381633; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=zYd02SLfgP/LCWG+Mrru0HvWw0TZYZU2hsjtTtlA/n0=; b=A3hpw+62g8JTeGjhd2syXQTIG5zkJqqHAhwQsrO27rM7WtFm51xZRQ1eHtFpwgVXpb ywwL3RMAfIz1WFhOFg5AlN4DGYjUEf5UkxhJoqfxAgTXQvH6+Qlw5HFuOCywoSJsXrUE 8lg9YEAb4yINbvRbj4tTEgbKSGWG2qZ1ahPdI1VRu729Fs2BD3NtnK3KOkEe+r40sBdW UcIlSi5Sph/Y6165aN+8/0f+0AFnrpNPZM+wfyiYqtXIj/3AK6WjQbmuGWYMpKzlxNLJ obrZP99pOFhD0/HGKpIYm/v1BxJBsJiS+/DmBXHgoyx4F3ayj70LDwDRKaIRKFcCn/0g PaJw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1710776833; x=1711381633; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=zYd02SLfgP/LCWG+Mrru0HvWw0TZYZU2hsjtTtlA/n0=; b=DxRjXjOnaBt+3l9tcuxx3uuUin3pdu8UjsZd9BbBYaGSJXDW+rYTzw92q+UTdLEhgW Caxi4Tlnv/wRLnzjGBAfjIU4qZXeThLdEe+fa+edcW28O1PSfDt3Lcyb4AUW7gsWPE4w NPezLojQMf6vg0VDJunE8r5oV217sQgg5V5f7DdCg7dkpKH4ay+9QSI5gDUrh9as+sT+ hBBPalZe1DaYIP1C5LghJ9WwD4P748+tWLMnLvFS1WSMHEcd37U2z3rk9YRGP/Hoc4nq uCxAO2RJcioQqXK5n54//Kri27F6Bfjpgyz/LHt2adukt9IqJtDgV3CQnJTBW3NxaRcS tSWw== X-Gm-Message-State: AOJu0YyzTlL2+OYjFABjX3aE1Ws5EStN1bUinbCtcS1BlV9L0Q8i10Hk JEom3qb5xvQ+6GLp8/jvCBOU8TmxQXlOA5qq/KfQM2RVthsunRTif+rAp/AoWZs= X-Google-Smtp-Source: AGHT+IEKuRcuYR7c6NU7hrI0O/CSDi2bOSbcQ4DZEZW6z9T0qG3B+8JsuJliYd635ZlBOEVTEzvo7g== X-Received: by 2002:a05:6a20:3d12:b0:1a3:63f4:104a with SMTP id y18-20020a056a203d1200b001a363f4104amr3484137pzi.13.1710776832897; Mon, 18 Mar 2024 08:47:12 -0700 (PDT) Received: from wheely.local0.net ([118.208.155.46]) by smtp.gmail.com with ESMTPSA id v22-20020a634816000000b005dc26144d96sm7332108pga.75.2024.03.18.08.47.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 18 Mar 2024 08:47:12 -0700 (PDT) From: Nicholas Piggin To: qemu-devel@nongnu.org Cc: Nicholas Piggin , Pavel Dovgalyuk , =?utf-8?q?Philippe_Mathieu-Dau?= =?utf-8?q?d=C3=A9?= , Richard Henderson , =?utf-8?q?Alex_Benn=C3=A9?= =?utf-8?q?e?= , Paolo Bonzini , John Snow , Cleber Rosa , Wainer dos Santos Moschetta , Beraldo Leal , Michael Tokarev Subject: [PATCH v5 07/24] chardev: set record/replay on the base device of a muxed device Date: Tue, 19 Mar 2024 01:46:04 +1000 Message-ID: <20240318154621.2361161-8-npiggin@gmail.com> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20240318154621.2361161-1-npiggin@gmail.com> References: <20240318154621.2361161-1-npiggin@gmail.com> MIME-Version: 1.0 Received-SPF: pass client-ip=2607:f8b0:4864:20::429; envelope-from=npiggin@gmail.com; helo=mail-pf1-x429.google.com 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, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, T_SCC_BODY_TEXT_LINE=-0.01, T_SPF_TEMPERROR=0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org chardev events to a muxed device don't get recorded because e.g., qemu_chr_be_write() checks whether the base device has the record flag set. This can be seen when replaying a trace that has characters typed into the console, an examination of the log shows they are not recorded. Setting QEMU_CHAR_FEATURE_REPLAY on the base chardev fixes the problem. Signed-off-by: Nicholas Piggin Reviewed-by: Alex Bennée --- chardev/char.c | 71 +++++++++++++++++++++++++++++++++++--------------- 1 file changed, 50 insertions(+), 21 deletions(-) diff --git a/chardev/char.c b/chardev/char.c index 3c43fb1278..ba847b6e9e 100644 --- a/chardev/char.c +++ b/chardev/char.c @@ -615,11 +615,24 @@ ChardevBackend *qemu_chr_parse_opts(QemuOpts *opts, Error **errp) return backend; } -Chardev *qemu_chr_new_from_opts(QemuOpts *opts, GMainContext *context, - Error **errp) +static void qemu_chardev_set_replay(Chardev *chr, Error **errp) +{ + if (replay_mode != REPLAY_MODE_NONE) { + if (CHARDEV_GET_CLASS(chr)->chr_ioctl) { + error_setg(errp, "Replay: ioctl is not supported " + "for serial devices yet"); + return; + } + qemu_chr_set_feature(chr, QEMU_CHAR_FEATURE_REPLAY); + replay_register_char_driver(chr); + } +} + +static Chardev *__qemu_chr_new_from_opts(QemuOpts *opts, GMainContext *context, + bool replay, Error **errp) { const ChardevClass *cc; - Chardev *chr = NULL; + Chardev *base = NULL, *chr = NULL; ChardevBackend *backend = NULL; const char *name = qemu_opt_get(opts, "backend"); const char *id = qemu_opts_id(opts); @@ -657,11 +670,11 @@ Chardev *qemu_chr_new_from_opts(QemuOpts *opts, GMainContext *context, chr = qemu_chardev_new(bid ? bid : id, object_class_get_name(OBJECT_CLASS(cc)), backend, context, errp); - if (chr == NULL) { goto out; } + base = chr; if (bid) { Chardev *mux; qapi_free_ChardevBackend(backend); @@ -681,11 +694,25 @@ Chardev *qemu_chr_new_from_opts(QemuOpts *opts, GMainContext *context, out: qapi_free_ChardevBackend(backend); g_free(bid); + + if (replay && base) { + /* RR should be set on the base device, not the mux */ + qemu_chardev_set_replay(base, errp); + } + return chr; } -Chardev *qemu_chr_new_noreplay(const char *label, const char *filename, - bool permit_mux_mon, GMainContext *context) +Chardev *qemu_chr_new_from_opts(QemuOpts *opts, GMainContext *context, + Error **errp) +{ + /* XXX: should this really not record/replay? */ + return __qemu_chr_new_from_opts(opts, context, false, errp); +} + +static Chardev *__qemu_chr_new(const char *label, const char *filename, + bool permit_mux_mon, GMainContext *context, + bool replay) { const char *p; Chardev *chr; @@ -693,14 +720,22 @@ Chardev *qemu_chr_new_noreplay(const char *label, const char *filename, Error *err = NULL; if (strstart(filename, "chardev:", &p)) { - return qemu_chr_find(p); + chr = qemu_chr_find(p); + if (replay) { + qemu_chardev_set_replay(chr, &err); + if (err) { + error_report_err(err); + return NULL; + } + } + return chr; } opts = qemu_chr_parse_compat(label, filename, permit_mux_mon); if (!opts) return NULL; - chr = qemu_chr_new_from_opts(opts, context, &err); + chr = __qemu_chr_new_from_opts(opts, context, replay, &err); if (!chr) { error_report_err(err); goto out; @@ -722,24 +757,18 @@ out: return chr; } +Chardev *qemu_chr_new_noreplay(const char *label, const char *filename, + bool permit_mux_mon, GMainContext *context) +{ + return __qemu_chr_new(label, filename, permit_mux_mon, context, false); +} + static Chardev *qemu_chr_new_permit_mux_mon(const char *label, const char *filename, bool permit_mux_mon, GMainContext *context) { - Chardev *chr; - chr = qemu_chr_new_noreplay(label, filename, permit_mux_mon, context); - if (chr) { - if (replay_mode != REPLAY_MODE_NONE) { - qemu_chr_set_feature(chr, QEMU_CHAR_FEATURE_REPLAY); - } - if (qemu_chr_replay(chr) && CHARDEV_GET_CLASS(chr)->chr_ioctl) { - error_report("Replay: ioctl is not supported " - "for serial devices yet"); - } - replay_register_char_driver(chr); - } - return chr; + return __qemu_chr_new(label, filename, permit_mux_mon, context, true); } Chardev *qemu_chr_new(const char *label, const char *filename, From patchwork Mon Mar 18 15:46:05 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nicholas Piggin X-Patchwork-Id: 1913185 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20230601 header.b=brlvid48; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=patchwork.ozlabs.org) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4Tyzlx70BSz23sH for ; Tue, 19 Mar 2024 02:48:29 +1100 (AEDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1rmFDA-0003VV-SK; Mon, 18 Mar 2024 11:47:40 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1rmFCx-0003KR-IW for qemu-devel@nongnu.org; Mon, 18 Mar 2024 11:47:28 -0400 Received: from mail-ot1-x333.google.com ([2607:f8b0:4864:20::333]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1rmFCq-0007tp-3s for qemu-devel@nongnu.org; Mon, 18 Mar 2024 11:47:27 -0400 Received: by mail-ot1-x333.google.com with SMTP id 46e09a7af769-6e68c1574e3so733781a34.0 for ; Mon, 18 Mar 2024 08:47:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1710776838; x=1711381638; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=cpDZh15JK6klT5wZKrbBKlp9qR3QFwaO657r9oH5kc8=; b=brlvid480Cbx4QALjWFb7QI/IlxGKaE0O0xBBiD58NjxLQKXsoZcwrVUAJIjcnDWQ1 0isJDtEiLIsPvCXEWiAVY0hKfO1RsOeRiRG+w8uNYcUaogvhGFHC2T+YpTyNzQy3s86s 0wmiM/Y+FaJG6OSRJAB07jHFvch49vLJG7Lcsaql5fb93eCX4yFIEH+YtFw87hu75Yhh tFKOx0v9/NqMVK1aV2Ge7dTqYSRoUEVozxbNclVNAO72ynwRArNq8mv5vIfuJXLriIL4 VoBWa+iM7pxsIwCHAnyLirDTsT41pDhnDsXfJ1trZ26DYbiPPfa/wzZlWYKzHRLkLPPb X6Mw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1710776838; x=1711381638; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=cpDZh15JK6klT5wZKrbBKlp9qR3QFwaO657r9oH5kc8=; b=j99QgR+mJ0uxYa5Kq5UuDjUPFB1iGQE8osNhUxTcP3qqJDbilZXGY+K2VeGY9yHt+m OcXZxZnGzQRDA22rVw6zeMBwonNxb/S5t84pAf7Bw1H6bIM5Csrg20sybj+8x+uqUFpa jzI1zquo1dhEX09mFFU6n++wB/LQpFahdgdFEZlFMTrHph0K+Tsp7DwCoiGbByB0i+Yy vrqYijxIr1YDPjn67WAw1YXUoxNVo5AZ0yROBymrHcyAFb0K4yW9gDXVxHMvEJ1LR/Xe Vb7U4RWNTuXOODkvbxMOgnand49oyQ4v+wrfmDDI6Hnnl69AIeiZsFV5QdKaDjahtcMo SDrA== X-Gm-Message-State: AOJu0Yx4aS5Ds1q7KzlMC3ybPwiGkpd6mYkXaq9C59OfHWMmtNAMwSGm XJHBTGyBaNb6EkDjiW5ni314ZeMLPUR7fLi7b0p1OkErrQxNL3jRsepzeF2Iguo= X-Google-Smtp-Source: AGHT+IH1A/xxW46MQmQwbwjWOk3clylkGJpJnpvswp6ujXv431Z057qUO6Jc352IfolwYi3qOZsb5A== X-Received: by 2002:a05:6871:b14:b0:221:cb1b:c572 with SMTP id fq20-20020a0568710b1400b00221cb1bc572mr13897924oab.25.1710776838517; Mon, 18 Mar 2024 08:47:18 -0700 (PDT) Received: from wheely.local0.net ([118.208.155.46]) by smtp.gmail.com with ESMTPSA id v22-20020a634816000000b005dc26144d96sm7332108pga.75.2024.03.18.08.47.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 18 Mar 2024 08:47:18 -0700 (PDT) From: Nicholas Piggin To: qemu-devel@nongnu.org Cc: Nicholas Piggin , Pavel Dovgalyuk , =?utf-8?q?Philippe_Mathieu-Dau?= =?utf-8?q?d=C3=A9?= , Richard Henderson , =?utf-8?q?Alex_Benn=C3=A9?= =?utf-8?q?e?= , Paolo Bonzini , John Snow , Cleber Rosa , Wainer dos Santos Moschetta , Beraldo Leal , Michael Tokarev Subject: [PATCH v5 08/24] replay: Fix migration use of clock Date: Tue, 19 Mar 2024 01:46:05 +1000 Message-ID: <20240318154621.2361161-9-npiggin@gmail.com> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20240318154621.2361161-1-npiggin@gmail.com> References: <20240318154621.2361161-1-npiggin@gmail.com> MIME-Version: 1.0 Received-SPF: pass client-ip=2607:f8b0:4864:20::333; envelope-from=npiggin@gmail.com; helo=mail-ot1-x333.google.com 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, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Migration reads host clocks when not holding the replay_mutex, which asserts when recording a trace. It seems that these migration times should be host times like other statistics in MigrationState. These do not require the replay_mutex. Signed-off-by: Nicholas Piggin --- migration/migration.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/migration/migration.c b/migration/migration.c index 644e073b7d..2c286ccf63 100644 --- a/migration/migration.c +++ b/migration/migration.c @@ -3424,7 +3424,7 @@ static void *migration_thread(void *opaque) { MigrationState *s = opaque; MigrationThread *thread = NULL; - int64_t setup_start = qemu_clock_get_ms(QEMU_CLOCK_HOST); + int64_t setup_start = qemu_clock_get_ms(QEMU_CLOCK_REALTIME); MigThrError thr_error; bool urgent = false; @@ -3476,7 +3476,7 @@ static void *migration_thread(void *opaque) qemu_savevm_wait_unplug(s, MIGRATION_STATUS_SETUP, MIGRATION_STATUS_ACTIVE); - s->setup_time = qemu_clock_get_ms(QEMU_CLOCK_HOST) - setup_start; + s->setup_time = qemu_clock_get_ms(QEMU_CLOCK_REALTIME) - setup_start; trace_migration_thread_setup_complete(); @@ -3555,7 +3555,7 @@ static void *bg_migration_thread(void *opaque) migration_rate_set(RATE_LIMIT_DISABLED); - setup_start = qemu_clock_get_ms(QEMU_CLOCK_HOST); + setup_start = qemu_clock_get_ms(QEMU_CLOCK_REALTIME); /* * We want to save vmstate for the moment when migration has been * initiated but also we want to save RAM content while VM is running. @@ -3588,7 +3588,7 @@ static void *bg_migration_thread(void *opaque) qemu_savevm_wait_unplug(s, MIGRATION_STATUS_SETUP, MIGRATION_STATUS_ACTIVE); - s->setup_time = qemu_clock_get_ms(QEMU_CLOCK_HOST) - setup_start; + s->setup_time = qemu_clock_get_ms(QEMU_CLOCK_REALTIME) - setup_start; trace_migration_thread_setup_complete(); From patchwork Mon Mar 18 15:46:06 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nicholas Piggin X-Patchwork-Id: 1913186 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20230601 header.b=cayVnvlV; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=patchwork.ozlabs.org) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4Tyzm01BClz23sG for ; Tue, 19 Mar 2024 02:48:32 +1100 (AEDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1rmFDF-0003we-Dj; Mon, 18 Mar 2024 11:47:45 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1rmFD7-0003ZH-Fo for qemu-devel@nongnu.org; Mon, 18 Mar 2024 11:47:40 -0400 Received: from mail-pf1-x432.google.com ([2607:f8b0:4864:20::432]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1rmFCv-0007uM-Jz for qemu-devel@nongnu.org; Mon, 18 Mar 2024 11:47:37 -0400 Received: by mail-pf1-x432.google.com with SMTP id d2e1a72fcca58-6e6cadfffdbso4041896b3a.3 for ; Mon, 18 Mar 2024 08:47:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1710776844; x=1711381644; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=578ntQv2qmhtgvuXKuqTSL+k7p3UtnyDqAqXSEUYZKM=; b=cayVnvlVbFAQMAOoQVk0InKQgRMaM4qcXiTvXBWXYAHJcn11Wd7RXngYYAu2S5UyKw e+dy2T2f8IULdYJ/bh1BhJ5bmekqfCTX32VljrvD8Pd3yWG9spn/NHztGiKbdNod3jo4 uMIaknkoOpQUBLo6GJmoz86Reun3sTSgFGqJzK/Pv2EgWPSglAtXFU2Q9VxH7CxIPzBC SOeb175JDPUfctGjklOX9lF9GyrEn+DsbU5kNAxjwpu2ZnqmM4TxTCZ+KcyKH5fDi6hl wfFM10cwuIkTiXJBqR9w3wrYByrjRMI8tgRN37qHdcHXKrNUOQQSTGX8wMir3v+zTgtt BB0g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1710776844; x=1711381644; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=578ntQv2qmhtgvuXKuqTSL+k7p3UtnyDqAqXSEUYZKM=; b=NQjgentf22rLfeeuR/o1xwenHgpexy/F+S631PhoRvLX0yAYLTJnPeY6pNrw8hoMgu /jC0Jx/yzNJXy+FsAc9G5UazzmgiaQH204TaLPiHS9qqbzKEKK4J3iHu76gpVurp09kY m+rTxEP6AbGvCiMoLVIf3/rR9AM+ZyRVBXkwsfj5ehElPWmPQ5DBnqSaQ4OuYFqVUPEM QSNsqJnPU/weiLtgc0VCIYkpmloPBkyGlzRZOnc2g+/Sq657XPT1l5dtctzLILnohUo/ e49SKHyO9BgM6OIyOVjkiVTn+bqjtowNbbrT8V89jKy+soHVxoEmMx5gFxR60duSnld9 EK+g== X-Gm-Message-State: AOJu0YxjZbLT5K5IKr5OnqnGRAWHrB4A2b63x3YVwythrubOdE9RMVJm eMQW8MTAUC8d+DTawKDJ1zijEaaOmOI0g4imS2C7oPHJ7Ho5XzCM+ElOYPJL0FQ= X-Google-Smtp-Source: AGHT+IEIayBF74eVN5Y3h/ZpXSkUNp1ZHlDFti99gVMmUCqc0UIXHAYGOaTvjzrjKODF8hjYcTIAIw== X-Received: by 2002:a05:6a20:3942:b0:1a3:463e:af40 with SMTP id r2-20020a056a20394200b001a3463eaf40mr11404335pzg.24.1710776844020; Mon, 18 Mar 2024 08:47:24 -0700 (PDT) Received: from wheely.local0.net ([118.208.155.46]) by smtp.gmail.com with ESMTPSA id v22-20020a634816000000b005dc26144d96sm7332108pga.75.2024.03.18.08.47.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 18 Mar 2024 08:47:23 -0700 (PDT) From: Nicholas Piggin To: qemu-devel@nongnu.org Cc: Nicholas Piggin , Pavel Dovgalyuk , =?utf-8?q?Philippe_Mathieu-Dau?= =?utf-8?q?d=C3=A9?= , Richard Henderson , =?utf-8?q?Alex_Benn=C3=A9?= =?utf-8?q?e?= , Paolo Bonzini , John Snow , Cleber Rosa , Wainer dos Santos Moschetta , Beraldo Leal , Michael Tokarev Subject: [PATCH v5 09/24] replay: Fix migration replay_mutex locking Date: Tue, 19 Mar 2024 01:46:06 +1000 Message-ID: <20240318154621.2361161-10-npiggin@gmail.com> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20240318154621.2361161-1-npiggin@gmail.com> References: <20240318154621.2361161-1-npiggin@gmail.com> MIME-Version: 1.0 Received-SPF: pass client-ip=2607:f8b0:4864:20::432; envelope-from=npiggin@gmail.com; helo=mail-pf1-x432.google.com 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, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Migration causes a number of events that need to go in the replay trace, such as vm state transitions. The replay_mutex lock needs to be held for these. The simplest approach seems to be just take it up-front when taking the bql. Signed-off-by: Nicholas Piggin --- migration/migration.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/migration/migration.c b/migration/migration.c index 2c286ccf63..c7f376ae34 100644 --- a/migration/migration.c +++ b/migration/migration.c @@ -24,6 +24,7 @@ #include "socket.h" #include "sysemu/runstate.h" #include "sysemu/sysemu.h" +#include "sysemu/replay.h" #include "sysemu/cpu-throttle.h" #include "rdma.h" #include "ram.h" @@ -2533,6 +2534,7 @@ static int postcopy_start(MigrationState *ms, Error **errp) } trace_postcopy_start(); + replay_mutex_lock(); bql_lock(); trace_postcopy_start_set_run(); @@ -2638,6 +2640,7 @@ static int postcopy_start(MigrationState *ms, Error **errp) migration_downtime_end(ms); bql_unlock(); + replay_mutex_unlock(); if (migrate_postcopy_ram()) { /* @@ -2679,6 +2682,7 @@ fail: } migration_call_notifiers(ms, MIG_EVENT_PRECOPY_FAILED, NULL); bql_unlock(); + replay_mutex_unlock(); return -1; } @@ -2730,6 +2734,7 @@ static int migration_completion_precopy(MigrationState *s, { int ret; + replay_mutex_lock(); bql_lock(); if (!migrate_mode_is_cpr(s)) { @@ -2755,6 +2760,7 @@ static int migration_completion_precopy(MigrationState *s, s->block_inactive); out_unlock: bql_unlock(); + replay_mutex_unlock(); return ret; } @@ -3592,6 +3598,7 @@ static void *bg_migration_thread(void *opaque) trace_migration_thread_setup_complete(); + replay_mutex_lock(); bql_lock(); if (migration_stop_vm(s, RUN_STATE_PAUSED)) { @@ -3625,6 +3632,7 @@ static void *bg_migration_thread(void *opaque) */ migration_bh_schedule(bg_migration_vm_start_bh, s); bql_unlock(); + replay_mutex_unlock(); while (migration_is_active()) { MigIterateState iter_state = bg_migration_iteration_run(s); @@ -3654,6 +3662,7 @@ fail: migrate_set_state(&s->state, MIGRATION_STATUS_ACTIVE, MIGRATION_STATUS_FAILED); bql_unlock(); + replay_mutex_unlock(); } bg_migration_iteration_finish(s); From patchwork Mon Mar 18 15:46:07 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Nicholas Piggin X-Patchwork-Id: 1913183 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20230601 header.b=ad2rU37u; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=patchwork.ozlabs.org) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4TyzlV6M8Tz23sG for ; Tue, 19 Mar 2024 02:48:06 +1100 (AEDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1rmFDF-00042n-F2; Mon, 18 Mar 2024 11:47:45 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1rmFDA-0003fl-UO for qemu-devel@nongnu.org; Mon, 18 Mar 2024 11:47:40 -0400 Received: from mail-pf1-x42a.google.com ([2607:f8b0:4864:20::42a]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1rmFD3-0007un-RR for qemu-devel@nongnu.org; Mon, 18 Mar 2024 11:47:39 -0400 Received: by mail-pf1-x42a.google.com with SMTP id d2e1a72fcca58-6e6ce174d45so3553898b3a.3 for ; Mon, 18 Mar 2024 08:47:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1710776850; x=1711381650; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=GoDLXObhG4ujv0wbwxxQpClK8TDNZa/JMTih0Qwb1tc=; b=ad2rU37ui/oO9hSX3qwv/duKbLJ9NpAMttwkXKRi9uxn0opTTPsfxpL2x3i109Bt2w czu73QVgWalufSrKhY5styYlWghQ4ndjm5wdNIY6s0LSyLEHn8phPZ3GFOS2cEeKusoy MmcyAU/PjhXLLGwl9tSuK5+1kojvqwGMa7hgJyJCeBezP9rf5+mJIOCjOwX0ZIy24BQ2 emcKkvaeqjMaJlfbZYKOgC3bxY/NpjAaY5zpFSK7Uaam6u/8A44Afi2FKQyT8BF/f5Lz md51JTEyhQSLKtKC47V0iidswpac0y/rY+hPPnf6SLD1XX3M3oFg7h7+tSI4S2dGi4Su vzZQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1710776850; x=1711381650; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=GoDLXObhG4ujv0wbwxxQpClK8TDNZa/JMTih0Qwb1tc=; b=RzQw9U+SHOXwnYkn8qyluD/kUC1fL+i4fSk8ymqruWEHQouyP3NhZaA8nzyYYY5G8D L/A5tAT0JKLbFshrteNVXYRojla3aNYwSZ9Q3aUnoZikczNldYob+tE83z3G0VNk3rm9 WcaSgHfRn19IQWyOM5uhLHqV4lm3MaK61XL+sdDkBfGpsb4utiXcnxmHPdfvwtBMRYhK 5wGyFmZOQQQY4XACMtLfmMvSUA4QQ53EDWlTz5/ZJpKBkl4Vd2P3bO5rliFqQ+VhSOCH 7KKUUHkMFCRHfzmExhhdjMdMZOKzUh9scrLO7JegtUkDKy0Fy4Kboyy0aU1QwVwRWCoh tNUQ== X-Gm-Message-State: AOJu0Yz+EIUb8PLalRY3g8XcUfbUXhGuW+z+be0TA8cqqalUnTU3IHw5 4BTEe3Itw61yg5UKnDoqZbxo8zqACQwWk9c+3QFT+TXpsO4egSIsGUtSzIhxI7M= X-Google-Smtp-Source: AGHT+IGWfK+rmzWf5q5aR4t1hEjCHNOz0uM+W+FYn09GuRDdUGyHPGO3v61FT+umbmMHl/5hCANgNg== X-Received: by 2002:a05:6a20:d81b:b0:1a3:5235:8e04 with SMTP id iv27-20020a056a20d81b00b001a352358e04mr9006341pzb.36.1710776850309; Mon, 18 Mar 2024 08:47:30 -0700 (PDT) Received: from wheely.local0.net ([118.208.155.46]) by smtp.gmail.com with ESMTPSA id v22-20020a634816000000b005dc26144d96sm7332108pga.75.2024.03.18.08.47.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 18 Mar 2024 08:47:30 -0700 (PDT) From: Nicholas Piggin To: qemu-devel@nongnu.org Cc: Nicholas Piggin , Pavel Dovgalyuk , =?utf-8?q?Philippe_Mathieu-Dau?= =?utf-8?q?d=C3=A9?= , Richard Henderson , =?utf-8?q?Alex_Benn=C3=A9?= =?utf-8?q?e?= , Paolo Bonzini , John Snow , Cleber Rosa , Wainer dos Santos Moschetta , Beraldo Leal , Michael Tokarev Subject: [PATCH v5 10/24] virtio-net: Use replay_schedule_bh_event for bhs that affect machine state Date: Tue, 19 Mar 2024 01:46:07 +1000 Message-ID: <20240318154621.2361161-11-npiggin@gmail.com> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20240318154621.2361161-1-npiggin@gmail.com> References: <20240318154621.2361161-1-npiggin@gmail.com> MIME-Version: 1.0 Received-SPF: pass client-ip=2607:f8b0:4864:20::42a; envelope-from=npiggin@gmail.com; helo=mail-pf1-x42a.google.com 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, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org The regular qemu_bh_schedule() calls result in non-deterministic execution of the bh in record-replay mode, which causes replay failure. Signed-off-by: Nicholas Piggin Reviewed-by: Alex Bennée Reviewed-by: Pavel Dovgalyuk --- hw/net/virtio-net.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/hw/net/virtio-net.c b/hw/net/virtio-net.c index 9959f1932b..6ac737f2cf 100644 --- a/hw/net/virtio-net.c +++ b/hw/net/virtio-net.c @@ -40,6 +40,7 @@ #include "migration/misc.h" #include "standard-headers/linux/ethtool.h" #include "sysemu/sysemu.h" +#include "sysemu/replay.h" #include "trace.h" #include "monitor/qdev.h" #include "monitor/monitor.h" @@ -416,7 +417,7 @@ static void virtio_net_set_status(struct VirtIODevice *vdev, uint8_t status) timer_mod(q->tx_timer, qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL) + n->tx_timeout); } else { - qemu_bh_schedule(q->tx_bh); + replay_bh_schedule_event(q->tx_bh); } } else { if (q->tx_timer) { @@ -2724,7 +2725,7 @@ static void virtio_net_tx_complete(NetClientState *nc, ssize_t len) */ virtio_queue_set_notification(q->tx_vq, 0); if (q->tx_bh) { - qemu_bh_schedule(q->tx_bh); + replay_bh_schedule_event(q->tx_bh); } else { timer_mod(q->tx_timer, qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL) + n->tx_timeout); @@ -2879,7 +2880,7 @@ static void virtio_net_handle_tx_bh(VirtIODevice *vdev, VirtQueue *vq) return; } virtio_queue_set_notification(vq, 0); - qemu_bh_schedule(q->tx_bh); + replay_bh_schedule_event(q->tx_bh); } static void virtio_net_tx_timer(void *opaque) @@ -2962,7 +2963,7 @@ static void virtio_net_tx_bh(void *opaque) /* If we flush a full burst of packets, assume there are * more coming and immediately reschedule */ if (ret >= n->tx_burst) { - qemu_bh_schedule(q->tx_bh); + replay_bh_schedule_event(q->tx_bh); q->tx_waiting = 1; return; } @@ -2976,7 +2977,7 @@ static void virtio_net_tx_bh(void *opaque) return; } else if (ret > 0) { virtio_queue_set_notification(q->tx_vq, 0); - qemu_bh_schedule(q->tx_bh); + replay_bh_schedule_event(q->tx_bh); q->tx_waiting = 1; } } From patchwork Mon Mar 18 15:46:08 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nicholas Piggin X-Patchwork-Id: 1913188 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20230601 header.b=U5jzI1Ox; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=patchwork.ozlabs.org) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4TyzmC0y1sz23sG for ; Tue, 19 Mar 2024 02:48:43 +1100 (AEDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1rmFDG-0004Dk-Dx; Mon, 18 Mar 2024 11:47:46 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1rmFDD-0003uy-A1 for qemu-devel@nongnu.org; Mon, 18 Mar 2024 11:47:43 -0400 Received: from mail-pf1-x42f.google.com ([2607:f8b0:4864:20::42f]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1rmFD8-0007v5-1G for qemu-devel@nongnu.org; Mon, 18 Mar 2024 11:47:43 -0400 Received: by mail-pf1-x42f.google.com with SMTP id d2e1a72fcca58-6e4d48a5823so2993825b3a.1 for ; Mon, 18 Mar 2024 08:47:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1710776856; x=1711381656; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=DhbUaEW+2x4ajdSm7F1FWUPuBN/KHA6Xi8kM/8vXMJ0=; b=U5jzI1Ox0JCI00vOS7yfpJzg57QPNNEZqI/nHhOq51SgcGug4Z2A1cE+iBZ7lThUfd 3TsHIDnTLjkRHQIIih1m9jGh3ct6p5e1qTSuXUODivTqoz1THv7/rmGmkOZlQ/dVkawJ xymNyXNbNa48LsSPwFtXEsF/BOajz/W7b/ZfovWC0VVbqV1xJFoNa+wMRqY30MZRpkDo JIKnwwCLNZ3reJUrqTRVAI+pVlwTcHssTVI9OHopXH3ZoWfeCZcmU/EKj5Mz2Mcdg02x D2m4UYuJPZFWl0oQRTZ1TPQ/HfaVOQey8Us3WcXvPXiE2JKMoIRMCtmMw1NEHeGILPCG CJMw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1710776856; x=1711381656; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=DhbUaEW+2x4ajdSm7F1FWUPuBN/KHA6Xi8kM/8vXMJ0=; b=AFA2YdO5EMFyqShM/MB4q02pDPvJTgTCU/cZAjxy/0V4qh4ChfyUWDZO0dmLtbLh/j vIGioyWe55fXYhpiBdIqrt8elGbhMKApeP6yhUiC/nySe32fsOiC4j3t+5IND9vq5cdX YRAteWH7fSJex7sOe6qcmn+scuLrPz0/lrP0GVwgQiqp9Mq51Rj+6InSecVZNthqnNPi gJNKRyAsv1KMaDRAIxDYWv7RqJNPY8nfIarZg4xXd7se11F2/Bo+Tmsby9I7VuTUtsju fF+QZzsm1C99n7jDjyocuDKcis0ie2zo9THa2GOemuc6qB+g1unKD3qImmmJv+bE1Z79 SENQ== X-Gm-Message-State: AOJu0Yw17IHSrgtYsxLTKWrJSZLWAq0yOAv1j8ylHc+LtTgJPrtcO+L6 PWvYTM0b0LEzcvGlzhVQiedCPVewczlk5IZiPSHEwlhxZazG4plTValz9jU/GaI= X-Google-Smtp-Source: AGHT+IGHcljV3Nj8rWLf1bqsA9WylQbg5aH0ShA1ONiyqUkMxIGubGk/T9sjveQA9bM7KT9gH4HxrQ== X-Received: by 2002:a05:6a21:920f:b0:1a3:4a1d:1092 with SMTP id tl15-20020a056a21920f00b001a34a1d1092mr11893355pzb.35.1710776856307; Mon, 18 Mar 2024 08:47:36 -0700 (PDT) Received: from wheely.local0.net ([118.208.155.46]) by smtp.gmail.com with ESMTPSA id v22-20020a634816000000b005dc26144d96sm7332108pga.75.2024.03.18.08.47.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 18 Mar 2024 08:47:36 -0700 (PDT) From: Nicholas Piggin To: qemu-devel@nongnu.org Cc: Nicholas Piggin , Pavel Dovgalyuk , =?utf-8?q?Philippe_Mathieu-Dau?= =?utf-8?q?d=C3=A9?= , Richard Henderson , =?utf-8?q?Alex_Benn=C3=A9?= =?utf-8?q?e?= , Paolo Bonzini , John Snow , Cleber Rosa , Wainer dos Santos Moschetta , Beraldo Leal , Michael Tokarev Subject: [PATCH v5 11/24] virtio-net: Use virtual time for RSC timers Date: Tue, 19 Mar 2024 01:46:08 +1000 Message-ID: <20240318154621.2361161-12-npiggin@gmail.com> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20240318154621.2361161-1-npiggin@gmail.com> References: <20240318154621.2361161-1-npiggin@gmail.com> MIME-Version: 1.0 Received-SPF: pass client-ip=2607:f8b0:4864:20::42f; envelope-from=npiggin@gmail.com; helo=mail-pf1-x42f.google.com 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, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Receive coalescing is visible to the target machine, so its timers should use virtual time like other timers in virtio-net, to be compatible with record-replay. Signed-off-by: Nicholas Piggin --- hw/net/virtio-net.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/hw/net/virtio-net.c b/hw/net/virtio-net.c index 6ac737f2cf..894df25222 100644 --- a/hw/net/virtio-net.c +++ b/hw/net/virtio-net.c @@ -2176,7 +2176,7 @@ static void virtio_net_rsc_purge(void *opq) chain->stat.timer++; if (!QTAILQ_EMPTY(&chain->buffers)) { timer_mod(chain->drain_timer, - qemu_clock_get_ns(QEMU_CLOCK_HOST) + chain->n->rsc_timeout); + qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL) + chain->n->rsc_timeout); } } @@ -2412,7 +2412,7 @@ static size_t virtio_net_rsc_do_coalesce(VirtioNetRscChain *chain, chain->stat.empty_cache++; virtio_net_rsc_cache_buf(chain, nc, buf, size); timer_mod(chain->drain_timer, - qemu_clock_get_ns(QEMU_CLOCK_HOST) + chain->n->rsc_timeout); + qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL) + chain->n->rsc_timeout); return size; } @@ -2650,7 +2650,7 @@ static VirtioNetRscChain *virtio_net_rsc_lookup_chain(VirtIONet *n, chain->max_payload = VIRTIO_NET_MAX_IP6_PAYLOAD; chain->gso_type = VIRTIO_NET_HDR_GSO_TCPV6; } - chain->drain_timer = timer_new_ns(QEMU_CLOCK_HOST, + chain->drain_timer = timer_new_ns(QEMU_CLOCK_VIRTUAL, virtio_net_rsc_purge, chain); memset(&chain->stat, 0, sizeof(chain->stat)); From patchwork Mon Mar 18 15:46:09 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Nicholas Piggin X-Patchwork-Id: 1913190 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20230601 header.b=SvK3BRzW; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=patchwork.ozlabs.org) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4TyzmN744Hz23sG for ; Tue, 19 Mar 2024 02:48:52 +1100 (AEDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1rmFDK-0004sJ-BZ; Mon, 18 Mar 2024 11:47:50 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1rmFDJ-0004ls-IX for qemu-devel@nongnu.org; Mon, 18 Mar 2024 11:47:49 -0400 Received: from mail-oa1-x2e.google.com ([2001:4860:4864:20::2e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1rmFDE-0007vT-4E for qemu-devel@nongnu.org; Mon, 18 Mar 2024 11:47:49 -0400 Received: by mail-oa1-x2e.google.com with SMTP id 586e51a60fabf-222ba2a19bdso1130783fac.1 for ; Mon, 18 Mar 2024 08:47:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1710776862; x=1711381662; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=1Yo6kstUG7IdEJmEbbwMKG5M1XxH4YUOFuFB6HSlPrc=; b=SvK3BRzWofyIPS8FSZLGZVIgVq6HCZZsytJwoQ4+92GZdIkeNZyU06CTbQZ/A2H7ZJ eIhBUwOAA+stGbvdd87GbU/aHNAYpKmv3w/gyYQa3V8yQT45oaPI9JWockTj266KWiFS oRoeyFfyFwgJGW3cm5d9Ust9qj79DC1jHzT4CMn/pyukTL06Kw59pkLravVFMmdqd8zO gR28AD5gWwjeWvULy6fZfaNkyd72DbAdqCYAQf4QloPidWFq0dGBXrEXtq07Wl+rsk2O 0dtdfet8XhDUq4Tcb2chcmtNMxHZU0V0B6EF+ajUbrc+3/AccHDdVO8LBeEoPrvgngVJ j2bA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1710776862; x=1711381662; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=1Yo6kstUG7IdEJmEbbwMKG5M1XxH4YUOFuFB6HSlPrc=; b=eNSpNyRuBwKsxoXga5dk/KiP29BEyLbMBCQJrS/mvRHDVYtlUq0YU/E9Wh3rbEXVcP tBt0YZ+gTw0H+6q954YieoI/mh7D38kx3fv8xPS+3kzMGwRbt0fth8RjWHLtNWkIhEMm TrsCkD9QC8dlR7Nm5W6RVfpmtSrPS3YjD8GuGheVEb+ADLmv+wSgISqSzcHNZq/zP3lo +xDyVJMLH6Q26r6R5eux1dow2JPQJhmwTNJkPSHy/olpq+gzojNw6G70qE+8NFGBlWO+ bMMou7CdxQHlxrmKQHc7feeajoOrX4XGofh5AXqEyVXpaCs5YaQqgSDqub56aUYL6Fwg quFg== X-Gm-Message-State: AOJu0Yw5Dj1nqdCXBw31+r/g+PRgA6MZIrsmTn3rKOfCF9yDA2Dcq0kU Et5LAAv0CI6xf6IympKAmf6TNxhLBBDivWqkN3grbzK/+9ODdAph+C6Y9lnPBjM= X-Google-Smtp-Source: AGHT+IH+IwnNiNvlQCiSiva9/yzfqOpU/c2lNEBaIQAcEpu3btpL1kDwO+4g7/bqQgbBHcXolcriHQ== X-Received: by 2002:a05:6870:648d:b0:21e:624d:56f3 with SMTP id cz13-20020a056870648d00b0021e624d56f3mr12881158oab.56.1710776862663; Mon, 18 Mar 2024 08:47:42 -0700 (PDT) Received: from wheely.local0.net ([118.208.155.46]) by smtp.gmail.com with ESMTPSA id v22-20020a634816000000b005dc26144d96sm7332108pga.75.2024.03.18.08.47.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 18 Mar 2024 08:47:42 -0700 (PDT) From: Nicholas Piggin To: qemu-devel@nongnu.org Cc: Nicholas Piggin , Pavel Dovgalyuk , =?utf-8?q?Philippe_Mathieu-Dau?= =?utf-8?q?d=C3=A9?= , Richard Henderson , =?utf-8?q?Alex_Benn=C3=A9?= =?utf-8?q?e?= , Paolo Bonzini , John Snow , Cleber Rosa , Wainer dos Santos Moschetta , Beraldo Leal , Michael Tokarev Subject: [PATCH v5 12/24] savevm: Fix load_snapshot error path crash Date: Tue, 19 Mar 2024 01:46:09 +1000 Message-ID: <20240318154621.2361161-13-npiggin@gmail.com> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20240318154621.2361161-1-npiggin@gmail.com> References: <20240318154621.2361161-1-npiggin@gmail.com> MIME-Version: 1.0 Received-SPF: pass client-ip=2001:4860:4864:20::2e; envelope-from=npiggin@gmail.com; helo=mail-oa1-x2e.google.com 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, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org An error path missed setting *errp, which can cause a NULL deref. Signed-off-by: Nicholas Piggin Reviewed-by: Alex Bennée --- migration/savevm.c | 1 + 1 file changed, 1 insertion(+) diff --git a/migration/savevm.c b/migration/savevm.c index 388d7af7cd..10c187dd10 100644 --- a/migration/savevm.c +++ b/migration/savevm.c @@ -3260,6 +3260,7 @@ bool load_snapshot(const char *name, const char *vmstate, /* Don't even try to load empty VM states */ ret = bdrv_snapshot_find(bs_vm_state, &sn, name); if (ret < 0) { + error_setg(errp, "Snapshot can not be found"); return false; } else if (sn.vm_state_size == 0) { error_setg(errp, "This is a disk-only snapshot. Revert to it " From patchwork Mon Mar 18 15:46:10 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Nicholas Piggin X-Patchwork-Id: 1913198 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20230601 header.b=Fz/kx71l; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=patchwork.ozlabs.org) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4Tyznh5Zwwz23sG for ; Tue, 19 Mar 2024 02:50:00 +1100 (AEDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1rmFDR-0005nF-EL; Mon, 18 Mar 2024 11:47:57 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1rmFDP-0005eu-EE for qemu-devel@nongnu.org; Mon, 18 Mar 2024 11:47:55 -0400 Received: from mail-oo1-xc32.google.com ([2607:f8b0:4864:20::c32]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1rmFDJ-0007vg-J1 for qemu-devel@nongnu.org; Mon, 18 Mar 2024 11:47:55 -0400 Received: by mail-oo1-xc32.google.com with SMTP id 006d021491bc7-5a4a14c52fcso759073eaf.1 for ; Mon, 18 Mar 2024 08:47:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1710776868; x=1711381668; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=Y7iKS4ySAYhb/qoRHukxiwY3seRoSpbokwbgQj4S8po=; b=Fz/kx71l0TyrFJCtmkoZvoO940yLDrxhcTEIYsExnfg9IkipfK0Ft3SHJIXcVWL1Ta LnL2iUpCZXgVNXAIWwACtbJP+91AienUclqRyFskmhXB87gVh4kyQJYw5OMrmskBNbXQ S0VAPqI1t2g/EcqHZ60UCuX6YEIOisAsJEkDUEhUGmCaeKBJxBWYtxfgUEk1l/zJRExP q98HZYR6wMcBeL2540hos7xFs3M6jrxQtXD8x9M6fx88FLYpibqCBGzLY5XnoYA8xmT3 BJ9m5xevxqCM4nJgVVcC3qMXRRIj/oTyFxG4mqJCk6S4Rrkkz5E2zOsbc7bbmD00zsI0 3ohQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1710776868; x=1711381668; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=Y7iKS4ySAYhb/qoRHukxiwY3seRoSpbokwbgQj4S8po=; b=FDOJ/61lBRm9DyTq1I3fcju6fXj/9xgEUabdQ7EaeLygXjqeQ03Ca1nSitjtPaDzgY cW4zAJWoWvMV1sgkTmeUGLEPyMHb5Y1H3BI5kcLGIo/c5ndzsiG6qxbJhXJ1liHUAN8R NfDA8xy4+kPdtCYAx1G8kdJykRWLezkfLWcVw1H38FL8bmcMc0pXbeSNnefPsCVcuvvI 1RO5GeljOBfAstbXFAFFpVoAZOV5qt7sSn/pPOHvNRNqFq+df9H9KRUatICtFMfN9T2u ebxr8ca3KjWxr1BykXFO76s+OxDuXkVccTO3cuwae/EgmxwrQUAZwCfLCy4zWlX+t8DD VZvg== X-Gm-Message-State: AOJu0YzklehKmHuXJLXXedI3ZcDjk8gqGnCeiHQMd4GUeKb4khcbqybI 3iy/xnOAWWr0TlGmriKHVR5MAGlDSAnqHLnp3bROVNGy9ZAaQQN0BYMNfT9wl3U= X-Google-Smtp-Source: AGHT+IHefwOVxIJiTQcrL5Q2YsFjHszFDaji+Izo63z/a9hoij9o2F0GmjFS/Jh4weBpRaLMCNFKBQ== X-Received: by 2002:a05:6820:1344:b0:5a4:bbf6:9e0c with SMTP id b4-20020a056820134400b005a4bbf69e0cmr3051543oow.1.1710776867953; Mon, 18 Mar 2024 08:47:47 -0700 (PDT) Received: from wheely.local0.net ([118.208.155.46]) by smtp.gmail.com with ESMTPSA id v22-20020a634816000000b005dc26144d96sm7332108pga.75.2024.03.18.08.47.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 18 Mar 2024 08:47:47 -0700 (PDT) From: Nicholas Piggin To: qemu-devel@nongnu.org Cc: Nicholas Piggin , Pavel Dovgalyuk , =?utf-8?q?Philippe_Mathieu-Dau?= =?utf-8?q?d=C3=A9?= , Richard Henderson , =?utf-8?q?Alex_Benn=C3=A9?= =?utf-8?q?e?= , Paolo Bonzini , John Snow , Cleber Rosa , Wainer dos Santos Moschetta , Beraldo Leal , Michael Tokarev Subject: [PATCH v5 13/24] tests/avocado: replay_linux.py remove the timeout expected guards Date: Tue, 19 Mar 2024 01:46:10 +1000 Message-ID: <20240318154621.2361161-14-npiggin@gmail.com> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20240318154621.2361161-1-npiggin@gmail.com> References: <20240318154621.2361161-1-npiggin@gmail.com> MIME-Version: 1.0 Received-SPF: pass client-ip=2607:f8b0:4864:20::c32; envelope-from=npiggin@gmail.com; helo=mail-oo1-xc32.google.com 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, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01, T_SPF_HELO_TEMPERROR=0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org replay_linux tests with virtio on aarch64 gciv3 and x86-64 q35 machines seems to be more reliable now, so timeouts are no longer expected. pc_i440fx, gciv2, and non-virtio still have problems, so mark them as flaky: they are not just long-running, but can hang indefinitely. These tests take about 400 seconds each, so add the SPEED=slow guard. Signed-off-by: Nicholas Piggin Reviewed-by: Alex Bennée --- tests/avocado/replay_linux.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/tests/avocado/replay_linux.py b/tests/avocado/replay_linux.py index b3b91ddd9a..b3b74a367c 100644 --- a/tests/avocado/replay_linux.py +++ b/tests/avocado/replay_linux.py @@ -118,7 +118,7 @@ def run_replay_dump(self, replay_path): except subprocess.CalledProcessError: self.fail('replay-dump.py failed') -@skipUnless(os.getenv('AVOCADO_TIMEOUT_EXPECTED'), 'Test might timeout') +@skipUnless(os.getenv('SPEED') == 'slow', 'runtime limited') class ReplayLinuxX8664(ReplayLinux): """ :avocado: tags=arch:x86_64 @@ -127,19 +127,21 @@ class ReplayLinuxX8664(ReplayLinux): chksum = 'e3c1b309d9203604922d6e255c2c5d098a309c2d46215d8fc026954f3c5c27a0' + @skipUnless(os.getenv('QEMU_TEST_FLAKY_TESTS'), 'Test is unstable') def test_pc_i440fx(self): """ :avocado: tags=machine:pc """ self.run_rr(shift=1) + @skipUnless(os.getenv('QEMU_TEST_FLAKY_TESTS'), 'Test is unstable') def test_pc_q35(self): """ :avocado: tags=machine:q35 """ self.run_rr(shift=3) -@skipUnless(os.getenv('AVOCADO_TIMEOUT_EXPECTED'), 'Test might timeout') +@skipUnless(os.getenv('SPEED') == 'slow', 'runtime limited') class ReplayLinuxX8664Virtio(ReplayLinux): """ :avocado: tags=arch:x86_64 @@ -153,6 +155,7 @@ class ReplayLinuxX8664Virtio(ReplayLinux): chksum = 'e3c1b309d9203604922d6e255c2c5d098a309c2d46215d8fc026954f3c5c27a0' + @skipUnless(os.getenv('QEMU_TEST_FLAKY_TESTS'), 'Test is unstable') def test_pc_i440fx(self): """ :avocado: tags=machine:pc @@ -165,7 +168,7 @@ def test_pc_q35(self): """ self.run_rr(shift=3) -@skipUnless(os.getenv('AVOCADO_TIMEOUT_EXPECTED'), 'Test might timeout') +@skipUnless(os.getenv('SPEED') == 'slow', 'runtime limited') class ReplayLinuxAarch64(ReplayLinux): """ :avocado: tags=accel:tcg @@ -187,6 +190,7 @@ def get_common_args(self): '-device', 'virtio-rng-pci,rng=rng0', '-object', 'rng-builtin,id=rng0') + @skipUnless(os.getenv('QEMU_TEST_FLAKY_TESTS'), 'Test is unstable') def test_virt_gicv2(self): """ :avocado: tags=machine:gic-version=2 From patchwork Mon Mar 18 15:46:11 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Nicholas Piggin X-Patchwork-Id: 1913191 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20230601 header.b=bpDlp/bZ; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=patchwork.ozlabs.org) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4TyzmR5SZ1z23sG for ; Tue, 19 Mar 2024 02:48:55 +1100 (AEDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1rmFDw-0007Jw-0G; Mon, 18 Mar 2024 11:48:28 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1rmFDb-0006Ik-22 for qemu-devel@nongnu.org; Mon, 18 Mar 2024 11:48:11 -0400 Received: from mail-oi1-x230.google.com ([2607:f8b0:4864:20::230]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1rmFDO-0007vt-MI for qemu-devel@nongnu.org; Mon, 18 Mar 2024 11:48:06 -0400 Received: by mail-oi1-x230.google.com with SMTP id 5614622812f47-3c19aaedfdaso2504750b6e.2 for ; Mon, 18 Mar 2024 08:47:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1710776873; x=1711381673; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=iM8ZZscE7pj+Z7J5S93rTnFI05PsMASFwHURBr43Ioo=; b=bpDlp/bZBp0Tfm/xZuDiczd7K6oJVOlD9Kjly6WDlhkXKVh1So9W3BbInms0dBZf/i T/gi7GdLY8dseNDUpw1Ao1Cf9LKGko0qlU0T1OYkcYwy8mPhxYieaKxs+MPDglqDJp+G yCZoa+nzBQlL1Jiw4mDbV27LogQuTbbXQx/5z7T94u6ejt1HF0azVznxtpW4oyGXQ7IZ BD/vd38V5w7WqF2+agT8Z15+PkHKae7IYLW8SdQLzR6eexmU2YepymcM9exw7qlLDI/r i78Nt1yxj88+C/8oFFvRayjJmoQYA8Cr+iaLYrJ/BsR4OaTMh275OuDNiLNTCZlnA7kE q5sg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1710776873; x=1711381673; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=iM8ZZscE7pj+Z7J5S93rTnFI05PsMASFwHURBr43Ioo=; b=WrKptC4grDvGke+pvDQastaCMGDEENHHIJUTSFo7d80DEXzvOT076q0Bqsk8g/9bTb E0uy4qBd5F6bHldkLPLOhNZwelkPFF48hsBzqsfdtczIoEeTF9nxmNwKLQUCzw9TQp1R pZRsFUK9P2pleV72wmglII1ajqk8egWkIa09jeUmlcIbkPanB16JDwqBGbDrLSzY9P9p dig7jfgePHKN0QDr0Q1A3IlTd2Faz0vSoCbVkxM5+sBUDZTZPPpRKX3YFvFQPSG5oYbd jmZFVAf4KQlawnxl3LYWfaMa40RQzWDr/Qjr/Endsjc4GYZ60upBzR0O0Euf5SMNzz1i r03w== X-Gm-Message-State: AOJu0YwGnK8NEOCxAqm2hijpuwHhUWCVxqCB+1QUvw8GJo9XShmYfZjk ZbjtZWAwSHaUPsQW1fS8c4c8FVthBu4NV8Wn3BT8/51B7l6sYr7jloAt6tAMPrI= X-Google-Smtp-Source: AGHT+IGNWbQ5CgUyVBADOil/kaYYIUqEDHiRHBkIi+PmLFi1eMsQsvxYJ4h3aj1WR7mRDRauLECeUA== X-Received: by 2002:a05:6358:291e:b0:17e:8416:53c2 with SMTP id y30-20020a056358291e00b0017e841653c2mr13806795rwb.1.1710776873278; Mon, 18 Mar 2024 08:47:53 -0700 (PDT) Received: from wheely.local0.net ([118.208.155.46]) by smtp.gmail.com with ESMTPSA id v22-20020a634816000000b005dc26144d96sm7332108pga.75.2024.03.18.08.47.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 18 Mar 2024 08:47:53 -0700 (PDT) From: Nicholas Piggin To: qemu-devel@nongnu.org Cc: Nicholas Piggin , Pavel Dovgalyuk , =?utf-8?q?Philippe_Mathieu-Dau?= =?utf-8?q?d=C3=A9?= , Richard Henderson , =?utf-8?q?Alex_Benn=C3=A9?= =?utf-8?q?e?= , Paolo Bonzini , John Snow , Cleber Rosa , Wainer dos Santos Moschetta , Beraldo Leal , Michael Tokarev Subject: [PATCH v5 14/24] tests/avocado: reverse_debugging.py mark aarch64 and pseries as not flaky Date: Tue, 19 Mar 2024 01:46:11 +1000 Message-ID: <20240318154621.2361161-15-npiggin@gmail.com> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20240318154621.2361161-1-npiggin@gmail.com> References: <20240318154621.2361161-1-npiggin@gmail.com> MIME-Version: 1.0 Received-SPF: pass client-ip=2607:f8b0:4864:20::230; envelope-from=npiggin@gmail.com; helo=mail-oi1-x230.google.com 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, FREEMAIL_FROM=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org These seem to be quite solid, including on several gitlab CI runs. Enabling them should help catch breakage in future. And update the powernv comment -- gitlab isn't the problem, there are known gaps in implementation. Tested-by: Alex Bennée Reviewed-by: Alex Bennée Signed-off-by: Nicholas Piggin --- tests/avocado/reverse_debugging.py | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/tests/avocado/reverse_debugging.py b/tests/avocado/reverse_debugging.py index 92855a02a5..8fe76ff921 100644 --- a/tests/avocado/reverse_debugging.py +++ b/tests/avocado/reverse_debugging.py @@ -223,9 +223,6 @@ class ReverseDebugging_AArch64(ReverseDebugging): REG_PC = 32 - # unidentified gitlab timeout problem - @skipUnless(os.getenv('QEMU_TEST_FLAKY_TESTS'), 'Test is unstable on GitLab') - def test_aarch64_virt(self): """ :avocado: tags=arch:aarch64 @@ -248,14 +245,10 @@ class ReverseDebugging_ppc64(ReverseDebugging): REG_PC = 0x40 - # unidentified gitlab timeout problem - @skipUnless(os.getenv('QEMU_TEST_FLAKY_TESTS'), 'Test is unstable on GitLab') - def test_ppc64_pseries(self): """ :avocado: tags=arch:ppc64 :avocado: tags=machine:pseries - :avocado: tags=flaky """ # SLOF branches back to its entry point, which causes this test # to take the 'hit a breakpoint again' path. That's not a problem, @@ -264,7 +257,7 @@ def test_ppc64_pseries(self): self.reverse_debugging() # See https://gitlab.com/qemu-project/qemu/-/issues/1992 - @skipUnless(os.getenv('QEMU_TEST_FLAKY_TESTS'), 'Test is unstable on GitLab') + @skipUnless(os.getenv('QEMU_TEST_FLAKY_TESTS'), 'powernv migration support is incomplete so rr debugging is flaky') def test_ppc64_powernv(self): """ From patchwork Mon Mar 18 15:46:12 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Nicholas Piggin X-Patchwork-Id: 1913199 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20230601 header.b=R8IeFrKx; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=patchwork.ozlabs.org) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4Tyznk48hwz1yWn for ; Tue, 19 Mar 2024 02:50:02 +1100 (AEDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1rmFDs-0006jX-86; Mon, 18 Mar 2024 11:48:24 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1rmFDd-0006KQ-TP for qemu-devel@nongnu.org; Mon, 18 Mar 2024 11:48:15 -0400 Received: from mail-pl1-x634.google.com ([2607:f8b0:4864:20::634]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1rmFDW-0007wM-75 for qemu-devel@nongnu.org; Mon, 18 Mar 2024 11:48:07 -0400 Received: by mail-pl1-x634.google.com with SMTP id d9443c01a7336-1e032fc60a0so5410305ad.1 for ; Mon, 18 Mar 2024 08:48:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1710776879; x=1711381679; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=/eazafKsUh9Gq+1jlyAtlIIMsQVJTUKsjooFoPTkUTU=; b=R8IeFrKxuFwRJ/kTx4UEwWrSHwE0M1cNS55u6O3svHS2C1yZ653YYSgmmdo/EbXtpd Ul29jCiIkOQXjeZPyfq+kHmykYGYJgvCf6mNTvfQpuFiqBH5W/j8A+xeeID8FrIEkvFi dRFBS+HllnF5cIsMjI9b2bnlqZ+vZI3PRAqtGG+o9BmS7j9zmNxYXfQqTLtBi7+Wzucy LdIbnAokKtltqqex3nf2T24jczf1jmk+incFgojq6nJJ4V/DYm+GZVREz1zzuq4Zdhpw cGW0E8LX1zjUMczHKFQwlSSn7pOYfpbm/rvWug1WZ+DX9VNMdfTVpSkFoA5OVfQpvIHk TYjA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1710776879; x=1711381679; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=/eazafKsUh9Gq+1jlyAtlIIMsQVJTUKsjooFoPTkUTU=; b=LAF7Q9zE7Pi/nzn7zHBGT5XOwN1MjQgMPok9Xl4A2QjHfk8ukwzqkB6zwoNU4QTY1y IjDMXTmVSBk5V0Oe+wMy9/KguIfm2cL9jQYKpkwDaDo9LY+FQeyxxp2wKPwdNNqc3qlR v3jzj36eXkIRd3QHEfGqgpr6zXtdwY6vDgd20ZDhNG8BvbX8YL9rIJizF8XBM16xtB0Q NWfUu43X2WlTGo26RBDzTJ19Pz0RLYXkTaamq+dJxS877sAiP9YkqNo0cIy21G+CVk6/ k3BzDGNibircoomkDOPAE7BWfUWZwNJ3AWKCmxlxXC403y1zl0XBNUD1WwW1CAqFXl60 c+nA== X-Gm-Message-State: AOJu0YyV9nON9e4WPdJM0nN6/dOKI48y/DYl+Mwu/7/LlxtYnvYEn7CD EhiGlX+lCRJ3wVGIehkTE/KydiYSavNjA78L1hwDqRXGrP69cImpq8R4UOM9IlI= X-Google-Smtp-Source: AGHT+IEldDi+kzSyGX2FTxnZL2NKuXBRp+NetXJ5SBlesdRVyO99lzJwGhmc5Iv0zsLdcwIYk0LGbA== X-Received: by 2002:a17:903:2292:b0:1e0:185d:16e0 with SMTP id b18-20020a170903229200b001e0185d16e0mr5868482plh.24.1710776879349; Mon, 18 Mar 2024 08:47:59 -0700 (PDT) Received: from wheely.local0.net ([118.208.155.46]) by smtp.gmail.com with ESMTPSA id v22-20020a634816000000b005dc26144d96sm7332108pga.75.2024.03.18.08.47.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 18 Mar 2024 08:47:59 -0700 (PDT) From: Nicholas Piggin To: qemu-devel@nongnu.org Cc: Nicholas Piggin , Pavel Dovgalyuk , =?utf-8?q?Philippe_Mathieu-Dau?= =?utf-8?q?d=C3=A9?= , Richard Henderson , =?utf-8?q?Alex_Benn=C3=A9?= =?utf-8?q?e?= , Paolo Bonzini , John Snow , Cleber Rosa , Wainer dos Santos Moschetta , Beraldo Leal , Michael Tokarev Subject: [PATCH v5 15/24] tests/avocado: reverse_debugging.py add test for x86-64 q35 machine Date: Tue, 19 Mar 2024 01:46:12 +1000 Message-ID: <20240318154621.2361161-16-npiggin@gmail.com> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20240318154621.2361161-1-npiggin@gmail.com> References: <20240318154621.2361161-1-npiggin@gmail.com> MIME-Version: 1.0 Received-SPF: pass client-ip=2607:f8b0:4864:20::634; envelope-from=npiggin@gmail.com; helo=mail-pl1-x634.google.com 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, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org The x86-64 pc machine has a problem with record/replay. q35 seems to work well. Add a new q35 test and update the flaky message for pc. Signed-off-by: Nicholas Piggin Reviewed-by: Alex Bennée Tested-by: Alex Bennée --- tests/avocado/reverse_debugging.py | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/tests/avocado/reverse_debugging.py b/tests/avocado/reverse_debugging.py index 8fe76ff921..e76cf54ad7 100644 --- a/tests/avocado/reverse_debugging.py +++ b/tests/avocado/reverse_debugging.py @@ -206,8 +206,7 @@ def get_pc(self, g): + self.get_reg_le(g, self.REG_CS) * 0x10 # unidentified gitlab timeout problem - @skipUnless(os.getenv('QEMU_TEST_FLAKY_TESTS'), 'Test is unstable on GitLab') - + @skipUnless(os.getenv('QEMU_TEST_FLAKY_TESTS'), 'pc machine is unstable with replay') def test_x86_64_pc(self): """ :avocado: tags=arch:x86_64 @@ -216,6 +215,14 @@ def test_x86_64_pc(self): # start with BIOS only self.reverse_debugging() + def test_x86_64_q35(self): + """ + :avocado: tags=arch:x86_64 + :avocado: tags=machine:q35 + """ + # start with BIOS only + self.reverse_debugging() + class ReverseDebugging_AArch64(ReverseDebugging): """ :avocado: tags=accel:tcg From patchwork Mon Mar 18 15:46:13 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nicholas Piggin X-Patchwork-Id: 1913189 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20230601 header.b=kvznyEBW; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=patchwork.ozlabs.org) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4TyzmF4kRjz23sG for ; Tue, 19 Mar 2024 02:48:45 +1100 (AEDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1rmFDt-0006xw-M6; Mon, 18 Mar 2024 11:48:25 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1rmFDl-0006dj-EE for qemu-devel@nongnu.org; Mon, 18 Mar 2024 11:48:19 -0400 Received: from mail-pf1-x436.google.com ([2607:f8b0:4864:20::436]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1rmFDb-0007wl-Pt for qemu-devel@nongnu.org; Mon, 18 Mar 2024 11:48:17 -0400 Received: by mail-pf1-x436.google.com with SMTP id d2e1a72fcca58-6e6fb9a494aso2132723b3a.0 for ; Mon, 18 Mar 2024 08:48:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1710776885; x=1711381685; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=m8gtVyvP+veMtIIGlxTAH51MS2c3Qecwre8NmRVXGX0=; b=kvznyEBWX9UW8v3tutpaom+FZxmF8xYazxzSB8D4qExuMl1XOgQkMglm2fr8jbXMdW JaImtPBjvqK0Je+mEXLOSuVzkzdQyg98y/3nhsxgY2ve8p0PnbMRuZ7WRNe5fJj5QvUS MTjuz3Rkhoba1vj88HqcmmnDvztAmKHkayLwVpPOv97iW9GsGjWaT3jgwpFDOeuZck1V ljL2lJN8l2DzhMXSMAdhESuU8gmo1QqpAVRfA1p8feOAxRyJIBzc9m0HKKqEVAqhzpo3 lX/H+SYqqPEGzvYsZRIhcSM/NBdBY5kQWO4celytgPyxj6f4O3ORRgArtDYdIjqL6gG7 lmgQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1710776885; x=1711381685; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=m8gtVyvP+veMtIIGlxTAH51MS2c3Qecwre8NmRVXGX0=; b=DudwX+jgBLmL4rV5YlpGiD4zvlewxKlHtGkF0ZqcfcgpFWizWzjW+mn0k13dvREeEH hezlf36a8QF0jGxR8itPU8FfZkaHe8byPnXqW+wJJj7cK4+t6wDncHMGKV4PLvL1pUBb /KS64kOU/dZTX9l5XxNksZ9hITMZjKuWZvT6vVqLXvT5b1gvjBw8CZs79/iLKUEeCEN9 VK35J4Rjf9j3ouNva4f7TVN1R8H+u1dAtWh6Azc4LCiEK5FRBsjFxumx0VK9Hg1KuJPY axW1OwemRvtkUVI1dUV/bXRRH3Le6q3Qqrcd8kHatSVREuzNI5s/LH43FPomlZZ7lUTh UhVg== X-Gm-Message-State: AOJu0YzAnvqXXcYX0UcZ3nSL4U7iAfRdX0Hbqw5himGFe3l7uCzRycPN BicoUzcuz2O2MIMJ6Qr5hDWeMKbatKOA+JsmZj8/Tj7qU0rcWI/Xn0sKA5L2UnI= X-Google-Smtp-Source: AGHT+IFswxqQ/0H+cTZPdXEgMz4qwDtL/gx6jUeM67U5cNtSjURwB4P2nAkNgy6xr9ur5wSQs9Q8Gg== X-Received: by 2002:a05:6a20:3d12:b0:1a3:64ec:46a6 with SMTP id y18-20020a056a203d1200b001a364ec46a6mr3475267pzi.4.1710776884912; Mon, 18 Mar 2024 08:48:04 -0700 (PDT) Received: from wheely.local0.net ([118.208.155.46]) by smtp.gmail.com with ESMTPSA id v22-20020a634816000000b005dc26144d96sm7332108pga.75.2024.03.18.08.47.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 18 Mar 2024 08:48:04 -0700 (PDT) From: Nicholas Piggin To: qemu-devel@nongnu.org Cc: Nicholas Piggin , Pavel Dovgalyuk , =?utf-8?q?Philippe_Mathieu-Dau?= =?utf-8?q?d=C3=A9?= , Richard Henderson , =?utf-8?q?Alex_Benn=C3=A9?= =?utf-8?q?e?= , Paolo Bonzini , John Snow , Cleber Rosa , Wainer dos Santos Moschetta , Beraldo Leal , Michael Tokarev Subject: [PATCH v5 16/24] tests/avocado: reverse_debugging.py verify addresses between record and replay Date: Tue, 19 Mar 2024 01:46:13 +1000 Message-ID: <20240318154621.2361161-17-npiggin@gmail.com> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20240318154621.2361161-1-npiggin@gmail.com> References: <20240318154621.2361161-1-npiggin@gmail.com> MIME-Version: 1.0 Received-SPF: pass client-ip=2607:f8b0:4864:20::436; envelope-from=npiggin@gmail.com; helo=mail-pf1-x436.google.com 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, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org gdb is only attached in the replay phase, and the recorded trace is single-stepped to build up an address map that is used to then verify reverse-step and reverse-continue. This change attaches gdb in the record phase, and builds the address map by single-stepping the live machine. That address map is then verified by single-stepping the replay, and then used for the same reverse debug verification. This is a stronger verifcation between the record and the replay phases, as well as providing some testing of gdb operation in record mode. x86_64 has problems with taking the first step, it does not advance the icount, so a workaround is added for it. Signed-off-by: Nicholas Piggin --- tests/avocado/reverse_debugging.py | 68 +++++++++++++++++++++++++----- 1 file changed, 58 insertions(+), 10 deletions(-) diff --git a/tests/avocado/reverse_debugging.py b/tests/avocado/reverse_debugging.py index e76cf54ad7..8a9578ad5a 100644 --- a/tests/avocado/reverse_debugging.py +++ b/tests/avocado/reverse_debugging.py @@ -35,6 +35,10 @@ class ReverseDebugging(LinuxKernelTest): STEPS = 10 endian_is_le = True + # If first_step_workaround is true, check whether the first step moved + # icount, and if not then step again. + first_step_workaround = False + def run_vm(self, record, shift, args, replay_path, image_path, port): logger = logging.getLogger('replay') vm = self.get_vm() @@ -45,7 +49,7 @@ def run_vm(self, record, shift, args, replay_path, image_path, port): else: logger.info('replaying the execution...') mode = 'replay' - vm.add_args('-gdb', 'tcp::%d' % port, '-S') + vm.add_args('-gdb', 'tcp::%d' % port, '-S') vm.add_args('-icount', 'shift=%s,rr=%s,rrfile=%s,rrsnapshot=init' % (shift, mode, replay_path), '-net', 'none') @@ -87,6 +91,17 @@ def check_pc(self, g, addr): if pc != addr: self.fail('Invalid PC (read %x instead of %x)' % (pc, addr)) + @staticmethod + def gdb_cont(g): + g.cmd(b'c') + + @staticmethod + def gdb_cont_nowait(g): + # The avocado GDBRemote does not have a good way to disconnect or + # continue without waiting for a reply, so open-code our own here. + data = g.encode(b'c') + g._socket.send(data) + @staticmethod def gdb_step(g): g.cmd(b's', b'T05thread:01;') @@ -117,11 +132,40 @@ def reverse_debugging(self, shift=7, args=None): replay_path = os.path.join(self.workdir, 'replay.bin') port = find_free_port() + steps = [] + # record the log vm = self.run_vm(True, shift, args, replay_path, image_path, port) + logger.info('connecting to gdbstub') + g = gdb.GDBRemote('127.0.0.1', port, False, False) + g.connect() + r = g.cmd(b'qSupported') + if b'qXfer:features:read+' in r: + g.cmd(b'qXfer:features:read:target.xml:0,ffb') + + if self.vm_get_icount(vm) != 0: + self.fail('icount does not start at zero') + + # save the addresses of the first STEPS instructions executed + logger.info('stepping forward') + for i in range(self.STEPS): + pc = self.get_pc(g) + logger.info('saving position %x' % pc) + steps.append(pc) + self.gdb_step(g) + if self.first_step_workaround and i == 0 and self.vm_get_icount(vm) == 0: + logger.warn('failed to take first step, stepping again') + self.gdb_step(g) + if self.vm_get_icount(vm) != self.STEPS: + self.fail('icount (%d) does not match number of instructions stepped' % self.vm_get_icount(vm)) + + logger.info('continue running') + self.gdb_cont_nowait(g) + while self.vm_get_icount(vm) <= self.STEPS: pass last_icount = self.vm_get_icount(vm) + logger.info('shutdown...') vm.shutdown() logger.info("recorded log with %s+ steps" % last_icount) @@ -139,23 +183,23 @@ def reverse_debugging(self, shift=7, args=None): if b'ReverseContinue+' not in r: self.fail('Reverse continue is not supported by QEMU') + # Try single stepping logger.info('stepping forward') - steps = [] - # record first instruction addresses - for _ in range(self.STEPS): - pc = self.get_pc(g) - logger.info('saving position %x' % pc) - steps.append(pc) + for addr in steps: + # verify addresses match what initial execution saw + self.check_pc(g, addr) self.gdb_step(g) + logger.info('found position %x' % addr) - # visit the recorded instruction in reverse order + # Try reverse stepping logger.info('stepping backward') for addr in steps[::-1]: self.gdb_bstep(g) + # verify addresses match what initial execution saw self.check_pc(g, addr) logger.info('found position %x' % addr) - # visit the recorded instruction in forward order + # Step forward again logger.info('stepping forward') for addr in steps: self.check_pc(g, addr) @@ -175,7 +219,7 @@ def reverse_debugging(self, shift=7, args=None): # continue - will return after pausing # This could stop at the end and get a T02 return, or by # re-executing one of the breakpoints and get a T05 return. - g.cmd(b'c') + self.gdb_cont(g) if self.vm_get_icount(vm) == last_icount - 1: logger.info('reached the end (icount %s)' % (last_icount - 1)) else: @@ -201,6 +245,10 @@ class ReverseDebugging_X86_64(ReverseDebugging): REG_PC = 0x10 REG_CS = 0x12 + + # The initial step does not change pc on x86 for some reason. + first_step_workaround = True + def get_pc(self, g): return self.get_reg_le(g, self.REG_PC) \ + self.get_reg_le(g, self.REG_CS) * 0x10 From patchwork Mon Mar 18 15:46:14 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nicholas Piggin X-Patchwork-Id: 1913187 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20230601 header.b=dJfrg8RJ; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=patchwork.ozlabs.org) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4Tyzm33KJgz23sG for ; Tue, 19 Mar 2024 02:48:35 +1100 (AEDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1rmFDt-0006vX-Hj; Mon, 18 Mar 2024 11:48:25 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1rmFDn-0006eX-Pg for qemu-devel@nongnu.org; Mon, 18 Mar 2024 11:48:21 -0400 Received: from mail-pf1-x42c.google.com ([2607:f8b0:4864:20::42c]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1rmFDg-0007xM-3d for qemu-devel@nongnu.org; Mon, 18 Mar 2024 11:48:17 -0400 Received: by mail-pf1-x42c.google.com with SMTP id d2e1a72fcca58-6e6bee809b8so4221047b3a.1 for ; Mon, 18 Mar 2024 08:48:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1710776890; x=1711381690; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=NyLvGmFiLkd1QrQEzobFQyubgUDWC+tz3WyBBbJBYXU=; b=dJfrg8RJ8HbVukWu4sj7Q4gi5a2HAalmBm1EfIrA30jEjtX9+3GFEe6s+NXFEGSYp8 2Obbi3Cl/iUbeLynPX5SsRO/5AlloM/0mIfyPUt6XZ/04NfTuXANtiv+Xki1/TtEHGls VeKNMRnjkoZ8tI5Y5krLh31wsWOa/ykD7mP4L2RCnuMsXSo1M0SBaRgDYwBFX0X4dAKn lWxBw9Wy5pM6615us4VFxcnOAC6ogfVNyTTPjegEWJa0NgHrqrERiBQjnKFhij40koaY wKbLE66EbbQMT+4wxluz+pTTqOIAONzajzxarfTFjH6/QB3puhLtgq9Fhm6joQoqNTdr 7qbQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1710776890; x=1711381690; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=NyLvGmFiLkd1QrQEzobFQyubgUDWC+tz3WyBBbJBYXU=; b=hQ+PVpnPOkIJ/5dGc0+zb5CQyPWxoo3idPIk/MtQ1r5/y+2y9++Z4IxUPoBQ3EIa7G EUaVfDA0AP7RlFgBJYvg3ptH76Or0+wIvtdzm5SX6ABSmlzByA0vy8KvV/k4OstvoyLZ zfWv9PcpVcvf2KwgXi724fhnRLWMVmJYSUyPMOGUcSCUiiCyoib23TPvH1lHHKQMcgdL N920EPlq0CALtUukeFYu11hmeDZz8OuvsOWmzUPuAfttmHaQ79s0P/kr19/hFxtTQX1n 7hiVL+ykutDh9glJbJvmYeHHW1tpO1dc5rVdibelsLqzanvzeXtbxJqazgo9Gq8btnqG ZeVw== X-Gm-Message-State: AOJu0YyjY9Zgz0ThBjf95B+Ei8H7Q8hNskQHi/FIaC/NGzt8p88i6F1J ZC1X8CEL9WeMoyz2+P5lZUx42LDUNVkv26bgbjgkPA5Fj8Vm8ZI+H+2Jmzs55wU= X-Google-Smtp-Source: AGHT+IEQzhr6JzmFVuY6L3R02QjO2VcOXBLXHbBTwZAMnLEc5xiyLKCcdPUkKHwV9d+DptY2Ry3gUw== X-Received: by 2002:a05:6a21:a58d:b0:1a1:67a6:bba7 with SMTP id gd13-20020a056a21a58d00b001a167a6bba7mr16958566pzc.1.1710776890531; Mon, 18 Mar 2024 08:48:10 -0700 (PDT) Received: from wheely.local0.net ([118.208.155.46]) by smtp.gmail.com with ESMTPSA id v22-20020a634816000000b005dc26144d96sm7332108pga.75.2024.03.18.08.48.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 18 Mar 2024 08:48:10 -0700 (PDT) From: Nicholas Piggin To: qemu-devel@nongnu.org Cc: Nicholas Piggin , Pavel Dovgalyuk , =?utf-8?q?Philippe_Mathieu-Dau?= =?utf-8?q?d=C3=A9?= , Richard Henderson , =?utf-8?q?Alex_Benn=C3=A9?= =?utf-8?q?e?= , Paolo Bonzini , John Snow , Cleber Rosa , Wainer dos Santos Moschetta , Beraldo Leal , Michael Tokarev Subject: [PATCH v5 17/24] tests/avocado: reverse_debugging.py stop VM before sampling icount Date: Tue, 19 Mar 2024 01:46:14 +1000 Message-ID: <20240318154621.2361161-18-npiggin@gmail.com> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20240318154621.2361161-1-npiggin@gmail.com> References: <20240318154621.2361161-1-npiggin@gmail.com> MIME-Version: 1.0 Received-SPF: pass client-ip=2607:f8b0:4864:20::42c; envelope-from=npiggin@gmail.com; helo=mail-pf1-x42c.google.com 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, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Rather than sampling icount while the vm is running, stop it before sampling icount. This allows the actual last recorded icount in the trace to be found. Signed-off-by: Nicholas Piggin --- tests/avocado/reverse_debugging.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/tests/avocado/reverse_debugging.py b/tests/avocado/reverse_debugging.py index 8a9578ad5a..bdc9082c85 100644 --- a/tests/avocado/reverse_debugging.py +++ b/tests/avocado/reverse_debugging.py @@ -156,19 +156,20 @@ def reverse_debugging(self, shift=7, args=None): if self.first_step_workaround and i == 0 and self.vm_get_icount(vm) == 0: logger.warn('failed to take first step, stepping again') self.gdb_step(g) - if self.vm_get_icount(vm) != self.STEPS: + self.gdb_step(g) + if self.vm_get_icount(vm) != self.STEPS + 1: self.fail('icount (%d) does not match number of instructions stepped' % self.vm_get_icount(vm)) logger.info('continue running') self.gdb_cont_nowait(g) - while self.vm_get_icount(vm) <= self.STEPS: - pass + logger.info('stopping to read final icount') + vm.qmp('stop') last_icount = self.vm_get_icount(vm) logger.info('shutdown...') vm.shutdown() - logger.info("recorded log with %s+ steps" % last_icount) + logger.info("recorded log with %s steps" % last_icount) # replay and run debug commands vm = self.run_vm(False, shift, args, replay_path, image_path, port) From patchwork Mon Mar 18 15:46:15 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nicholas Piggin X-Patchwork-Id: 1913196 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20230601 header.b=V5s8e2bI; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=patchwork.ozlabs.org) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4TyznB1tyGz23sG for ; Tue, 19 Mar 2024 02:49:34 +1100 (AEDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1rmFDw-0007WO-VO; Mon, 18 Mar 2024 11:48:29 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1rmFDp-0006f9-PM for qemu-devel@nongnu.org; Mon, 18 Mar 2024 11:48:23 -0400 Received: from mail-pf1-x435.google.com ([2607:f8b0:4864:20::435]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1rmFDn-0007z2-D8 for qemu-devel@nongnu.org; Mon, 18 Mar 2024 11:48:21 -0400 Received: by mail-pf1-x435.google.com with SMTP id d2e1a72fcca58-6e6b22af648so4003068b3a.0 for ; Mon, 18 Mar 2024 08:48:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1710776896; x=1711381696; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=R6v5RIqN05KI0hc+5mWXKMx4NLEtwOgII4cjIlr9z1c=; b=V5s8e2bIsqGlE+F1Ow3ByvYN1acSY3LdZDX8k3uNVMHKzPS0dcHFdY7wrPG6dAQhbk R2ee5uZi/UOznoiO0j2Kz4XH5qG+kyTMOlQE9bklaoou4iprwaXsLM9XswtLLpkDSW5Z KWA6HJkKVT0R5zjGF8ZuCUCreP6BP/+Ogso7Xn1PVvLWfoO7iXlzqKAQsaZBbdwzO8NT /sQfA/fhTQhQ/N09wGntpDYkjhkVIvZLaxvbdUMpSgpQHhH7SUlRlbPnLbCo9A9w4FG4 1pJjbOyL/syrxi28/eHqtRD0yVy6dOEpd8nn/inh8vQyT8x/6vZy5X5XndTIhreY1eGp cU3g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1710776896; x=1711381696; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=R6v5RIqN05KI0hc+5mWXKMx4NLEtwOgII4cjIlr9z1c=; b=aX7hFUnIXdCf/wJjyo2VlS0vrSi+Z5/pjc4Sxe+pw2djkequM+GuEGIoHLA+zAtwJO RhqiDJZAqMUJyn43caSvertA7GcGQsJy0KuoIzEjaZhYCq+Gb1tv9hhYfm4MgQxBqBSX DcikJwNt+9ECLxqbIgFEHIsuC7kFK7TCdB35elQ0r5b89NsoKUl8/+/WQuZ43UUMSAfc 0D1y8XTFOxMSxW+61bIAUobMBpZ7B3/487dBM3wPPYlIP9etjWtxotIF3ZkWYomw3qBw HGx4vf1wLm4RG613fAlXk1RE4e+QKW21CUxMoxX1W/g1uJKDU3jxX4zmRuvyov6rzZAT PbJA== X-Gm-Message-State: AOJu0Yww4MhTWEZAQkFidQzIIcn1Yd+XeeZ5gs4bZPu4hRP5dqMFpVMr r+bc38m2lGcBCeRGm3CjhW5KUlyauHYdOM91yC4Ve6q607GUPbAEgRAs3q0mMq4= X-Google-Smtp-Source: AGHT+IH+cHz0Rby4vdmsY9QoFOKyCKlo+HbfsYU5RN+HtmE0hDtbUO3ldOFUVa7h/P/zdkmXAMmkcA== X-Received: by 2002:a05:6a21:99aa:b0:1a3:4a3a:6e22 with SMTP id ve42-20020a056a2199aa00b001a34a3a6e22mr14624063pzb.24.1710776896259; Mon, 18 Mar 2024 08:48:16 -0700 (PDT) Received: from wheely.local0.net ([118.208.155.46]) by smtp.gmail.com with ESMTPSA id v22-20020a634816000000b005dc26144d96sm7332108pga.75.2024.03.18.08.48.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 18 Mar 2024 08:48:16 -0700 (PDT) From: Nicholas Piggin To: qemu-devel@nongnu.org Cc: Nicholas Piggin , Pavel Dovgalyuk , =?utf-8?q?Philippe_Mathieu-Dau?= =?utf-8?q?d=C3=A9?= , Richard Henderson , =?utf-8?q?Alex_Benn=C3=A9?= =?utf-8?q?e?= , Paolo Bonzini , John Snow , Cleber Rosa , Wainer dos Santos Moschetta , Beraldo Leal , Michael Tokarev Subject: [PATCH v5 18/24] tests/avocado: reverse_debugging reverse-step at the end of the trace Date: Tue, 19 Mar 2024 01:46:15 +1000 Message-ID: <20240318154621.2361161-19-npiggin@gmail.com> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20240318154621.2361161-1-npiggin@gmail.com> References: <20240318154621.2361161-1-npiggin@gmail.com> MIME-Version: 1.0 Received-SPF: pass client-ip=2607:f8b0:4864:20::435; envelope-from=npiggin@gmail.com; helo=mail-pf1-x435.google.com 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, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org The longer a trace is played for, the more chance there is for bugs to cause it to go out of synch with the initial recording. Stepping backward from the end of a trace can be a good way to find problems. This extends the runtime of the record phase to 1 second, to build a bigger trace, and it adds a replay test that runs to the end of the trace, steps back then forward and verifies the pc. x86_64 and aarch64 have problems with verifying the pc at the end of the trace after reverse-stepping, so add a workaround to skip that check for them. Signed-off-by: Nicholas Piggin --- tests/avocado/reverse_debugging.py | 65 +++++++++++++++++++++++++++++- 1 file changed, 63 insertions(+), 2 deletions(-) diff --git a/tests/avocado/reverse_debugging.py b/tests/avocado/reverse_debugging.py index bdc9082c85..c0cf580d5c 100644 --- a/tests/avocado/reverse_debugging.py +++ b/tests/avocado/reverse_debugging.py @@ -9,6 +9,7 @@ # later. See the COPYING file in the top-level directory. import os import logging +import time from avocado import skipUnless from avocado_qemu import BUILD_DIR @@ -31,10 +32,15 @@ class ReverseDebugging(LinuxKernelTest): that the execution is stopped at the last of them. """ - timeout = 10 + timeout = 30 STEPS = 10 endian_is_le = True + # If long_trace is true, record execution for some time, and verify + # reverse-stepping from the end of the trace as well. If false, only the + # first 10 instructions are stepped. + verify_end = True + # If first_step_workaround is true, check whether the first step moved # icount, and if not then step again. first_step_workaround = False @@ -91,6 +97,19 @@ def check_pc(self, g, addr): if pc != addr: self.fail('Invalid PC (read %x instead of %x)' % (pc, addr)) + @staticmethod + def gdb_break(g): + # The avocado GDBRemote does not have a good way to send this break + # packet, which is different from others. + g._socket.send(b'\x03') + transmission_result = g._socket.recv(1) + if transmission_result == '-': + raise Exception("Bad ack") + result = g._socket.recv(1024) + response_payload = g.decode(result) + if response_payload != b'T02thread:01;': + raise Exception("Unexpected response" + response_payload.decode()) + @staticmethod def gdb_cont(g): g.cmd(b'c') @@ -162,9 +181,15 @@ def reverse_debugging(self, shift=7, args=None): logger.info('continue running') self.gdb_cont_nowait(g) - + logger.info('running for 1s...') + time.sleep(1) logger.info('stopping to read final icount') vm.qmp('stop') + self.gdb_break(g) + + last_pc = self.get_pc(g) + logger.info('saving position %x' % last_pc) + self.gdb_step(g) last_icount = self.vm_get_icount(vm) logger.info('shutdown...') vm.shutdown() @@ -200,6 +225,34 @@ def reverse_debugging(self, shift=7, args=None): self.check_pc(g, addr) logger.info('found position %x' % addr) + # Run to the end of the trace, reverse-step, and then reverse-continue + # back to the start, with no breakpoints. This allows us to get to the + # end of the trace and reverse step from there, without possibly + # hitting a breakpoint that prevents reaching the end, as can happen + # with the later breakpoint tests. + logger.info('running to the end of the trace') + vm.qmp('replay-break', icount=last_icount - 1) + # This should stop at the end and get a T02 return. + self.gdb_cont(g) + if self.vm_get_icount(vm) != last_icount - 1: + self.fail('failed to reach the end (icount %s, reached %s)' % ((last_icount - 1), self.vm_get_icount(vm))) + logger.info('reached end of trace') + + if self.verify_end: + self.check_pc(g, last_pc) + logger.info('found position %x' % last_pc) + + logger.info('stepping backward') + self.gdb_bstep(g) + + logger.info('stepping forward') + self.gdb_step(g) + self.check_pc(g, last_pc) + logger.info('found position %x' % last_pc) + + logger.info('reversing to the start of the trace') + g.cmd(b'bc', b'T05thread:01;') + # Step forward again logger.info('stepping forward') for addr in steps: @@ -250,6 +303,10 @@ class ReverseDebugging_X86_64(ReverseDebugging): # The initial step does not change pc on x86 for some reason. first_step_workaround = True + # Reverse stepping from a long-running trace does not reliably replay + # the trace precisely on x86. + verify_end = False + def get_pc(self, g): return self.get_reg_le(g, self.REG_PC) \ + self.get_reg_le(g, self.REG_CS) * 0x10 @@ -279,6 +336,10 @@ class ReverseDebugging_AArch64(ReverseDebugging): REG_PC = 32 + # Reverse stepping from a long-running trace does not reliably replay + # the trace precisely on aarch64. + verify_end = False + def test_aarch64_virt(self): """ :avocado: tags=arch:aarch64 From patchwork Mon Mar 18 15:46:16 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nicholas Piggin X-Patchwork-Id: 1913193 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20230601 header.b=Ir2+eH/X; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=patchwork.ozlabs.org) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4TyzmZ6HBvz23sG for ; Tue, 19 Mar 2024 02:49:02 +1100 (AEDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1rmFE2-0007r8-8L; Mon, 18 Mar 2024 11:48:34 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1rmFDw-0007RL-6r for qemu-devel@nongnu.org; Mon, 18 Mar 2024 11:48:28 -0400 Received: from mail-oi1-x232.google.com ([2607:f8b0:4864:20::232]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1rmFDr-0007ze-H0 for qemu-devel@nongnu.org; Mon, 18 Mar 2024 11:48:27 -0400 Received: by mail-oi1-x232.google.com with SMTP id 5614622812f47-3c1a2f7e1d2so2937403b6e.1 for ; Mon, 18 Mar 2024 08:48:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1710776902; x=1711381702; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=vChGyrdMAwhGNcUz/tevOgrJdP+StcBef0qjQjfUcXs=; b=Ir2+eH/Xaks/awcpxsz22giE0TcUfME2txLzh8Z2+1k0k0cAHIrvRN/JVy+/COJbRY cdq3AcQxgzl0h13pJUJKjWLPwRm7nUfelVs/sRznkPzMwZ7jC29F5cXTMKuY77GZ0BOi xAPU5iSq9zK0WjW6NTS9l3+8h0u/S6F5R1LQZDuzESDkGiurqM/n+vDHXeKijsMCpKLP /tPEjVxCowFfX9Ln9c7AEkKNPxifBw5whdPchKiOjFdSXaTVt6fycXS2yg4iqzobVXmD S0k/uoZ3/DOT1GrSTN89aOlSSmBMVt8fdyL1bHYnVOjzn30jJyA/CpNbaAC0itYFQtSy WSFw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1710776902; x=1711381702; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=vChGyrdMAwhGNcUz/tevOgrJdP+StcBef0qjQjfUcXs=; b=tj1PtYPwLGjs6eRm0rlg9EUOpO9seVRdTjrNGnGw7I8+8YA3lhFryZwihX7lXTzVTX lNQi5vaaIw3gQoaiDYyOnPnsGY2DVI2KrtT2OwvY20NG7Dh9IZdNsTXj4kId0ct9X+7f cJTUHNrby0llCbz7sZmpU3+An4A4Q4UBA2IricFhxOZAZ1HjBXvl1+0A7tQnQVSF5bYz Y5UqrKHWUnGTqNhmNf/IeyGzDp714xU7iiEylx/QQQ7+genKRkuW3L8UcQHYibuRFS43 TwwciO4UMUOO5vQnunn9URJQ9+BotSuYm8/FzD0rdZt4hCfWpx0h5+9L6MObGQAwAALG Ogtg== X-Gm-Message-State: AOJu0YyVny4LMWRdnVAE4owEMCb8Jgp3OpA7xUNeP+KSCdq7d0gBa3Ft znm1RNeHFQEwdlJrOxmsBmg6TzUSBYlgzzqaTekgvoIGyCCI9+ChRtXVmNN5kuE= X-Google-Smtp-Source: AGHT+IH+xu9UG0qY5T3oCoz48+mzAT1WNd+fxXiFmnh1dJQorE2yMYpLRQTEZ4x54/XXgd7uxJjP/A== X-Received: by 2002:a05:6808:13d3:b0:3c2:c82:904f with SMTP id d19-20020a05680813d300b003c20c82904fmr14360335oiw.58.1710776902250; Mon, 18 Mar 2024 08:48:22 -0700 (PDT) Received: from wheely.local0.net ([118.208.155.46]) by smtp.gmail.com with ESMTPSA id v22-20020a634816000000b005dc26144d96sm7332108pga.75.2024.03.18.08.48.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 18 Mar 2024 08:48:22 -0700 (PDT) From: Nicholas Piggin To: qemu-devel@nongnu.org Cc: Nicholas Piggin , Pavel Dovgalyuk , =?utf-8?q?Philippe_Mathieu-Dau?= =?utf-8?q?d=C3=A9?= , Richard Henderson , =?utf-8?q?Alex_Benn=C3=A9?= =?utf-8?q?e?= , Paolo Bonzini , John Snow , Cleber Rosa , Wainer dos Santos Moschetta , Beraldo Leal , Michael Tokarev Subject: [PATCH v5 19/24] tests/avocado: reverse_debugging.py add snapshot testing Date: Tue, 19 Mar 2024 01:46:16 +1000 Message-ID: <20240318154621.2361161-20-npiggin@gmail.com> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20240318154621.2361161-1-npiggin@gmail.com> References: <20240318154621.2361161-1-npiggin@gmail.com> MIME-Version: 1.0 Received-SPF: pass client-ip=2607:f8b0:4864:20::232; envelope-from=npiggin@gmail.com; helo=mail-oi1-x232.google.com 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, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Make a manual snapshot halfway though initial building of the address map in record mode. This will cause the reverse-step and reverse-continue tests to load that snapshot when beginning from later points in the trace, exercising the post-initial snapshot saving and loading. Signed-off-by: Nicholas Piggin --- tests/avocado/reverse_debugging.py | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/tests/avocado/reverse_debugging.py b/tests/avocado/reverse_debugging.py index c0cf580d5c..185f055cf9 100644 --- a/tests/avocado/reverse_debugging.py +++ b/tests/avocado/reverse_debugging.py @@ -59,7 +59,7 @@ def run_vm(self, record, shift, args, replay_path, image_path, port): vm.add_args('-icount', 'shift=%s,rr=%s,rrfile=%s,rrsnapshot=init' % (shift, mode, replay_path), '-net', 'none') - vm.add_args('-drive', 'file=%s,if=none' % image_path) + vm.add_args('-drive', 'file=%s,if=none,id=disk0' % image_path) if args: vm.add_args(*args) vm.launch() @@ -133,6 +133,14 @@ def gdb_bstep(g): def vm_get_icount(vm): return vm.qmp('query-replay')['return']['icount'] + @staticmethod + def vm_snapshot(vm): + return vm.qmp('snapshot-save', + {'job-id': 'snapshot-job', + 'tag': 'manual', + 'vmstate': 'disk0', + 'devices': []}) + def reverse_debugging(self, shift=7, args=None): logger = logging.getLogger('replay') @@ -171,6 +179,9 @@ def reverse_debugging(self, shift=7, args=None): pc = self.get_pc(g) logger.info('saving position %x' % pc) steps.append(pc) + if i == self.STEPS//2: + logger.info('saving VM snapshot at step %x...' % i) + self.vm_snapshot(vm) self.gdb_step(g) if self.first_step_workaround and i == 0 and self.vm_get_icount(vm) == 0: logger.warn('failed to take first step, stepping again') @@ -217,7 +228,9 @@ def reverse_debugging(self, shift=7, args=None): self.gdb_step(g) logger.info('found position %x' % addr) - # Try reverse stepping + # Try reverse stepping. The manual snapshot taken in the record + # phase should be used for reverse-stepping until the machine + # reverses to an icount older than the snapshot. logger.info('stepping backward') for addr in steps[::-1]: self.gdb_bstep(g) @@ -242,6 +255,8 @@ def reverse_debugging(self, shift=7, args=None): self.check_pc(g, last_pc) logger.info('found position %x' % last_pc) + # This should load the last snapshot taken. Could that be verified + # with QMP? logger.info('stepping backward') self.gdb_bstep(g) From patchwork Mon Mar 18 15:46:17 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nicholas Piggin X-Patchwork-Id: 1913192 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20230601 header.b=iiVrYLbq; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=patchwork.ozlabs.org) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4TyzmV5Dstz23sG for ; Tue, 19 Mar 2024 02:48:58 +1100 (AEDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1rmFEB-0000yY-9P; Mon, 18 Mar 2024 11:48:43 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1rmFE8-0000ks-Vw for qemu-devel@nongnu.org; Mon, 18 Mar 2024 11:48:41 -0400 Received: from mail-oi1-x22f.google.com ([2607:f8b0:4864:20::22f]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1rmFDz-000809-Vs for qemu-devel@nongnu.org; Mon, 18 Mar 2024 11:48:40 -0400 Received: by mail-oi1-x22f.google.com with SMTP id 5614622812f47-3c37af44dcbso1713885b6e.3 for ; Mon, 18 Mar 2024 08:48:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1710776908; x=1711381708; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=CiDAmOnmWT4ekrWuB2ITbU/+cCjo/0GhwwVWCJ90GMA=; b=iiVrYLbq7NxMwFBuajV3OePao5hJ9moGchCBpvLCkGQopNut9c+YZgSEfx6AGhgobD h5tCZ7Inh4GLOEpAQZEMzP1fgJpsreTQf/GMdN9cTsSzSYqWPzTqYefpGcqBvi+dUGrV 6c6bVIKXGjrJ8EhqIE898T1iYYlDsOqGZz8XtsMegGFtnuns17QhNErtJAn027MJRMtJ Ey+TKScs04EN1c43YoR/19kCEViAfJI8IPhzHRCsCRp93lIhpRu5Ejg8xMaZ5kypLtG7 xxWcmAmmnZwGOBh32FXUeisDgQmnatw2nmd+16FcuSFOVcovopH6DgMc09wFmy7hMXzJ 01cQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1710776908; x=1711381708; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=CiDAmOnmWT4ekrWuB2ITbU/+cCjo/0GhwwVWCJ90GMA=; b=r4gT0pblNs+SRTtcqxl7/FVmwMzr+OokfkyXONjKfqkjz8DEvLyHzibo2220ySC6Er aoxfob/K8EgcSjxbkAkqNGAeH5QOlyQ3lJ3RM0G5VukCSR89z8q46BoSKy5X83QvW7xa 2SIiqX4dbI4uKzWpqLtHNuS2osqDrKs1df5FGndeO8UqfN/KqXDZyRF6jvEKyAY24Ypu k2yI/XZ+wrNJr8GDUQq2eeTYF+JlhOgDMap0eUBsXklRYgDvcfhUO6vofDeA+u8iXe4s Pwtnq2Ox1HZFnBBgR+qv2xsxFSJJ9D38CNVOPKUDGn4Oud+yTUlkKd2tsk/5cVdsMX1B QBww== X-Gm-Message-State: AOJu0YzXzZEqUmLfQ4mkcIA5VbcQMZRcdsrZuuTOuFBagJ5naI69S+w5 ME9YGOYCpbLpIkOtSiLj7LIhuJHt1cjMkj75/cjqSooZMuu8ektKIWFI50cTDqY= X-Google-Smtp-Source: AGHT+IGeaApjV32xwbtP1EsJ30sONIG0xua+WZd5or9j2JP5SH9MQ9HdVJAxEy4J9htvqYnfLbICpA== X-Received: by 2002:a05:6871:7981:b0:220:e608:89c with SMTP id pb1-20020a056871798100b00220e608089cmr14584816oac.28.1710776908370; Mon, 18 Mar 2024 08:48:28 -0700 (PDT) Received: from wheely.local0.net ([118.208.155.46]) by smtp.gmail.com with ESMTPSA id v22-20020a634816000000b005dc26144d96sm7332108pga.75.2024.03.18.08.48.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 18 Mar 2024 08:48:28 -0700 (PDT) From: Nicholas Piggin To: qemu-devel@nongnu.org Cc: Nicholas Piggin , Pavel Dovgalyuk , =?utf-8?q?Philippe_Mathieu-Dau?= =?utf-8?q?d=C3=A9?= , Richard Henderson , =?utf-8?q?Alex_Benn=C3=A9?= =?utf-8?q?e?= , Paolo Bonzini , John Snow , Cleber Rosa , Wainer dos Santos Moschetta , Beraldo Leal , Michael Tokarev Subject: [PATCH v5 20/24] replay: simple auto-snapshot mode for record Date: Tue, 19 Mar 2024 01:46:17 +1000 Message-ID: <20240318154621.2361161-21-npiggin@gmail.com> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20240318154621.2361161-1-npiggin@gmail.com> References: <20240318154621.2361161-1-npiggin@gmail.com> MIME-Version: 1.0 Received-SPF: pass client-ip=2607:f8b0:4864:20::22f; envelope-from=npiggin@gmail.com; helo=mail-oi1-x22f.google.com 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, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org record makes an initial snapshot when the machine is created, to enable reverse-debugging. Often the issue being debugged appears near the end of the trace, so it is important for performance to keep snapshots close to the end. This implements a periodic snapshot mode that keeps a rolling set of recent snapshots. This could be done by the debugger or other program that talks QMP, but for setting up simple scenarios and tests, this is more convenient. Signed-off-by: Nicholas Piggin --- docs/system/replay.rst | 5 ++++ include/sysemu/replay.h | 11 ++++++++ replay/replay-snapshot.c | 57 ++++++++++++++++++++++++++++++++++++++++ replay/replay.c | 27 +++++++++++++++++-- system/vl.c | 9 +++++++ qemu-options.hx | 9 +++++-- 6 files changed, 114 insertions(+), 4 deletions(-) diff --git a/docs/system/replay.rst b/docs/system/replay.rst index ca7c17c63d..1ae8614475 100644 --- a/docs/system/replay.rst +++ b/docs/system/replay.rst @@ -156,6 +156,11 @@ for storing VM snapshots. Here is the example of the command line for this: ``empty.qcow2`` drive does not connected to any virtual block device and used for VM snapshots only. +``rrsnapmode`` can be used to select just an initial snapshot or periodic +snapshots, with ``rrsnapcount`` specifying the number of periodic snapshots +to maintain, and ``rrsnaptime`` the amount of run time in seconds between +periodic snapshots. + .. _network-label: Network devices diff --git a/include/sysemu/replay.h b/include/sysemu/replay.h index 8102fa54f0..92fa82842b 100644 --- a/include/sysemu/replay.h +++ b/include/sysemu/replay.h @@ -48,6 +48,17 @@ typedef enum ReplayCheckpoint ReplayCheckpoint; typedef struct ReplayNetState ReplayNetState; +enum ReplaySnapshotMode { + REPLAY_SNAPSHOT_MODE_INITIAL, + REPLAY_SNAPSHOT_MODE_PERIODIC, +}; +typedef enum ReplaySnapshotMode ReplaySnapshotMode; + +extern ReplaySnapshotMode replay_snapshot_mode; + +extern uint64_t replay_snapshot_periodic_delay; +extern int replay_snapshot_periodic_nr_keep; + /* Name of the initial VM snapshot */ extern char *replay_snapshot; diff --git a/replay/replay-snapshot.c b/replay/replay-snapshot.c index ccb4d89dda..762555feaa 100644 --- a/replay/replay-snapshot.c +++ b/replay/replay-snapshot.c @@ -70,6 +70,53 @@ void replay_vmstate_register(void) vmstate_register(NULL, 0, &vmstate_replay, &replay_state); } +static QEMUTimer *replay_snapshot_timer; +static int replay_snapshot_count; + +static void replay_snapshot_timer_cb(void *opaque) +{ + Error *err = NULL; + char *name; + + if (!replay_can_snapshot()) { + /* Try again soon */ + timer_mod(replay_snapshot_timer, + qemu_clock_get_ms(QEMU_CLOCK_REALTIME) + + replay_snapshot_periodic_delay / 10); + return; + } + + name = g_strdup_printf("%s-%d", replay_snapshot, replay_snapshot_count); + if (!save_snapshot(name, + true, NULL, false, NULL, &err)) { + error_report_err(err); + error_report("Could not create periodic snapshot " + "for icount record, disabling"); + g_free(name); + return; + } + g_free(name); + replay_snapshot_count++; + + if (replay_snapshot_periodic_nr_keep >= 1 && + replay_snapshot_count > replay_snapshot_periodic_nr_keep) { + int del_nr; + + del_nr = replay_snapshot_count - replay_snapshot_periodic_nr_keep - 1; + name = g_strdup_printf("%s-%d", replay_snapshot, del_nr); + if (!delete_snapshot(name, false, NULL, &err)) { + error_report_err(err); + error_report("Could not delete periodic snapshot " + "for icount record"); + } + g_free(name); + } + + timer_mod(replay_snapshot_timer, + qemu_clock_get_ms(QEMU_CLOCK_REALTIME) + + replay_snapshot_periodic_delay); +} + void replay_vmstate_init(void) { Error *err = NULL; @@ -82,6 +129,16 @@ void replay_vmstate_init(void) error_report("Could not create snapshot for icount record"); exit(1); } + + if (replay_snapshot_mode == REPLAY_SNAPSHOT_MODE_PERIODIC) { + replay_snapshot_timer = timer_new_ms(QEMU_CLOCK_REALTIME, + replay_snapshot_timer_cb, + NULL); + timer_mod(replay_snapshot_timer, + qemu_clock_get_ms(QEMU_CLOCK_REALTIME) + + replay_snapshot_periodic_delay); + } + } else if (replay_mode == REPLAY_MODE_PLAY) { if (!load_snapshot(replay_snapshot, NULL, false, NULL, &err)) { error_report_err(err); diff --git a/replay/replay.c b/replay/replay.c index 895fa6b67a..c916e71d30 100644 --- a/replay/replay.c +++ b/replay/replay.c @@ -29,6 +29,10 @@ ReplayMode replay_mode = REPLAY_MODE_NONE; char *replay_snapshot; +ReplaySnapshotMode replay_snapshot_mode; +uint64_t replay_snapshot_periodic_delay; +int replay_snapshot_periodic_nr_keep; + /* Name of replay file */ static char *replay_filename; ReplayState replay_state; @@ -424,6 +428,27 @@ void replay_configure(QemuOpts *opts) } replay_snapshot = g_strdup(qemu_opt_get(opts, "rrsnapshot")); + if (replay_snapshot && mode == REPLAY_MODE_RECORD) { + const char *snapmode; + + snapmode = qemu_opt_get(opts, "rrsnapmode"); + if (!snapmode || !strcmp(snapmode, "initial")) { + replay_snapshot_mode = REPLAY_SNAPSHOT_MODE_INITIAL; + } else if (!strcmp(snapmode, "periodic")) { + replay_snapshot_mode = REPLAY_SNAPSHOT_MODE_PERIODIC; + } else { + error_report("Invalid rrsnapmode option: %s", snapmode); + exit(1); + } + + /* Default 10 host seconds of machine runtime per snapshot. */ + replay_snapshot_periodic_delay = + qemu_opt_get_number(opts, "rrsnaptime", 10) * 1000; + + /* Default 2, to cover at least the last 10 host seconds of runtime. */ + replay_snapshot_periodic_nr_keep = + qemu_opt_get_number(opts, "rrsnapcount", 2); + } replay_vmstate_register(); replay_enable(fname, mode); @@ -446,8 +471,6 @@ void replay_start(void) exit(1); } - /* Timer for snapshotting will be set up here. */ - replay_enable_events(); } diff --git a/system/vl.c b/system/vl.c index 70f4cece7f..8070cee6da 100644 --- a/system/vl.c +++ b/system/vl.c @@ -447,6 +447,15 @@ static QemuOptsList qemu_icount_opts = { }, { .name = "rrsnapshot", .type = QEMU_OPT_STRING, + }, { + .name = "rrsnapmode", + .type = QEMU_OPT_STRING, + }, { + .name = "rrsnaptime", + .type = QEMU_OPT_NUMBER, + }, { + .name = "rrsnapcount", + .type = QEMU_OPT_NUMBER, }, { /* end of list */ } }, diff --git a/qemu-options.hx b/qemu-options.hx index 7fd1713fa8..51f2498f12 100644 --- a/qemu-options.hx +++ b/qemu-options.hx @@ -4665,13 +4665,13 @@ SRST ERST DEF("icount", HAS_ARG, QEMU_OPTION_icount, \ - "-icount [shift=N|auto][,align=on|off][,sleep=on|off][,rr=record|replay,rrfile=[,rrsnapshot=]]\n" \ + "-icount [shift=N|auto][,align=on|off][,sleep=on|off][,rr=record|replay,rrfile=[,rrsnapshot=][,rrsnapmode=initial|periodic][,rrsnaptime=secs][,rrsnapcount=N]\n" \ " enable virtual instruction counter with 2^N clock ticks per\n" \ " instruction, enable aligning the host and virtual clocks\n" \ " or disable real time cpu sleeping, and optionally enable\n" \ " record-and-replay mode\n", QEMU_ARCH_ALL) SRST -``-icount [shift=N|auto][,align=on|off][,sleep=on|off][,rr=record|replay,rrfile=filename[,rrsnapshot=snapshot]]`` +``-icount [shift=N|auto][,align=on|off][,sleep=on|off][,rr=record|replay,rrfile=filename[,rrsnapshot=snapshot][,rrsnapmode=initial|periodic][,rrsnaptime=secs][,rrsnapcount=N]]`` Enable virtual instruction counter. The virtual cpu will execute one instruction every 2^N ns of virtual time. If ``auto`` is specified then the virtual cpu speed will be automatically adjusted to keep @@ -4713,6 +4713,11 @@ SRST name. In record mode, a new VM snapshot with the given name is created at the start of execution recording. In replay mode this option specifies the snapshot name used to load the initial VM state. + ``rrsnapmode=periodic`` will additionally cause a periodic snapshot to + be created after ``rrsnaptime=secs`` seconds of real runtime. The last + ``rrsnapcount=N`` periodic snapshots (not including the initial) will + be kept (0 for infinite). Periodic snapshots are useful to speed + reverse debugging operations near the end of the recorded trace. ERST DEF("watchdog-action", HAS_ARG, QEMU_OPTION_watchdog_action, \ From patchwork Mon Mar 18 15:46:18 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nicholas Piggin X-Patchwork-Id: 1913197 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20230601 header.b=HNTtH5TK; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=patchwork.ozlabs.org) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4TyznB3TC8z23sH for ; Tue, 19 Mar 2024 02:49:34 +1100 (AEDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1rmFEG-0001yy-9l; Mon, 18 Mar 2024 11:48:48 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1rmFED-0001RU-AZ for qemu-devel@nongnu.org; Mon, 18 Mar 2024 11:48:45 -0400 Received: from mail-pg1-x535.google.com ([2607:f8b0:4864:20::535]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1rmFE3-000813-Rp for qemu-devel@nongnu.org; Mon, 18 Mar 2024 11:48:45 -0400 Received: by mail-pg1-x535.google.com with SMTP id 41be03b00d2f7-5e4b775e1d6so3181365a12.1 for ; Mon, 18 Mar 2024 08:48:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1710776914; x=1711381714; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=sgE3bLqYmURNZ5foTV5tmX1mGq2Gl0HCA4fK1Z1dU4Y=; b=HNTtH5TK6mUJb6Uy4dcAkZsYUrUNWU01jzSkBPbZPkk1ErGxo1g679xe5BE5C8E6Gi KmmJGicOdIpbxr/P89IpjM12bpK5nvLaL6bZtITGToeOlhDfOuzD17ktd7UQXVQ28coc Xy8yTosXIhM+3DcTAPWEiLEBvvwfaEInElG1AcAFdK8Hy9HEwKMNCQAOV8z7iVWT3Olu pktwgTT7n9ENjXRda9E3B7FNA7cvIIydQWRdlWi3izOOJKA5WvWlHPOMBmJctYj36/rL 5JiBzgos+S1/2wnrWlf0zmPkECTiTVTwjPcn5Ox4RURyAeKcjs+pASLRwEbmZeugHJJ8 Ws3g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1710776914; x=1711381714; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=sgE3bLqYmURNZ5foTV5tmX1mGq2Gl0HCA4fK1Z1dU4Y=; b=mFuOTcCzLstOQV/YgQXMOZUJOwj5gzXxVTUh7rj8KaBuaI7jlRUuee1VAGQoJrb7Nh RA6Utdql3Em4WnWFdQzg3Psl7mqRwZaeYFMlmrlll5jx2mXB+ivaVsnHdaLKOs3Ok7vg RrpOK2q4zdZHIl1uINXvgIbUC2Ie3OBngS+apiAjAzmJXF1PkolQcKyvkKU0o4CtxvmW 80Ec/u6H6PvGq/IWPdodYUSqIUpTlVhhTW3Qf2x6NoVbB3eBo3NNSEmZmIkgfKMQE6tD s28+J5+REfgaOfe3ay18HNdiI7HPpBMCho5U9Xs64YY3gVBnfWGlOl8Ttqcj7OOObV+v POLA== X-Gm-Message-State: AOJu0YxD45H0g5u32vmMY3OjRZfZw+JtGv2/XHw0U3BKuOJfJXiKZXXn xXO2x67dKDh1MymcyDoPNTM0uoOehdKQrO1RUaqxiuxq6dvsEU3uCFDxY3/Tboc= X-Google-Smtp-Source: AGHT+IGfESP0nmp53QdR6tRaa0ATfrkvxEg9EnhAWgL3oJ04ccBMEhA8fRglwNfWQmMbgqfOJUMaSA== X-Received: by 2002:a17:90a:5218:b0:29f:931a:8b63 with SMTP id v24-20020a17090a521800b0029f931a8b63mr6222374pjh.17.1710776914289; Mon, 18 Mar 2024 08:48:34 -0700 (PDT) Received: from wheely.local0.net ([118.208.155.46]) by smtp.gmail.com with ESMTPSA id v22-20020a634816000000b005dc26144d96sm7332108pga.75.2024.03.18.08.48.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 18 Mar 2024 08:48:34 -0700 (PDT) From: Nicholas Piggin To: qemu-devel@nongnu.org Cc: Nicholas Piggin , Pavel Dovgalyuk , =?utf-8?q?Philippe_Mathieu-Dau?= =?utf-8?q?d=C3=A9?= , Richard Henderson , =?utf-8?q?Alex_Benn=C3=A9?= =?utf-8?q?e?= , Paolo Bonzini , John Snow , Cleber Rosa , Wainer dos Santos Moschetta , Beraldo Leal , Michael Tokarev Subject: [PATCH v5 21/24] tests/avocado: reverse_debugging.py test auto-snapshot mode Date: Tue, 19 Mar 2024 01:46:18 +1000 Message-ID: <20240318154621.2361161-22-npiggin@gmail.com> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20240318154621.2361161-1-npiggin@gmail.com> References: <20240318154621.2361161-1-npiggin@gmail.com> MIME-Version: 1.0 Received-SPF: pass client-ip=2607:f8b0:4864:20::535; envelope-from=npiggin@gmail.com; helo=mail-pg1-x535.google.com 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, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org This runs the recording phase with a periodic auto-snapshot. It also runs the machine for 5 seconds after creating the initial address map, so as to alow time for a some auto snapshots to be taken. In the replay mode a reverse-debugging sequence is added where the test is run to the end, and reverse-stepped from there. This should load the last auto-snapshot taken. The test hangs on x86-64 and aarch64 with autosnapshots, so it is disabled for them. Signed-off-by: Nicholas Piggin --- tests/avocado/reverse_debugging.py | 28 +++++++++++++++++++++++----- 1 file changed, 23 insertions(+), 5 deletions(-) diff --git a/tests/avocado/reverse_debugging.py b/tests/avocado/reverse_debugging.py index 185f055cf9..36e5e1be05 100644 --- a/tests/avocado/reverse_debugging.py +++ b/tests/avocado/reverse_debugging.py @@ -41,6 +41,9 @@ class ReverseDebugging(LinuxKernelTest): # first 10 instructions are stepped. verify_end = True + # Enable the autosnapshot test, requires long_trace = True. + autosnapshot = True + # If first_step_workaround is true, check whether the first step moved # icount, and if not then step again. first_step_workaround = False @@ -56,9 +59,14 @@ def run_vm(self, record, shift, args, replay_path, image_path, port): logger.info('replaying the execution...') mode = 'replay' vm.add_args('-gdb', 'tcp::%d' % port, '-S') - vm.add_args('-icount', 'shift=%s,rr=%s,rrfile=%s,rrsnapshot=init' % - (shift, mode, replay_path), - '-net', 'none') + if self.autosnapshot: + vm.add_args('-icount', 'shift=%s,rr=%s,rrfile=%s,rrsnapshot=init' + ',rrsnapmode=periodic,rrsnapcount=10,' + 'rrsnaptime=1' % (shift, mode, replay_path)) + else: + vm.add_args('-icount', 'shift=%s,rr=%s,rrfile=%s,rrsnapshot=init' + % (shift, mode, replay_path)) + vm.add_args('-net', 'none') vm.add_args('-drive', 'file=%s,if=none,id=disk0' % image_path) if args: vm.add_args(*args) @@ -192,8 +200,12 @@ def reverse_debugging(self, shift=7, args=None): logger.info('continue running') self.gdb_cont_nowait(g) - logger.info('running for 1s...') - time.sleep(1) + if self.autosnapshot: + logger.info('running for 5s...') + time.sleep(5) + else: + logger.info('running for 1s...') + time.sleep(1) logger.info('stopping to read final icount') vm.qmp('stop') self.gdb_break(g) @@ -322,6 +334,9 @@ class ReverseDebugging_X86_64(ReverseDebugging): # the trace precisely on x86. verify_end = False + # x86 doesn't like autosnapshot + autosnapshot = False + def get_pc(self, g): return self.get_reg_le(g, self.REG_PC) \ + self.get_reg_le(g, self.REG_CS) * 0x10 @@ -355,6 +370,9 @@ class ReverseDebugging_AArch64(ReverseDebugging): # the trace precisely on aarch64. verify_end = False + # aarch64 doesn't like autosnapshot + autosnapshot = False + def test_aarch64_virt(self): """ :avocado: tags=arch:aarch64 From patchwork Mon Mar 18 15:46:19 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nicholas Piggin X-Patchwork-Id: 1913200 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20230601 header.b=FOBDrnzM; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=patchwork.ozlabs.org) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4Tyznx5M2Rz1yWy for ; Tue, 19 Mar 2024 02:50:13 +1100 (AEDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1rmFEK-0002WX-7z; Mon, 18 Mar 2024 11:48:52 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1rmFEH-0002G5-EH for qemu-devel@nongnu.org; Mon, 18 Mar 2024 11:48:50 -0400 Received: from mail-pf1-x430.google.com ([2607:f8b0:4864:20::430]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1rmFEB-00083s-5B for qemu-devel@nongnu.org; Mon, 18 Mar 2024 11:48:49 -0400 Received: by mail-pf1-x430.google.com with SMTP id d2e1a72fcca58-6da202aa138so2270407b3a.2 for ; Mon, 18 Mar 2024 08:48:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1710776920; x=1711381720; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=qZKKrRbt8NfIdpSLaUG4B3mAPFv2qCZwxs6w2FhzEZc=; b=FOBDrnzM6lkcnewnKz4jqJvkT589Jvv7Gqx0Noe+n5BpfhPIpMCr0z9thxdoo94J6n EcNvQm32L24Bp5ulKJKRLCA07XCgsBLflyEIjgu/nBmYILnBDvgpCQChvZoU3nlmDxrd TSzFbsbrr7wMoOZrEYIcWg5MqooHPBeKycH6LROibR8lKU2/lz8pXqAEBEFMHa+w5ZR+ Tq6ISgHqvBRYPd8He0EiGVhbxHFI+O5SnxD+wN9fCFlc2Q5AnrhcDUKW/VsWO9U+CbCO zl3vlpC7T50qjSdZmDx4jIQSQvQ1FZ12ZBgqo7rHDhEIFzWI7A7br0AxTsz+UXnGFRvh DYHg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1710776920; x=1711381720; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=qZKKrRbt8NfIdpSLaUG4B3mAPFv2qCZwxs6w2FhzEZc=; b=RDNfZUgUohRSnozZb2eEWWOOp2+qh8KSXAZGnTMe1zzqUJud9/CYltzz5FlghNY+o5 ohMRrcZVDWbmtMOxVqUYlQyL9Ciiockv+zQAZVFK3PmMRZ6co2R2iqZmoeYfDf9iJBqA UjEbZR6CZGhiGcTmPvhAJIoE/U4VGujYm6l7nGTFbT52USZx0AHr3OoN/ijg63QsTkxC DS7ILiR8fzJ3kzTnqDZHCW7nKqmZhXe/57s3zJ71MoJdkd/nPZIa9kKPghrO33J6C3rK GN+MRNu4Hj+QTxVz/vXhYxyfV5E4bsUcfMTJICRVO8OVqqKM/UtEdPFc7xV9gje79mmf TfVg== X-Gm-Message-State: AOJu0Yy6UnCUnRdrL+5M+5WbxsILSo2/1BiYS06zTiea7AUwvzB87SmZ JVSfJeaZU5LqqdYewK0YdBgd6LDbFYhc18BYdUbC+wzrSz0foNyPBJdS3Iap+kE= X-Google-Smtp-Source: AGHT+IHkAWlKjilg0CXooIlZffDQ1tO1mobBU6pAHFHYVoR2lAQjJVQlhq9Tjq6pPMJGGOvrseaqYQ== X-Received: by 2002:a05:6a20:325a:b0:1a3:3d58:e508 with SMTP id hm26-20020a056a20325a00b001a33d58e508mr11927836pzc.53.1710776920421; Mon, 18 Mar 2024 08:48:40 -0700 (PDT) Received: from wheely.local0.net ([118.208.155.46]) by smtp.gmail.com with ESMTPSA id v22-20020a634816000000b005dc26144d96sm7332108pga.75.2024.03.18.08.48.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 18 Mar 2024 08:48:40 -0700 (PDT) From: Nicholas Piggin To: qemu-devel@nongnu.org Cc: Nicholas Piggin , Pavel Dovgalyuk , =?utf-8?q?Philippe_Mathieu-Dau?= =?utf-8?q?d=C3=A9?= , Richard Henderson , =?utf-8?q?Alex_Benn=C3=A9?= =?utf-8?q?e?= , Paolo Bonzini , John Snow , Cleber Rosa , Wainer dos Santos Moschetta , Beraldo Leal , Michael Tokarev Subject: [PATCH v5 22/24] target/ppc: fix timebase register reset state Date: Tue, 19 Mar 2024 01:46:19 +1000 Message-ID: <20240318154621.2361161-23-npiggin@gmail.com> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20240318154621.2361161-1-npiggin@gmail.com> References: <20240318154621.2361161-1-npiggin@gmail.com> MIME-Version: 1.0 Received-SPF: pass client-ip=2607:f8b0:4864:20::430; envelope-from=npiggin@gmail.com; helo=mail-pf1-x430.google.com 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, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org (H)DEC and PURR get reset before icount does, which causes them to be skewed and not match the init state. This can cause replay to not match the recorded trace exactly. For DEC and HDEC this is usually not noticable since they tend to get programmed before affecting the target machine. PURR has been observed to cause replay bugs when running Linux. Fix this by resetting using a time of 0. Signed-off-by: Nicholas Piggin --- hw/ppc/ppc.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/hw/ppc/ppc.c b/hw/ppc/ppc.c index e6fa5580c0..ddcbf8972b 100644 --- a/hw/ppc/ppc.c +++ b/hw/ppc/ppc.c @@ -1122,16 +1122,21 @@ void cpu_ppc_tb_reset(CPUPPCState *env) timer_del(tb_env->hdecr_timer); ppc_set_irq(cpu, PPC_INTERRUPT_HDECR, 0); tb_env->hdecr_next = 0; + _cpu_ppc_store_hdecr(cpu, 0, 0, 0, 64); } /* * There is a bug in Linux 2.4 kernels: * if a decrementer exception is pending when it enables msr_ee at startup, * it's not ready to handle it... + * + * On machine reset, in this is called before icount is reset, so + * for icount-mode, setting TB registers using now=qemu_clock_get_ns + * results in them being skewed when icount does get reset. Use an + * explicit 0 to get a consistent reset state. */ - cpu_ppc_store_decr(env, -1); - cpu_ppc_store_hdecr(env, -1); - cpu_ppc_store_purr(env, 0x0000000000000000ULL); + _cpu_ppc_store_decr(cpu, 0, 0, -1, 64); + _cpu_ppc_store_purr(env, 0, 0); } void cpu_ppc_tb_free(CPUPPCState *env) From patchwork Mon Mar 18 15:46:20 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nicholas Piggin X-Patchwork-Id: 1913195 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20230601 header.b=j7/t1icY; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=patchwork.ozlabs.org) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4Tyzn574nyz23sH for ; Tue, 19 Mar 2024 02:49:29 +1100 (AEDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1rmFEN-0002l3-LF; Mon, 18 Mar 2024 11:48:55 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1rmFEL-0002dN-VE for qemu-devel@nongnu.org; Mon, 18 Mar 2024 11:48:53 -0400 Received: from mail-oa1-x2f.google.com ([2001:4860:4864:20::2f]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1rmFEG-00088I-0Q for qemu-devel@nongnu.org; Mon, 18 Mar 2024 11:48:53 -0400 Received: by mail-oa1-x2f.google.com with SMTP id 586e51a60fabf-2218da9620cso2995066fac.3 for ; Mon, 18 Mar 2024 08:48:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1710776926; x=1711381726; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=rTDQk3RLtHyV33kSQFz4v+nbGsPMffpe9d1g+nxXpFM=; b=j7/t1icY/4Cb2Kg7o3zh+kgsjyfUoQp3cql8OswMCZFoXA6rvwh+ro0NyJzDQekF2l HVWsr0VEboBgq87nht1CGgXnLwu2Gyl8g5J1iOPUGDavnrce/f/OwVzEMvLgxo0fp+YB WLjrnWmDMEGtHnALAOqQyZhM7/W6X51QG7dPS3LS8YqiRGSU7DJ3fvvmBAiIevMCQggU skNplnrFgYvDjl+0B+jLhQdfGyX5wsPP4C6BTFlA2DKkG7RsYdMfTMJxL9I+u5WAMcLK zXVTuGcgfytebM3IY+/L1B3U3NtLT8LFASg7kNIj/YZPYWUMasJiyRZqm1HaLEs6q3E6 zbjw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1710776926; x=1711381726; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=rTDQk3RLtHyV33kSQFz4v+nbGsPMffpe9d1g+nxXpFM=; b=v4CxuuxUJ2HD1AvVQTstr/XVYRLgiCMng9yetPwVexcnsee46wsEjP6azHKhVfVYWu eCCjLQyGY4rUUlBah1aObkfEYBwsywRlsKy+vSh2iDZWWicXlIjxB//fRaKAOYfqudSV m17hS5amR11YkwAVXtSQJ+lUwjvBsOA22FB4pqav7jPi9moZ1HQQVwgr9NUAxqcdLvYR v8yBHrt7ENiY/IpS0gliiZnkpGa2OwhaRrNkYfwaS9yQnDjB92umaIMq3X+m01yyoZAx Vj2KGbrGfbHN/yyCW/2gl6iurFliWty8s0YetlpTdthf59zC4KN/l2GJ0uTVxfk2egSa 44Nw== X-Gm-Message-State: AOJu0YwLgWHl8Q5w+yJkikIcRut0LfDaip5QlY2bwp7Yf9HJvMokiA8F 8gaV/1yfyPLWKeBJfEf6KWBRjuQhsKPKHUYtTCe0VSvMvoR8PUjtoIQoCLe38/g= X-Google-Smtp-Source: AGHT+IHI+iQgsh/X3sQCQ9HRsqIVXN7F0nx3/qr6+/YrX3pUAHYhGkS0o2C1PS9DEebe2jnFB25qXA== X-Received: by 2002:a05:6870:1ce:b0:21e:ed67:b0f5 with SMTP id n14-20020a05687001ce00b0021eed67b0f5mr13637667oad.53.1710776926163; Mon, 18 Mar 2024 08:48:46 -0700 (PDT) Received: from wheely.local0.net ([118.208.155.46]) by smtp.gmail.com with ESMTPSA id v22-20020a634816000000b005dc26144d96sm7332108pga.75.2024.03.18.08.48.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 18 Mar 2024 08:48:45 -0700 (PDT) From: Nicholas Piggin To: qemu-devel@nongnu.org Cc: Nicholas Piggin , Pavel Dovgalyuk , =?utf-8?q?Philippe_Mathieu-Dau?= =?utf-8?q?d=C3=A9?= , Richard Henderson , =?utf-8?q?Alex_Benn=C3=A9?= =?utf-8?q?e?= , Paolo Bonzini , John Snow , Cleber Rosa , Wainer dos Santos Moschetta , Beraldo Leal , Michael Tokarev Subject: [PATCH v5 23/24] spapr: Fix vpa dispatch count for record-replay Date: Tue, 19 Mar 2024 01:46:20 +1000 Message-ID: <20240318154621.2361161-24-npiggin@gmail.com> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20240318154621.2361161-1-npiggin@gmail.com> References: <20240318154621.2361161-1-npiggin@gmail.com> MIME-Version: 1.0 Received-SPF: pass client-ip=2001:4860:4864:20::2f; envelope-from=npiggin@gmail.com; helo=mail-oa1-x2f.google.com 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, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, T_SCC_BODY_TEXT_LINE=-0.01, T_SPF_TEMPERROR=0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org The dispatch count is a field in guest memory that the hypervisor increments when preempting and dispatching the guest. This was not being done deterministically with respect to icount, because tcg exec exit is not deterministic (e.g., an async event could cause it). Change vpa dispatch count increment to keep track of whether the vCPU is considered dispatched or not, and only consider it preempted when calling cede / confer / join / stop-self / etc. Signed-off-by: Nicholas Piggin --- include/hw/ppc/spapr_cpu_core.h | 3 +++ hw/ppc/spapr.c | 36 ++------------------------------- hw/ppc/spapr_hcall.c | 33 ++++++++++++++++++++++++++++++ hw/ppc/spapr_rtas.c | 1 + 4 files changed, 39 insertions(+), 34 deletions(-) diff --git a/include/hw/ppc/spapr_cpu_core.h b/include/hw/ppc/spapr_cpu_core.h index 69a52e39b8..5feb0ecc2a 100644 --- a/include/hw/ppc/spapr_cpu_core.h +++ b/include/hw/ppc/spapr_cpu_core.h @@ -47,6 +47,7 @@ typedef struct SpaprCpuState { uint64_t vpa_addr; uint64_t slb_shadow_addr, slb_shadow_size; uint64_t dtl_addr, dtl_size; + bool dispatched; /* for vpa dispatch counter tracking */ bool prod; /* not migrated, only used to improve dispatch latencies */ struct ICPState *icp; struct XiveTCTX *tctx; @@ -61,4 +62,6 @@ static inline SpaprCpuState *spapr_cpu_state(PowerPCCPU *cpu) return (SpaprCpuState *)cpu->machine_data; } +void vpa_dispatch(CPUState *cs, SpaprCpuState *spapr_cpu, bool dispatch); + #endif diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c index c417f9dd52..07b004fdec 100644 --- a/hw/ppc/spapr.c +++ b/hw/ppc/spapr.c @@ -4599,47 +4599,15 @@ static void spapr_cpu_exec_enter(PPCVirtualHypervisor *vhyp, PowerPCCPU *cpu) { SpaprCpuState *spapr_cpu = spapr_cpu_state(cpu); - /* These are only called by TCG, KVM maintains dispatch state */ - spapr_cpu->prod = false; - if (spapr_cpu->vpa_addr) { + if (!spapr_cpu->dispatched) { CPUState *cs = CPU(cpu); - uint32_t dispatch; - - dispatch = ldl_be_phys(cs->as, - spapr_cpu->vpa_addr + VPA_DISPATCH_COUNTER); - dispatch++; - if ((dispatch & 1) != 0) { - qemu_log_mask(LOG_GUEST_ERROR, - "VPA: incorrect dispatch counter value for " - "dispatched partition %u, correcting.\n", dispatch); - dispatch++; - } - stl_be_phys(cs->as, - spapr_cpu->vpa_addr + VPA_DISPATCH_COUNTER, dispatch); + vpa_dispatch(cs, spapr_cpu, true); } } static void spapr_cpu_exec_exit(PPCVirtualHypervisor *vhyp, PowerPCCPU *cpu) { - SpaprCpuState *spapr_cpu = spapr_cpu_state(cpu); - - if (spapr_cpu->vpa_addr) { - CPUState *cs = CPU(cpu); - uint32_t dispatch; - - dispatch = ldl_be_phys(cs->as, - spapr_cpu->vpa_addr + VPA_DISPATCH_COUNTER); - dispatch++; - if ((dispatch & 1) != 1) { - qemu_log_mask(LOG_GUEST_ERROR, - "VPA: incorrect dispatch counter value for " - "preempted partition %u, correcting.\n", dispatch); - dispatch++; - } - stl_be_phys(cs->as, - spapr_cpu->vpa_addr + VPA_DISPATCH_COUNTER, dispatch); - } } static void spapr_machine_class_init(ObjectClass *oc, void *data) diff --git a/hw/ppc/spapr_hcall.c b/hw/ppc/spapr_hcall.c index 5e1d020e3d..907e09c2c3 100644 --- a/hw/ppc/spapr_hcall.c +++ b/hw/ppc/spapr_hcall.c @@ -487,6 +487,36 @@ static target_ulong h_register_vpa(PowerPCCPU *cpu, SpaprMachineState *spapr, return ret; } +void vpa_dispatch(CPUState *cs, SpaprCpuState *spapr_cpu, bool dispatch) +{ + uint32_t counter; + + if (!dispatch) { + assert(spapr_cpu->dispatched); + } else { + assert(!spapr_cpu->dispatched); + } + spapr_cpu->dispatched = dispatch; + + return; + + if (!spapr_cpu->vpa_addr) { + return; + } + + /* These are only called by TCG, KVM maintains dispatch state */ + counter = ldl_be_phys(cs->as, spapr_cpu->vpa_addr + VPA_DISPATCH_COUNTER); + counter++; + if ((counter & 1) != dispatch) { + qemu_log_mask(LOG_GUEST_ERROR, + "VPA: incorrect dispatch counter value for " + "%s partition %u, correcting.\n", + dispatch ? "preempted" : "running", counter); + counter++; + } + stl_be_phys(cs->as, spapr_cpu->vpa_addr + VPA_DISPATCH_COUNTER, counter); +} + static target_ulong h_cede(PowerPCCPU *cpu, SpaprMachineState *spapr, target_ulong opcode, target_ulong *args) { @@ -505,6 +535,7 @@ static target_ulong h_cede(PowerPCCPU *cpu, SpaprMachineState *spapr, if (!cpu_has_work(cs)) { cs->halted = 1; + vpa_dispatch(cs, spapr_cpu, false); cs->exception_index = EXCP_HLT; cs->exit_request = 1; ppc_maybe_interrupt(env); @@ -531,6 +562,8 @@ static target_ulong h_confer_self(PowerPCCPU *cpu) cs->exit_request = 1; ppc_maybe_interrupt(&cpu->env); + vpa_dispatch(cs, spapr_cpu, false); + return H_SUCCESS; } diff --git a/hw/ppc/spapr_rtas.c b/hw/ppc/spapr_rtas.c index f329693c55..8ce4230223 100644 --- a/hw/ppc/spapr_rtas.c +++ b/hw/ppc/spapr_rtas.c @@ -216,6 +216,7 @@ static void rtas_stop_self(PowerPCCPU *cpu, SpaprMachineState *spapr, */ env->spr[SPR_PSSCR] |= PSSCR_EC; cs->halted = 1; + vpa_dispatch(cs, spapr_cpu_state(cpu), false); ppc_store_lpcr(cpu, env->spr[SPR_LPCR] & ~pcc->lpcr_pm); kvmppc_set_reg_ppc_online(cpu, 0); qemu_cpu_kick(cs); From patchwork Mon Mar 18 15:46:21 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nicholas Piggin X-Patchwork-Id: 1913194 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20230601 header.b=PwlFhFRa; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=patchwork.ozlabs.org) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4Tyzn52Js3z23sG for ; Tue, 19 Mar 2024 02:49:29 +1100 (AEDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1rmFEQ-00032x-Is; Mon, 18 Mar 2024 11:48:58 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1rmFEO-0002pd-KT for qemu-devel@nongnu.org; Mon, 18 Mar 2024 11:48:56 -0400 Received: from mail-oo1-xc36.google.com ([2607:f8b0:4864:20::c36]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1rmFEM-0008C4-1p for qemu-devel@nongnu.org; Mon, 18 Mar 2024 11:48:56 -0400 Received: by mail-oo1-xc36.google.com with SMTP id 006d021491bc7-5a128e202b6so1717181eaf.2 for ; Mon, 18 Mar 2024 08:48:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1710776932; x=1711381732; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=UqoDDKkP+GbOfzk7xNz1OzEz1n2vIN3Se8uMqMxNw8A=; b=PwlFhFRautb4/dSLLZ3x6LdiBuOnQfJRP/YGKTF7NrjrEaCZYXUdvWnSd15jCPC9TN Hq6V5Zi7yS7FIYHpabA3Qq5fFQC6Fl8WhCKlPt6D8UvoYR5734hYp0L9r40YenFPoHKF 1fJUjZQKv03GIFXk33flZ7cf9DtT22ducOEBtZabZKw8lehGXfQN1WqS5xcTGXJ+76nO 5wtgH47oOQKZB/xxXBH6GO3gej1EGcYhVIK7VtDbNDHKvyV61xc2UPaSM0Le0t588rU/ MZJB81LnevsnzL6LAN/LjYUgMMvrMfiN7VBbh5bHoM2OqgPjIxsLnLxNOrO5gnZ5cuF/ mEfA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1710776932; x=1711381732; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=UqoDDKkP+GbOfzk7xNz1OzEz1n2vIN3Se8uMqMxNw8A=; b=So1/P5KFLBLlzVqVqDwW78mpTE1nq8fyxqDYfW2Oc6Rvk29OpL9Ht9Z20kPQKUmOvT mKDy8pOkxOiDSFs8sjlAE3OhMuYz0WMHfOPtI0+sAu/AulhlLyX5dp0HX+ZMN3jL0468 Q1dlzpBp/yh89AUTYVtnezc4gzojlqI4OshwqTJI6STQlnPWxi7JXCSo6KpWSvFrdGuT Ibl6pgfG2ul93cdiwLMyw2afyOhLeVihfvAlhaBL3IFB35Hhcs9NopaCkOAaoh2Ex75Z sNXXWuyqZW/yb+CnjzCU93TX5v0FKg7mDVymLnfRZFCdCwASBHYU0Ed2Eje1G3QtzHWu yd3w== X-Gm-Message-State: AOJu0YyngBrVJpg3lffo2VT8KsiCTqmurv+dJV4Fi2eFPZ3sb0Hrj1sB LO7fSgW3KvvNF2ArKcISR4fiHqR10QhXrB0eetxOzNCqFrhM5HV13t4279glfz0= X-Google-Smtp-Source: AGHT+IEdUnAgVzoQO7p6ZHSWnEE/I/zlzFc90WHOj+y3XTxBGMP/hMRiJOWu02fYV64aHwtzjIfYLQ== X-Received: by 2002:a05:6358:5e81:b0:17e:6bfc:b31d with SMTP id z1-20020a0563585e8100b0017e6bfcb31dmr38736rwn.0.1710776932612; Mon, 18 Mar 2024 08:48:52 -0700 (PDT) Received: from wheely.local0.net ([118.208.155.46]) by smtp.gmail.com with ESMTPSA id v22-20020a634816000000b005dc26144d96sm7332108pga.75.2024.03.18.08.48.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 18 Mar 2024 08:48:52 -0700 (PDT) From: Nicholas Piggin To: qemu-devel@nongnu.org Cc: Nicholas Piggin , Pavel Dovgalyuk , =?utf-8?q?Philippe_Mathieu-Dau?= =?utf-8?q?d=C3=A9?= , Richard Henderson , =?utf-8?q?Alex_Benn=C3=A9?= =?utf-8?q?e?= , Paolo Bonzini , John Snow , Cleber Rosa , Wainer dos Santos Moschetta , Beraldo Leal , Michael Tokarev Subject: [PATCH v5 24/24] tests/avocado: replay_linux.py add ppc64 pseries test Date: Tue, 19 Mar 2024 01:46:21 +1000 Message-ID: <20240318154621.2361161-25-npiggin@gmail.com> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20240318154621.2361161-1-npiggin@gmail.com> References: <20240318154621.2361161-1-npiggin@gmail.com> MIME-Version: 1.0 Received-SPF: pass client-ip=2607:f8b0:4864:20::c36; envelope-from=npiggin@gmail.com; helo=mail-oo1-xc36.google.com 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, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Add a ppc64 pseries test. IO in SLOF is very slow when running in record-replay modes, so this test uses guestfish to extract the kernel and initrd and boot them directly, bypassing SLOF. Signed-off-by: Nicholas Piggin --- tests/avocado/replay_linux.py | 72 ++++++++++++++++++++++++++++++++++- 1 file changed, 71 insertions(+), 1 deletion(-) diff --git a/tests/avocado/replay_linux.py b/tests/avocado/replay_linux.py index b3b74a367c..565a600130 100644 --- a/tests/avocado/replay_linux.py +++ b/tests/avocado/replay_linux.py @@ -11,8 +11,9 @@ import os import logging import time +import subprocess -from avocado import skipUnless +from avocado import skipIf, skipUnless from avocado_qemu import BUILD_DIR from avocado.utils import cloudinit from avocado.utils import network @@ -55,6 +56,8 @@ def vm_add_disk(self, vm, path, id, device): '%s,drive=disk%s-rr%s' % (device, id, bus_string)) def vm_add_cdrom(self, vm, path, id, device): + vm.add_args('-device', + '%s,drive=disk%s' % (device, id)) vm.add_args('-drive', 'file=%s,id=disk%s,if=none,media=cdrom' % (path, id)) def launch_and_wait(self, record, args, shift): @@ -208,3 +211,70 @@ def test_virt_gicv3(self): self.run_rr(shift=3, args=(*self.get_common_args(), "-machine", "virt,gic-version=3")) + +# ppc64 pseries test. +# +# This machine tends to fail replay and hang very close to the end of the +# trace, with missing events, which is still an open issue. +# +# spapr-scsi IO driven by SLOF/grub is extremely slow in record/replay mode, +# so jump through some hoops to boot the kernel directly. With this, the test +# runs in about 5 minutes (modulo hang), which suggests other machines may +# have similar issues and could benefit from bypassing bootloaders. +# +ppc_deps = ["guestfish"] # dependent tools needed in the test setup/box. + +def which(tool): + """ looks up the full path for @tool, returns None if not found + or if @tool does not have executable permissions. + """ + paths=os.getenv('PATH') + for p in paths.split(os.path.pathsep): + p = os.path.join(p, tool) + if os.path.exists(p) and os.access(p, os.X_OK): + return p + return None + +def ppc_missing_deps(): + """ returns True if any of the test dependent tools are absent. + """ + for dep in ppc_deps: + if which(dep) is None: + return True + return False + +@skipUnless(os.getenv('SPEED') == 'slow', 'runtime limited') +class ReplayLinuxPPC64(ReplayLinux): + """ + :avocado: tags=arch:ppc64 + :avocado: tags=accel:tcg + """ + + hdd = 'virtio-blk-pci' + cd = 'scsi-cd' + bus = None + + def setUp(self): + super().setUp() + + if not ppc_missing_deps(): + # kernel, initramfs, and kernel cmdline are all taken by hand from + # the Fedora image. + self.kernel="vmlinuz-5.3.7-301.fc31.ppc64le" + self.initramfs="initramfs-5.3.7-301.fc31.ppc64le.img" + cmd = "guestfish --ro -a %s run " ": mount /dev/sda2 / " ": copy-out /boot/%s %s " ": copy-out /boot/%s %s " % (self.boot_path, self.kernel, self.workdir, self.initramfs, self.workdir) + subprocess.run(cmd.split()) + + @skipIf(ppc_missing_deps(), 'dependencies (%s) not installed' % ','.join(ppc_deps)) + def test_pseries(self): + """ + :avocado: tags=machine:pseries + """ + kernel=os.path.normpath(os.path.join(self.workdir, self.kernel)) + initramfs=os.path.normpath(os.path.join(self.workdir, self.initramfs)) + cmdline="root=UUID=8a409ee6-3cb3-4b06-a266-39e2dae3e5fa ro no_timer_check net.fnames=0 console=tty1 console=ttyS0,115200n8" + self.run_rr(shift=3, args=("-device", "spapr-vscsi", + "-machine", "x-vof=on", + "-kernel", kernel, + "-initrd", initramfs, + "-append", cmdline))