From patchwork Wed Jun 12 15:35:00 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Alex_Benn=C3=A9e?= X-Patchwork-Id: 13695202 Received: from mail-ej1-f47.google.com (mail-ej1-f47.google.com [209.85.218.47]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id ED60F1802CA for ; Wed, 12 Jun 2024 15:35:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.47 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1718206512; cv=none; b=qG+SrgBZ9v4/4nHWP/fVTpuBfch+TAFnQBITl3PkNnXXgrMLZb5myIYIGSxAkf3l9tPTSBCPzgoFl7qQo10zbIDSPJgDva4SdVDZx3QPPu1O4gSePMh56Y99xlVtnEMawIWoCZ/reFQJWPxftXFm242MvqojE+uFuYsxpRa4cf8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1718206512; c=relaxed/simple; bh=hhjtL1KZNh7s4H+vCr+InjMK7eqyjYHSrl0IyEe67G8=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version:Content-Type; b=gdM1thvDKIoDEsrI55vHoIpI7I/21T8Lc28VOUYnybN1eqYPTrN2CCDZgRmWKdtInPlmBoqjqwB2SF0sw6LHLVTCONy5G6tT8RVWmh8wMcJlunvma0E3veabowUaanWzE2yT2AA7azPb0KL/giy1nBgY6ZmXjz/X4KcPrBimhpo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=plXVGwHM; arc=none smtp.client-ip=209.85.218.47 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="plXVGwHM" Received: by mail-ej1-f47.google.com with SMTP id a640c23a62f3a-a6f11a2d18aso471466b.2 for ; Wed, 12 Jun 2024 08:35:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1718206509; x=1718811309; darn=vger.kernel.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=kJAQlF/zpzEh6ZUd/TIoqAhEJRcTvj1Vbf876k6aGf8=; b=plXVGwHM9vPlfNB4kCoBEhZkdoruX2eiBWdqn56i2XQAW/CMUZlGn7KR6g6j5IQQ4I 6sP38KM4vEUQYYW0OPWo2RIJjw47LfymM+ghgUraSvd2G4bZO3VTSzYUX4cyZPNV3a9q VXaDQnNN4srjZ+hfqLL/i/eG4F3VC4HuQmJlKJ3e6kUk1utA1PCJz354pKjY5uLh728M aS4gg6594udjomGzRwiw6EOPX5qPhoVupljCv+YnPrU1/CAFE+1LCc1z9NIIRGJ1+g9t Vf4VG5Ca2eBAdUAm1yzAXaUyZgy5Yhin+922tTdIQFXonjePj+E/glL/Q569obzOiuFK K/cA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1718206509; x=1718811309; 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=kJAQlF/zpzEh6ZUd/TIoqAhEJRcTvj1Vbf876k6aGf8=; b=Yq+wjlSVgkEoFGEXisAuHtabfJowBT9cTkg3zmg8GnqQaiq0cKC+wByhdSrmnR8A1c 83SD5CW8prMD/Das3uR8FMV0R28SfN5nUcYiXlphY/rPH3YjJYni+/wFT4h0LX0vzOUy K3rF6RQjJUUKTDMSjqARkszNmEmisId1lpfl1X/6/9V+AOfNuQ68ZP0hzU4Z1Iu7nuX9 Wv+tBYDvC/e3Zz4viHLM18BerRQGJNFkJjH9ymKLcFMtnDBLJznoWq1MLBgUvyTUvy0h x6kvgqv0pxM2w2fe0odAFNyERdxvitdY0yjDSMugDEAgM2RrhfvsXDwJKPRTR+B8lF3h MPVQ== X-Forwarded-Encrypted: i=1; AJvYcCVzpwj5mN8jX9+/n/eDMcOVAvf6qa3R0RTtneJhY+XC+P6W5wADGFZ9PXKwPygICD9Nfg9xAtAFxBCc/QBWimrUIUFk X-Gm-Message-State: AOJu0YxwRGzPoSlVQluNbwfE2ybo0NrK+YSGuXS/ytzbQWPE97cFnsIw rT8UUYzOR3P9cNDzEsf078n2/bmBZaJoLZ2CesK0Jrbsq8JrUzDEo/gkeF1zBW0= X-Google-Smtp-Source: AGHT+IEUiek7G0JZYXLhDU7k/lAdd2/r6kUwG039veuUiD6xxCOyuZljXlDyYhWaBzPy7woxoD/XUw== X-Received: by 2002:a17:906:898:b0:a6f:23b9:4e5f with SMTP id a640c23a62f3a-a6f4800a19emr122891766b.70.1718206509163; Wed, 12 Jun 2024 08:35:09 -0700 (PDT) Received: from draig.lan ([85.9.250.243]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-a6c805f9f3dsm910164966b.95.2024.06.12.08.35.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 12 Jun 2024 08:35:08 -0700 (PDT) Received: from draig.lan (localhost [IPv6:::1]) by draig.lan (Postfix) with ESMTP id 3A48F5F939; Wed, 12 Jun 2024 16:35:08 +0100 (BST) From: =?utf-8?q?Alex_Benn=C3=A9e?= To: qemu-devel@nongnu.org Cc: David Hildenbrand , Ilya Leoshkevich , Daniel Henrique Barboza , Marcelo Tosatti , Paolo Bonzini , Pierrick Bouvier , =?utf-8?q?Philippe_Mathieu-?= =?utf-8?q?Daud=C3=A9?= , Mark Burton , qemu-s390x@nongnu.org, Peter Maydell , kvm@vger.kernel.org, Laurent Vivier , Halil Pasic , Christian Borntraeger , Alexandre Iooss , qemu-arm@nongnu.org, Alexander Graf , Nicholas Piggin , =?utf-8?q?Alex_Benn=C3=A9e?= , Marco Liebel , Thomas Huth , Roman Bolshakov , qemu-ppc@nongnu.org, Mahmoud Mandour , Cameron Esfahani , Jamie Iles , "Dr. David Alan Gilbert" , Richard Henderson Subject: [PATCH 1/9] include/exec: add missing include guard comment Date: Wed, 12 Jun 2024 16:35:00 +0100 Message-Id: <20240612153508.1532940-2-alex.bennee@linaro.org> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20240612153508.1532940-1-alex.bennee@linaro.org> References: <20240612153508.1532940-1-alex.bennee@linaro.org> Precedence: bulk X-Mailing-List: kvm@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Signed-off-by: Alex Bennée Reviewed-by: Pierrick Bouvier --- include/exec/gdbstub.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/exec/gdbstub.h b/include/exec/gdbstub.h index eb14b91139..008a92198a 100644 --- a/include/exec/gdbstub.h +++ b/include/exec/gdbstub.h @@ -144,4 +144,4 @@ void gdb_set_stop_cpu(CPUState *cpu); /* in gdbstub-xml.c, generated by scripts/feature_to_c.py */ extern const GDBFeature gdb_static_features[]; -#endif +#endif /* GDBSTUB_H */ From patchwork Wed Jun 12 15:35:01 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Alex_Benn=C3=A9e?= X-Patchwork-Id: 13695204 Received: from mail-ed1-f45.google.com (mail-ed1-f45.google.com [209.85.208.45]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 376A51802CF for ; Wed, 12 Jun 2024 15:35:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.45 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1718206513; cv=none; b=Non6ZY6Ssc/F0ojcV3gHD4UGk2iANyHFZi0ZS4FYx1lnGz3JXl4xAvElm+LN3+VhDH1qWvmtF/IeQTHJu7Kbgo/dKHbCVFmz+l0gqWldc++OfVIgblgVCFrNu7mYF8MmAj7KeH6RTIZLmSCYozdaRVINHnPvTBzNMYujAaWRFd8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1718206513; c=relaxed/simple; bh=3c9FMNwJhtbTnUw1RldYkOZFlC7TgkN6n66QyDSqkUw=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version:Content-Type; b=XTCCXG1D9r8KAA9+Gu6fiVt4lCoMNzP1B8j3Tsgb4RzDnsZ8I0c9f91Y0v0rrtYxeAAemF4AUdoLNPc73FtP3dAD59lQcnzs6RPu2jYVpvYYxWSZHqgrpglQl2IGkgSDN48WS+Px8P8sWHRa0N+GDvcIlF6fPFvL5Gnx0PRnc5E= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=GdsMQ9k8; arc=none smtp.client-ip=209.85.208.45 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="GdsMQ9k8" Received: by mail-ed1-f45.google.com with SMTP id 4fb4d7f45d1cf-57cad452f8bso959239a12.2 for ; Wed, 12 Jun 2024 08:35:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1718206509; x=1718811309; darn=vger.kernel.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=1KVKwzv6PSKKY2fr+KeYYMd1xy6tDc4gIj3OlrlQ7yw=; b=GdsMQ9k8l1FFZcXftkXlFKkoFF9SzF7DcCtYCGGiU0l4q/XIz233RpGn8LcCtLswQI LYmV7pbET5cA1aQLdgMxpDoJDd1QSJXZmKyrutCDstIuOC2pUJWn9IQr7wf7xB4pcIUd 9xXPcjxEfOqYzL3gg9GOS0P10LcaFcXIQyxXCHdZt0zgmiplLlU6/ZhsR8pYtT9Kf+/X nh19cLQphD6U65johxAd76MqJ3PTEgHanJfan3/V9sPJJbzOohOEBBYpQMrWVkdvAc++ lJHxsSLggX5IwMOf2icuFIM07UaD6gwhBO/FYiLqnIZn1GYpkbrlSRnC0zzBfwozPWS+ mZlQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1718206509; x=1718811309; 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=1KVKwzv6PSKKY2fr+KeYYMd1xy6tDc4gIj3OlrlQ7yw=; b=jlb3o1Ijx3PaTqKJ1YNjw1a0LhEvGKcU2d9AxsaLViywO3b8XYJG6fFrH4GmE6qoqk fs0BEHF+MwLHMDM2jyXy8PAi00PGRBoEqHho4CPcQGi9Js4Mi4BHgT2ehtpHcNklTag3 Y5MN31+UhJpvOge2a3LlpAPNtetBBUSgbZWpSw95aUT4eVZNJzaJXpuNWTNZnZWYaOIZ TdH+Wa0KhotE0c4xgDjzWATsDjmvZ0F+s8O4rXmmM2brNFG6DYpfqKtxz1jsNWmsPnf6 eCqK+eAjo+eE/bJqe6z2iBdxgS9rggDa3oX620ycrZ4msAN9h94AIcQuZMHppyvC9iuV 5PHw== X-Forwarded-Encrypted: i=1; AJvYcCUqT0/mn9yxhBBB6ort+PGLukH6SRLVeAiUJsrU8xw3s6PLdHf+x+e/R1JN0Fg/uZCtmV7rnoCy71m54yuWMJY/6iod X-Gm-Message-State: AOJu0Yy8x0hYAHggCPvgHqgFTd/ghCBBUGY/3hGwZBKQWp0zp10EUShn Z0RHVLUreVDwYiawrYozmxvwrkbSEeIZk/Z24doEcAJO9+7kTTwY9dRrl5+0Zes= X-Google-Smtp-Source: AGHT+IHdD1zUvLC5libXDtJeYvV0M22MB4IFlxxI8NI0tRbpAFP6x9W6SyugUDKf6QoX0qd+4pE2SA== X-Received: by 2002:a50:d6dc:0:b0:57c:5b7a:87e7 with SMTP id 4fb4d7f45d1cf-57ca976c727mr1437158a12.14.1718206509408; Wed, 12 Jun 2024 08:35:09 -0700 (PDT) Received: from draig.lan ([85.9.250.243]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-57c8f3a0c33sm3824158a12.82.2024.06.12.08.35.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 12 Jun 2024 08:35:09 -0700 (PDT) Received: from draig.lan (localhost [IPv6:::1]) by draig.lan (Postfix) with ESMTP id 5FD225F93C; Wed, 12 Jun 2024 16:35:08 +0100 (BST) From: =?utf-8?q?Alex_Benn=C3=A9e?= To: qemu-devel@nongnu.org Cc: David Hildenbrand , Ilya Leoshkevich , Daniel Henrique Barboza , Marcelo Tosatti , Paolo Bonzini , Pierrick Bouvier , =?utf-8?q?Philippe_Mathieu-?= =?utf-8?q?Daud=C3=A9?= , Mark Burton , qemu-s390x@nongnu.org, Peter Maydell , kvm@vger.kernel.org, Laurent Vivier , Halil Pasic , Christian Borntraeger , Alexandre Iooss , qemu-arm@nongnu.org, Alexander Graf , Nicholas Piggin , =?utf-8?q?Alex_Benn=C3=A9e?= , Marco Liebel , Thomas Huth , Roman Bolshakov , qemu-ppc@nongnu.org, Mahmoud Mandour , Cameron Esfahani , Jamie Iles , "Dr. David Alan Gilbert" , Richard Henderson Subject: [PATCH 2/9] gdbstub: move enums into separate header Date: Wed, 12 Jun 2024 16:35:01 +0100 Message-Id: <20240612153508.1532940-3-alex.bennee@linaro.org> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20240612153508.1532940-1-alex.bennee@linaro.org> References: <20240612153508.1532940-1-alex.bennee@linaro.org> Precedence: bulk X-Mailing-List: kvm@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 This is an experiment to further reduce the amount we throw into the exec headers. It might not be as useful as I initially thought because just under half of the users also need gdbserver_start(). Signed-off-by: Alex Bennée Reviewed-by: Pierrick Bouvier --- include/exec/gdbstub.h | 9 --------- include/gdbstub/enums.h | 21 +++++++++++++++++++++ accel/hvf/hvf-accel-ops.c | 2 +- accel/kvm/kvm-all.c | 2 +- accel/tcg/tcg-accel-ops.c | 2 +- gdbstub/user.c | 1 + monitor/hmp-cmds.c | 3 ++- system/vl.c | 1 + target/arm/hvf/hvf.c | 2 +- target/arm/hyp_gdbstub.c | 2 +- target/arm/kvm.c | 2 +- target/i386/kvm/kvm.c | 2 +- target/ppc/kvm.c | 2 +- target/s390x/kvm/kvm.c | 2 +- 14 files changed, 34 insertions(+), 19 deletions(-) create mode 100644 include/gdbstub/enums.h diff --git a/include/exec/gdbstub.h b/include/exec/gdbstub.h index 008a92198a..1bd2c4ec2a 100644 --- a/include/exec/gdbstub.h +++ b/include/exec/gdbstub.h @@ -1,15 +1,6 @@ #ifndef GDBSTUB_H #define GDBSTUB_H -#define DEFAULT_GDBSTUB_PORT "1234" - -/* GDB breakpoint/watchpoint types */ -#define GDB_BREAKPOINT_SW 0 -#define GDB_BREAKPOINT_HW 1 -#define GDB_WATCHPOINT_WRITE 2 -#define GDB_WATCHPOINT_READ 3 -#define GDB_WATCHPOINT_ACCESS 4 - typedef struct GDBFeature { const char *xmlname; const char *xml; diff --git a/include/gdbstub/enums.h b/include/gdbstub/enums.h new file mode 100644 index 0000000000..c4d54a1d08 --- /dev/null +++ b/include/gdbstub/enums.h @@ -0,0 +1,21 @@ +/* + * gdbstub enums + * + * Copyright (c) 2024 Linaro Ltd + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#ifndef GDBSTUB_ENUMS_H +#define GDBSTUB_ENUMS_H + +#define DEFAULT_GDBSTUB_PORT "1234" + +/* GDB breakpoint/watchpoint types */ +#define GDB_BREAKPOINT_SW 0 +#define GDB_BREAKPOINT_HW 1 +#define GDB_WATCHPOINT_WRITE 2 +#define GDB_WATCHPOINT_READ 3 +#define GDB_WATCHPOINT_ACCESS 4 + +#endif /* GDBSTUB_ENUMS_H */ diff --git a/accel/hvf/hvf-accel-ops.c b/accel/hvf/hvf-accel-ops.c index b2a37a2229..ac08cfb9f3 100644 --- a/accel/hvf/hvf-accel-ops.c +++ b/accel/hvf/hvf-accel-ops.c @@ -52,7 +52,7 @@ #include "qemu/main-loop.h" #include "exec/address-spaces.h" #include "exec/exec-all.h" -#include "exec/gdbstub.h" +#include "gdbstub/enums.h" #include "sysemu/cpus.h" #include "sysemu/hvf.h" #include "sysemu/hvf_int.h" diff --git a/accel/kvm/kvm-all.c b/accel/kvm/kvm-all.c index 009b49de44..5680cd157e 100644 --- a/accel/kvm/kvm-all.c +++ b/accel/kvm/kvm-all.c @@ -27,7 +27,7 @@ #include "hw/pci/msi.h" #include "hw/pci/msix.h" #include "hw/s390x/adapter.h" -#include "exec/gdbstub.h" +#include "gdbstub/enums.h" #include "sysemu/kvm_int.h" #include "sysemu/runstate.h" #include "sysemu/cpus.h" diff --git a/accel/tcg/tcg-accel-ops.c b/accel/tcg/tcg-accel-ops.c index 1433e38f40..3c19e68a79 100644 --- a/accel/tcg/tcg-accel-ops.c +++ b/accel/tcg/tcg-accel-ops.c @@ -35,7 +35,7 @@ #include "exec/exec-all.h" #include "exec/hwaddr.h" #include "exec/tb-flush.h" -#include "exec/gdbstub.h" +#include "gdbstub/enums.h" #include "hw/core/cpu.h" diff --git a/gdbstub/user.c b/gdbstub/user.c index edeb72efeb..e34b58b407 100644 --- a/gdbstub/user.c +++ b/gdbstub/user.c @@ -18,6 +18,7 @@ #include "exec/gdbstub.h" #include "gdbstub/syscalls.h" #include "gdbstub/user.h" +#include "gdbstub/enums.h" #include "hw/core/cpu.h" #include "trace.h" #include "internals.h" diff --git a/monitor/hmp-cmds.c b/monitor/hmp-cmds.c index ea79148ee8..067152589b 100644 --- a/monitor/hmp-cmds.c +++ b/monitor/hmp-cmds.c @@ -15,8 +15,9 @@ #include "qemu/osdep.h" #include "exec/address-spaces.h" -#include "exec/gdbstub.h" #include "exec/ioport.h" +#include "exec/gdbstub.h" +#include "gdbstub/enums.h" #include "monitor/hmp.h" #include "qemu/help_option.h" #include "monitor/monitor-internal.h" diff --git a/system/vl.c b/system/vl.c index a3eede5fa5..cfcb674425 100644 --- a/system/vl.c +++ b/system/vl.c @@ -68,6 +68,7 @@ #include "sysemu/numa.h" #include "sysemu/hostmem.h" #include "exec/gdbstub.h" +#include "gdbstub/enums.h" #include "qemu/timer.h" #include "chardev/char.h" #include "qemu/bitmap.h" diff --git a/target/arm/hvf/hvf.c b/target/arm/hvf/hvf.c index 45e2218be5..ef9bc42738 100644 --- a/target/arm/hvf/hvf.c +++ b/target/arm/hvf/hvf.c @@ -33,7 +33,7 @@ #include "trace/trace-target_arm_hvf.h" #include "migration/vmstate.h" -#include "exec/gdbstub.h" +#include "gdbstub/enums.h" #define MDSCR_EL1_SS_SHIFT 0 #define MDSCR_EL1_MDE_SHIFT 15 diff --git a/target/arm/hyp_gdbstub.c b/target/arm/hyp_gdbstub.c index ebde2899cd..f120d55caa 100644 --- a/target/arm/hyp_gdbstub.c +++ b/target/arm/hyp_gdbstub.c @@ -12,7 +12,7 @@ #include "qemu/osdep.h" #include "cpu.h" #include "internals.h" -#include "exec/gdbstub.h" +#include "gdbstub/enums.h" /* Maximum and current break/watch point counts */ int max_hw_bps, max_hw_wps; diff --git a/target/arm/kvm.c b/target/arm/kvm.c index 7cf5cf31de..70f79eda33 100644 --- a/target/arm/kvm.c +++ b/target/arm/kvm.c @@ -31,7 +31,7 @@ #include "hw/pci/pci.h" #include "exec/memattrs.h" #include "exec/address-spaces.h" -#include "exec/gdbstub.h" +#include "gdbstub/enums.h" #include "hw/boards.h" #include "hw/irq.h" #include "qapi/visitor.h" diff --git a/target/i386/kvm/kvm.c b/target/i386/kvm/kvm.c index 912f5d5a6b..a666129f41 100644 --- a/target/i386/kvm/kvm.c +++ b/target/i386/kvm/kvm.c @@ -38,7 +38,7 @@ #include "hyperv.h" #include "hyperv-proto.h" -#include "exec/gdbstub.h" +#include "gdbstub/enums.h" #include "qemu/host-utils.h" #include "qemu/main-loop.h" #include "qemu/ratelimit.h" diff --git a/target/ppc/kvm.c b/target/ppc/kvm.c index 005f2239f3..2c3932200b 100644 --- a/target/ppc/kvm.c +++ b/target/ppc/kvm.c @@ -39,7 +39,7 @@ #include "migration/qemu-file-types.h" #include "sysemu/watchdog.h" #include "trace.h" -#include "exec/gdbstub.h" +#include "gdbstub/enums.h" #include "exec/memattrs.h" #include "exec/ram_addr.h" #include "sysemu/hostmem.h" diff --git a/target/s390x/kvm/kvm.c b/target/s390x/kvm/kvm.c index 1b494ecc20..94181d9281 100644 --- a/target/s390x/kvm/kvm.c +++ b/target/s390x/kvm/kvm.c @@ -40,7 +40,7 @@ #include "sysemu/hw_accel.h" #include "sysemu/runstate.h" #include "sysemu/device_tree.h" -#include "exec/gdbstub.h" +#include "gdbstub/enums.h" #include "exec/ram_addr.h" #include "trace.h" #include "hw/s390x/s390-pci-inst.h" From patchwork Wed Jun 12 15:35:02 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Alex_Benn=C3=A9e?= X-Patchwork-Id: 13695206 Received: from mail-ej1-f45.google.com (mail-ej1-f45.google.com [209.85.218.45]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7D698180A74 for ; Wed, 12 Jun 2024 15:35:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.45 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1718206515; cv=none; b=ZOJvKUdw8D0mOXen7TodZITo4SudRifT8LlVqAkIgkVkiyWuGuw+iSmAip8YFlqof9KWSY0+3m5TcV6auU9bH22AzOE8GcGfkPN39lGDcvv7rkggcaLoejA57CTD3gXTaC3xY7cAg+qRZ4DXBbVzosPvrgiHltEzrfPqvJ346qY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1718206515; c=relaxed/simple; bh=0M00rXsrO6MkSaLCtF/pVIWAbiHGBLpMU9mQ4Bs4H7I=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version:Content-Type; b=RvkOFeKy9Lsv3UHDh0pEzgXlDf0BiA1vsk2Y5snQrYKbFWaLDxiq/jvTsZtXb9+kirE3FapKK8AV8lYRUI6xcb/5dcTMnp3qqcWp1ZQEFYQPW0sKodYy2fkbPRn+Mv9gLLMit0fHgvSdPN3KRl9LnsuXB8AFYOiMsr0cNkL2OUc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=SnRqwwB+; arc=none smtp.client-ip=209.85.218.45 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="SnRqwwB+" Received: by mail-ej1-f45.google.com with SMTP id a640c23a62f3a-a62ef52e837so106466b.3 for ; Wed, 12 Jun 2024 08:35:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1718206512; x=1718811312; darn=vger.kernel.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=0UFHAsoemA/1ZyFVkieFp/Fehtdb65Sq2hGoqSQrpDk=; b=SnRqwwB+pVL2DthNgouwYjz6Aq+jGH36oaQKVyG1bihxbnYwqc+figjvj8TJhTDVoh wKPJT8XNYI19F1AUyD19AkTqEMPnvaULe+r5iCa3w+NOLxpiIAAGeYYcWmLFn9idEC/3 1GN+aTUbVAO8ZxIavKRkuX2Rh5zP4WppeHsMmjuRRmik3wGVhx9Fsxkn6SOsbgnP3v2e NKUei4t/UU5uAvlsIuzhp8tDq6hkeS0UV2djU/w39gpRU9jdt60/J3dgzTm6BXrQrYhp kbPZZ2dE+LuMV4CPPa4+ZuY7dpHVJQw4Djk0X60fpyvU8DXQvQfCw3ftY26eTzmfgvec bjtw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1718206512; x=1718811312; 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=0UFHAsoemA/1ZyFVkieFp/Fehtdb65Sq2hGoqSQrpDk=; b=pnBmgobt3HZ0eijrj5USh2TxH5YC4X9ov0t3Je+6fQwVkFW/M63styJ65Ja8fe0gKb OyhUHhdxHkaBLyfHgPjmrqKw9FULlZo4crRKppskui2g43VRd78OTulEq/CW+ECr2kRm S+WnVC7wq6LEW+cRig1QAweqvGTSF4s2N7Ds+cB7g3HML1fcHimwQ50jx1NTgWlJ06gV o76d246xPl58ZfrtdpRADhE/TWtHOa2XiRfUHDvIYPKJbZVEpAm2Z1r1zHblA9sm/6D2 B8ns+l9V7MJxZf8Loy2p9ldDDIZ7Da54Vauv/d/KRa4cIJqWY9X0eYeIYJp171ruhasQ ivdQ== X-Forwarded-Encrypted: i=1; AJvYcCXGbSSlVSF0rdbEG2S8E12kQvyIUgj2IRby082BdoMSzifZevPbYZjilXuC32w3qfnNZHY3ZbEZrToCRI6GHw+UHR+Q X-Gm-Message-State: AOJu0Ywe4RwRQt+dzUSw/iVvjQxxknu5WdhUwjIuowCIrcBjWNbQpyCU mN7HpTwlww7jrlFECUnPFh6pjzPKBMEogkVg4DhkLaNnVbqRv86jTQhn07eVfwM= X-Google-Smtp-Source: AGHT+IGNS2xktjqcOrTpVg66Qr2sh2nrR4+EQZaLWm4leOeKKyIa1XGx1bZYYSow5mTnEGpMAhUn6Q== X-Received: by 2002:a17:907:7756:b0:a6f:4f3f:e6d8 with SMTP id a640c23a62f3a-a6f4f3fe75emr48893466b.20.1718206511842; Wed, 12 Jun 2024 08:35:11 -0700 (PDT) Received: from draig.lan ([85.9.250.243]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-a6f2195a2a3sm370298966b.99.2024.06.12.08.35.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 12 Jun 2024 08:35:09 -0700 (PDT) Received: from draig.lan (localhost [IPv6:::1]) by draig.lan (Postfix) with ESMTP id 784465F93D; Wed, 12 Jun 2024 16:35:08 +0100 (BST) From: =?utf-8?q?Alex_Benn=C3=A9e?= To: qemu-devel@nongnu.org Cc: David Hildenbrand , Ilya Leoshkevich , Daniel Henrique Barboza , Marcelo Tosatti , Paolo Bonzini , Pierrick Bouvier , =?utf-8?q?Philippe_Mathieu-?= =?utf-8?q?Daud=C3=A9?= , Mark Burton , qemu-s390x@nongnu.org, Peter Maydell , kvm@vger.kernel.org, Laurent Vivier , Halil Pasic , Christian Borntraeger , Alexandre Iooss , qemu-arm@nongnu.org, Alexander Graf , Nicholas Piggin , =?utf-8?q?Alex_Benn=C3=A9e?= , Marco Liebel , Thomas Huth , Roman Bolshakov , qemu-ppc@nongnu.org, Mahmoud Mandour , Cameron Esfahani , Jamie Iles , "Dr. David Alan Gilbert" , Richard Henderson , Akihiko Odaki Subject: [PATCH 3/9] plugins: Ensure register handles are not NULL Date: Wed, 12 Jun 2024 16:35:02 +0100 Message-Id: <20240612153508.1532940-4-alex.bennee@linaro.org> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20240612153508.1532940-1-alex.bennee@linaro.org> References: <20240612153508.1532940-1-alex.bennee@linaro.org> Precedence: bulk X-Mailing-List: kvm@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 From: Akihiko Odaki Ensure register handles are not NULL so that a plugin can assume NULL is invalid as a register handle. Signed-off-by: Akihiko Odaki Message-Id: <20240229-null-v1-1-e716501d981e@daynix.com> Signed-off-by: Alex Bennée Reviewed-by: Pierrick Bouvier --- plugins/api.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/api.c b/plugins/api.c index 5a0a7f8c71..6bdb26bbe3 100644 --- a/plugins/api.c +++ b/plugins/api.c @@ -507,7 +507,7 @@ static GArray *create_register_handles(GArray *gdbstub_regs) } /* Create a record for the plugin */ - desc.handle = GINT_TO_POINTER(grd->gdb_reg); + desc.handle = GINT_TO_POINTER(grd->gdb_reg + 1); desc.name = g_intern_string(grd->name); desc.feature = g_intern_string(grd->feature_name); g_array_append_val(find_data, desc); @@ -528,7 +528,7 @@ int qemu_plugin_read_register(struct qemu_plugin_register *reg, GByteArray *buf) { g_assert(current_cpu); - return gdb_read_register(current_cpu, buf, GPOINTER_TO_INT(reg)); + return gdb_read_register(current_cpu, buf, GPOINTER_TO_INT(reg) - 1); } struct qemu_plugin_scoreboard *qemu_plugin_scoreboard_new(size_t element_size) From patchwork Wed Jun 12 15:35:03 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Alex_Benn=C3=A9e?= X-Patchwork-Id: 13695205 Received: from mail-ed1-f51.google.com (mail-ed1-f51.google.com [209.85.208.51]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 358E21802CE for ; Wed, 12 Jun 2024 15:35:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.51 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1718206514; cv=none; b=B/dtTWUGg6dq7BxwtNgSgNcppJovSBrr9NyZ5/ji6cm4m5JgmxxzTiSwqglIKAa5p2FkDBfZ54IRquLADunxaIZJleimEF3ks1eUxzxmSVle8cbX763dqjwyeX0g95GmERmUSv9odP+pc38vrt+BLaLuThkjC//3PkynOBzFmaA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1718206514; c=relaxed/simple; bh=Gp+mWVvr9wUgAmIqXusqFN5Gr9bo+FXiMQp7zjtc+2I=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version:Content-Type; b=E7mgfpnOjbPQxrcl3TneTuqqR0MnAlYE7DLZgw2xbGKaUdd9ZA6dSFmTEqZxArHDk/vToIkQcpq2fu32toqyrQHwuD7ddTdZ+TTJXjEEQca3GHhAqfHXsQgFshUswEyIu8vtWR9rCqF1twRNfK+AMk85TTGTlkd5fO724A+AekI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=LMsR1Dmp; arc=none smtp.client-ip=209.85.208.51 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="LMsR1Dmp" Received: by mail-ed1-f51.google.com with SMTP id 4fb4d7f45d1cf-57cad4475e0so1063556a12.1 for ; Wed, 12 Jun 2024 08:35:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1718206509; x=1718811309; darn=vger.kernel.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=dsboB6lxAe+MtT/jZcZKahSTlUXC5/PD/o+7xcfjrRg=; b=LMsR1Dmp3BLjf4yZXdYGbvxwKtQjCYIitb3eZm4GpXjc1Edjlu10hIklxR97WGk8qN SlO6qdmmSNWg4hcd7G8pmeLGbr8I+wmj/1TyCFGAPkY75WX7yHDJ3jwSN52JQrppgoCG Gpee4SMhsgrnhMrPJXLa3BJ3c65vdEEqJKQCb3TuTfcfDM6obWj/ZGtV5NE9GnudxITa jkzzTWxkXLGr2Y+WwrU6TLJgVNdRylZa4p9unkfkdH2UcAfX1cwdp539SIs0yAs4uZoC pg0RilLJzW1PSSQo6vj/tlNGXopAlB3A/TiN9qihVxGhl/SVYNEdVLwba7p7aM6S3BEe g+0w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1718206509; x=1718811309; 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=dsboB6lxAe+MtT/jZcZKahSTlUXC5/PD/o+7xcfjrRg=; b=dCKbUJSn4j1NlIYLizNBX5XCbve6oq7O6TQOqLNAhtvCl3IMqiROWE8SGhLyTpSDdy hNrStU5Mc+PN/NL4TP90Pob3SKKm1G/pyiVEsTn0dWYh6WBIs4Q/ELMSe0Z4WNs4fWOO tsr/CA8iOco+eC3OLZfWK19t4O7Iw4u8uZ4sVcUhsQkTtqx2Ne7Xxbk93om+2ZaokBrX Yf6PxYvDNK4Igz7mgDud11DQe0LAy1kT5SXqt8U4Vax8pKFlMJlDqvZ4P9G8LDRY5RMq rXqziu84qKnBfhSvUcSrXPp2PvxWqXVRWb/b3yS2Lt0c/JGsLK8SxmfjNFPI+fK5DF5Z Jqdg== X-Forwarded-Encrypted: i=1; AJvYcCUPbsvLBDlANAb60EOZ0HKkezSOCQWAatEXHqixsEyoC8Db68YJrE9mmY20RI7fRtFNJnkGyA2dcZr59UMexbKOIioG X-Gm-Message-State: AOJu0Yzav0e2A3xAU4I5ou2dv1qvAxK4luTrxX9rIQMXGLWmWXZDaDi4 kLFhdvc4p+XJ1ICtyYHy46D3rD7RutKhO3TtQaWcKwTUeDNPEEkl/JQtiGsSezY= X-Google-Smtp-Source: AGHT+IGsdtBPKwbZSHTfhU4XunHG/iE49yO4AX8fP+I2Sl9JpV6jgSRYC4qfT9uG5LgYQNMMgN9Q4w== X-Received: by 2002:a05:6402:1650:b0:57c:934f:4cae with SMTP id 4fb4d7f45d1cf-57cb4b99914mr28772a12.1.1718206509616; Wed, 12 Jun 2024 08:35:09 -0700 (PDT) Received: from draig.lan ([85.9.250.243]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-57c960e677asm2815309a12.62.2024.06.12.08.35.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 12 Jun 2024 08:35:09 -0700 (PDT) Received: from draig.lan (localhost [IPv6:::1]) by draig.lan (Postfix) with ESMTP id 93B765F93F; Wed, 12 Jun 2024 16:35:08 +0100 (BST) From: =?utf-8?q?Alex_Benn=C3=A9e?= To: qemu-devel@nongnu.org Cc: David Hildenbrand , Ilya Leoshkevich , Daniel Henrique Barboza , Marcelo Tosatti , Paolo Bonzini , Pierrick Bouvier , =?utf-8?q?Philippe_Mathieu-?= =?utf-8?q?Daud=C3=A9?= , Mark Burton , qemu-s390x@nongnu.org, Peter Maydell , kvm@vger.kernel.org, Laurent Vivier , Halil Pasic , Christian Borntraeger , Alexandre Iooss , qemu-arm@nongnu.org, Alexander Graf , Nicholas Piggin , =?utf-8?q?Alex_Benn=C3=A9e?= , Marco Liebel , Thomas Huth , Roman Bolshakov , qemu-ppc@nongnu.org, Mahmoud Mandour , Cameron Esfahani , Jamie Iles , "Dr. David Alan Gilbert" , Richard Henderson Subject: [PATCH 4/9] sysemu: add set_virtual_time to accel ops Date: Wed, 12 Jun 2024 16:35:03 +0100 Message-Id: <20240612153508.1532940-5-alex.bennee@linaro.org> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20240612153508.1532940-1-alex.bennee@linaro.org> References: <20240612153508.1532940-1-alex.bennee@linaro.org> Precedence: bulk X-Mailing-List: kvm@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 We are about to remove direct calls to individual accelerators for this information and will need a central point for plugins to hook into time changes. From: Alex Bennée Reviewed-by: Philippe Mathieu-Daudé Signed-off-by: Pierrick Bouvier Signed-off-by: Alex Bennée Message-Id: <20240530220610.1245424-2-pierrick.bouvier@linaro.org> --- include/sysemu/accel-ops.h | 18 +++++++++++++++++- include/sysemu/cpu-timers.h | 3 ++- ...et-virtual-clock.c => cpus-virtual-clock.c} | 5 +++++ system/cpus.c | 11 +++++++++++ stubs/meson.build | 2 +- 5 files changed, 36 insertions(+), 3 deletions(-) rename stubs/{cpus-get-virtual-clock.c => cpus-virtual-clock.c} (68%) diff --git a/include/sysemu/accel-ops.h b/include/sysemu/accel-ops.h index ef91fc28bb..a088672230 100644 --- a/include/sysemu/accel-ops.h +++ b/include/sysemu/accel-ops.h @@ -20,7 +20,12 @@ typedef struct AccelOpsClass AccelOpsClass; DECLARE_CLASS_CHECKERS(AccelOpsClass, ACCEL_OPS, TYPE_ACCEL_OPS) -/* cpus.c operations interface */ +/** + * struct AccelOpsClass - accelerator interfaces + * + * This structure is used to abstract accelerator differences from the + * core CPU code. Not all have to be implemented. + */ struct AccelOpsClass { /*< private >*/ ObjectClass parent_class; @@ -44,7 +49,18 @@ struct AccelOpsClass { void (*handle_interrupt)(CPUState *cpu, int mask); + /** + * @get_virtual_clock: fetch virtual clock + * @set_virtual_clock: set virtual clock + * + * These allow the timer subsystem to defer to the accelerator to + * fetch time. The set function is needed if the accelerator wants + * to track the changes to time as the timer is warped through + * various timer events. + */ int64_t (*get_virtual_clock)(void); + void (*set_virtual_clock)(int64_t time); + int64_t (*get_elapsed_ticks)(void); /* gdbstub hooks */ diff --git a/include/sysemu/cpu-timers.h b/include/sysemu/cpu-timers.h index d86738a378..7bfa960fbd 100644 --- a/include/sysemu/cpu-timers.h +++ b/include/sysemu/cpu-timers.h @@ -96,8 +96,9 @@ int64_t cpu_get_clock(void); void qemu_timer_notify_cb(void *opaque, QEMUClockType type); -/* get the VIRTUAL clock and VM elapsed ticks via the cpus accel interface */ +/* get/set VIRTUAL clock and VM elapsed ticks via the cpus accel interface */ int64_t cpus_get_virtual_clock(void); +void cpus_set_virtual_clock(int64_t new_time); int64_t cpus_get_elapsed_ticks(void); #endif /* SYSEMU_CPU_TIMERS_H */ diff --git a/stubs/cpus-get-virtual-clock.c b/stubs/cpus-virtual-clock.c similarity index 68% rename from stubs/cpus-get-virtual-clock.c rename to stubs/cpus-virtual-clock.c index fd447d53f3..af7c1a1d40 100644 --- a/stubs/cpus-get-virtual-clock.c +++ b/stubs/cpus-virtual-clock.c @@ -6,3 +6,8 @@ int64_t cpus_get_virtual_clock(void) { return cpu_get_clock(); } + +void cpus_set_virtual_clock(int64_t new_time) +{ + /* do nothing */ +} diff --git a/system/cpus.c b/system/cpus.c index f8fa78f33d..d3640c9503 100644 --- a/system/cpus.c +++ b/system/cpus.c @@ -229,6 +229,17 @@ int64_t cpus_get_virtual_clock(void) return cpu_get_clock(); } +/* + * Signal the new virtual time to the accelerator. This is only needed + * by accelerators that need to track the changes as we warp time. + */ +void cpus_set_virtual_clock(int64_t new_time) +{ + if (cpus_accel && cpus_accel->set_virtual_clock) { + cpus_accel->set_virtual_clock(new_time); + } +} + /* * return the time elapsed in VM between vm_start and vm_stop. Unless * icount is active, cpus_get_elapsed_ticks() uses units of the host CPU cycle diff --git a/stubs/meson.build b/stubs/meson.build index f15b48d01f..772a3e817d 100644 --- a/stubs/meson.build +++ b/stubs/meson.build @@ -29,7 +29,7 @@ endif if have_block or have_ga stub_ss.add(files('replay-tools.c')) # stubs for hooks in util/main-loop.c, util/async.c etc. - stub_ss.add(files('cpus-get-virtual-clock.c')) + stub_ss.add(files('cpus-virtual-clock.c')) stub_ss.add(files('icount.c')) stub_ss.add(files('graph-lock.c')) if linux_io_uring.found() From patchwork Wed Jun 12 15:35:04 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Alex_Benn=C3=A9e?= X-Patchwork-Id: 13695207 Received: from mail-ed1-f43.google.com (mail-ed1-f43.google.com [209.85.208.43]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 07A1B180A8D for ; Wed, 12 Jun 2024 15:35:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.43 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1718206516; cv=none; b=vF2v1zKy399J5rjv+H4hOesKmXYYILh1hEESskbqGVYD0x+MV/OGfN7V61jP6CQjl0P0w9SRjCIwPVRHQMN+bzV4xSiFLjczb2GJU/ztlkI6HKVrsqzwg6OTwg3zRcTSoBo6v6BepH4DE+fs7XpQnhixd/QW630saczvpns60u8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1718206516; c=relaxed/simple; bh=zMyxd/0cgt94CkKT8dAJw6AXCgBcWkEglxBAz0hwelI=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version:Content-Type; b=Exw3HaGa+e6rwNqAPM9PjDCrj4wAIu2VydFSkPeBakb6s4oCeJU2Xh3LKqTe/HJvryDMkY43YeWF2Hjg458egNA3IyXQQBz0pfIizrRWqikQ48a5NHln4QsFFlJZpMMKuv+9DLd00Q0y3izXFiA9WZxAi52iy0bJ2tSKkb9ZcgU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=ifLW4S3G; arc=none smtp.client-ip=209.85.208.43 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="ifLW4S3G" Received: by mail-ed1-f43.google.com with SMTP id 4fb4d7f45d1cf-57ca578ce8dso1811452a12.2 for ; Wed, 12 Jun 2024 08:35:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1718206512; x=1718811312; darn=vger.kernel.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=bRGnfZngJdWMgOcvZ7TtStbP9AmubDNWr9Hu5lfqXOc=; b=ifLW4S3G5v/KTH8XvaxwZthCyfcBy04stDG9PHhucv+kEr0mbOEEs7lpX6/NW5y+hy 1wnCIsbsy/h3wTaSRoQeY8RLSPYtzFxoiYM6N5MHZcgxIpJkiSO1n3FxCtoWwlp7fFE7 HHqNiXS/H3+eYSsnNYnbxFSxxqSazShVHaYHyju6ie1iUFKAt2bDbFfG59tLxYrnig7R EzV9kv0S4p/DjAWEM84QukEy/P1g+6Ean913GbvwaZb3AayXRR0Rd7+FnEo6sZ+oY3Kc ZJl9AwStt+tW3Vo1YiDL2GhP5n0JqrbEeQC9xpqAfeWC2VE5MBzkjTjyq+3Fz1uNQZOs 9w1A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1718206512; x=1718811312; 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=bRGnfZngJdWMgOcvZ7TtStbP9AmubDNWr9Hu5lfqXOc=; b=XdwaOwDH20LFTe9DYj3KZs3EVTl+EPF/cqtU5ZPy8EXB7EEwChHrF/1tvXHRPlcEvh /ptnRYckBN9gL9dFArSpMsQTx9bMNFie/1tv75Pz6KFji5/fSlLNyorXEjxx0nJYy2jy xN0eO2KVPjsdVKBD+MUQ0ZNHPKqXUFP8sPi6hTn9eozxnltBvfsK7HjOZtFNGc+9wC0t WqG/k0zdTGUrjWpyGNLUkRIjK2pNj+8nkxSzI8sH5wsBWjXCG5CIE1sT2NU+AuyIwQEi U10LvT5RnvZyKdwWGhqQ4luD/OPgLS7t/o8MBPUIgP2+CgoDFw897crlBTQcL109DD9M W/6Q== X-Forwarded-Encrypted: i=1; AJvYcCX3riLv9amSSTwIM2XxyVp8SMwB6GOlrteUBWv8DUWrkdpJETIg+ABxWwOlVUIER1x2drKaRsuA/iJAMBPxCabedLsv X-Gm-Message-State: AOJu0Yw5sEtXWq/U9Wn63kJC73wd7snY7yNmj9CNVSiFXoeDTsw0EupC ypKo8wC6ZMIltQVSPdaj8qnWubWKR8aVb8pbpsY79K49fFoNUi5ZkGxFco/gaV4= X-Google-Smtp-Source: AGHT+IF/BpQXHDn5YfyPcX+E8r0x84EhBJ4zarPCHSFnZEKPqMjMQ2e+1QuSimw3p+b7y7PH7HguhA== X-Received: by 2002:a50:aac8:0:b0:579:e6d1:d38b with SMTP id 4fb4d7f45d1cf-57ca97562b0mr1891081a12.2.1718206512236; Wed, 12 Jun 2024 08:35:12 -0700 (PDT) Received: from draig.lan ([85.9.250.243]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-57ca472956bsm1950484a12.29.2024.06.12.08.35.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 12 Jun 2024 08:35:11 -0700 (PDT) Received: from draig.lan (localhost [IPv6:::1]) by draig.lan (Postfix) with ESMTP id ABA8F5F944; Wed, 12 Jun 2024 16:35:08 +0100 (BST) From: =?utf-8?q?Alex_Benn=C3=A9e?= To: qemu-devel@nongnu.org Cc: David Hildenbrand , Ilya Leoshkevich , Daniel Henrique Barboza , Marcelo Tosatti , Paolo Bonzini , Pierrick Bouvier , =?utf-8?q?Philippe_Mathieu-?= =?utf-8?q?Daud=C3=A9?= , Mark Burton , qemu-s390x@nongnu.org, Peter Maydell , kvm@vger.kernel.org, Laurent Vivier , Halil Pasic , Christian Borntraeger , Alexandre Iooss , qemu-arm@nongnu.org, Alexander Graf , Nicholas Piggin , =?utf-8?q?Alex_Benn=C3=A9e?= , Marco Liebel , Thomas Huth , Roman Bolshakov , qemu-ppc@nongnu.org, Mahmoud Mandour , Cameron Esfahani , Jamie Iles , "Dr. David Alan Gilbert" , Richard Henderson Subject: [PATCH 5/9] qtest: use cpu interface in qtest_clock_warp Date: Wed, 12 Jun 2024 16:35:04 +0100 Message-Id: <20240612153508.1532940-6-alex.bennee@linaro.org> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20240612153508.1532940-1-alex.bennee@linaro.org> References: <20240612153508.1532940-1-alex.bennee@linaro.org> Precedence: bulk X-Mailing-List: kvm@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 This generalises the qtest_clock_warp code to use the AccelOps handlers for updating its own sense of time. This will make the next patch which moves the warp code closer to pure code motion. From: Alex Bennée Acked-by: Thomas Huth Signed-off-by: Pierrick Bouvier Signed-off-by: Alex Bennée Message-Id: <20240530220610.1245424-3-pierrick.bouvier@linaro.org> --- include/sysemu/qtest.h | 1 + accel/qtest/qtest.c | 1 + system/qtest.c | 6 +++--- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/include/sysemu/qtest.h b/include/sysemu/qtest.h index b5d5fd3463..45f3b7e1df 100644 --- a/include/sysemu/qtest.h +++ b/include/sysemu/qtest.h @@ -36,6 +36,7 @@ void qtest_server_set_send_handler(void (*send)(void *, const char *), void qtest_server_inproc_recv(void *opaque, const char *buf); int64_t qtest_get_virtual_clock(void); +void qtest_set_virtual_clock(int64_t count); #endif #endif diff --git a/accel/qtest/qtest.c b/accel/qtest/qtest.c index f6056ac836..53182e6c2a 100644 --- a/accel/qtest/qtest.c +++ b/accel/qtest/qtest.c @@ -52,6 +52,7 @@ static void qtest_accel_ops_class_init(ObjectClass *oc, void *data) ops->create_vcpu_thread = dummy_start_vcpu_thread; ops->get_virtual_clock = qtest_get_virtual_clock; + ops->set_virtual_clock = qtest_set_virtual_clock; }; static const TypeInfo qtest_accel_ops_type = { diff --git a/system/qtest.c b/system/qtest.c index 507a358f3b..5be66b0140 100644 --- a/system/qtest.c +++ b/system/qtest.c @@ -332,14 +332,14 @@ int64_t qtest_get_virtual_clock(void) return qatomic_read_i64(&qtest_clock_counter); } -static void qtest_set_virtual_clock(int64_t count) +void qtest_set_virtual_clock(int64_t count) { qatomic_set_i64(&qtest_clock_counter, count); } static void qtest_clock_warp(int64_t dest) { - int64_t clock = qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL); + int64_t clock = cpus_get_virtual_clock(); AioContext *aio_context; assert(qtest_enabled()); aio_context = qemu_get_aio_context(); @@ -348,7 +348,7 @@ static void qtest_clock_warp(int64_t dest) QEMU_TIMER_ATTR_ALL); int64_t warp = qemu_soonest_timeout(dest - clock, deadline); - qtest_set_virtual_clock(qtest_get_virtual_clock() + warp); + cpus_set_virtual_clock(cpus_get_virtual_clock() + warp); qemu_clock_run_timers(QEMU_CLOCK_VIRTUAL); timerlist_run_timers(aio_context->tlg.tl[QEMU_CLOCK_VIRTUAL]); From patchwork Wed Jun 12 15:35:05 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Alex_Benn=C3=A9e?= X-Patchwork-Id: 13695209 Received: from mail-ej1-f45.google.com (mail-ej1-f45.google.com [209.85.218.45]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id ECA4D1802CA for ; Wed, 12 Jun 2024 15:35:15 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.45 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1718206517; cv=none; b=Kmpvt0eoeO3PHDWpQ0EO25J2S11HY7o6SqF08NUIiiRLXAyAcuWCDUfRgUNEqeGAOa2Wg6ZV//rZNz3v4H/6gofm2NWOGbYdQBFvTOMGOWulbLnkvti+/wYLwNedxEijJs/AM+E7HEHBcwpgzASdZd9J0mWukaGu+wSgO8mxft8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1718206517; c=relaxed/simple; bh=6nj/eiLfkEnRxj7P6Pf8GrC7EJ3s0QoY7nWqirYXTAI=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version:Content-Type; b=BThqJibTH/+aAUuQjbdv0ZTMHUSbWb0aTCCeWlEzjcRuYsbTTJYYzB064WC/0IfQlzwU3Kmde1mO1fTw4imA3+CbDupbUthLutmKeRMCWK7fd5G7d60uKrifjjiUcef3WmTnUB/Rpxt6wfj68CktUjg/uTqyTrkkw7A2A+a58BI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=m7noZX1f; arc=none smtp.client-ip=209.85.218.45 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="m7noZX1f" Received: by mail-ej1-f45.google.com with SMTP id a640c23a62f3a-a62ef52e837so114766b.3 for ; Wed, 12 Jun 2024 08:35:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1718206514; x=1718811314; darn=vger.kernel.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=SXF7Z655MWVuCTh0vDHFDJ5r0Y06lB8CjThjsNdjBZI=; b=m7noZX1fHpp3/fJabU09C+6RTcuVOc92RbaXXx30UB7kdOVCMlFudgEv5ktXRYQCvw etAoDGos+hskDSteWoRsswm3ObReSY/YcWQyGwYoBUjcs0N/xxZYb2XfsXCbVyvpg1RH 5qgFmN4Ug4yz6WY45YDr4BBJCvPPv+iDRfKivQLVPp6IBIHWlKmM3yHXrNFzMTPcBJKH i6Za8BkHnu8f/vAuiZ0bZBVUgT6WNBHW9Hzp0hDMzvtO45tq10QhPXHT6UW6Y1WdjDKd GqugNPaPXC88AfngvjUebtn8GVeyg9+J8/cX33Ws6cECgsArgLz4Dlp1cSxofJZ2rb39 +wCQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1718206514; x=1718811314; 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=SXF7Z655MWVuCTh0vDHFDJ5r0Y06lB8CjThjsNdjBZI=; b=FCG3LHKZOYYKMb6FZFtx+xEODt3UX7KfYxGxJEkKakbUwPxgPzfkvueMlYTeFyyr80 qvy4YXTwHZhfxB+kX+8gEmkJyYXf3UyA7u+S5vd+DWLCE/oB3ruU3BeUHh4pQcb6zLxl nDp+q+CoiNwNvKeZAlYtxeixPcej33e+neKMr9rbonHAgjHkP7OXkbiIEjqHz8DU15RE WWajCU3DrMw5mNTYCFWxlwJpLMDQ/aKliikhXuKRA2T30v7TeTAHY99bveZ9L5lscWWK FNFW4NQSGiZB1x/Tebc8kYJJ6wXNtFQyZMFsmjAPvAhOxgzQZVXZkE6suHqhD9oJSNcy STWg== X-Forwarded-Encrypted: i=1; AJvYcCXnNtjqel7602EcJ53Apfr/0rQ1vXyWn6e37gi+fYbIaOkUJX7NCHUHsLCHAndkt7WHPj/Knru4jJIL5sqv55VnNMoS X-Gm-Message-State: AOJu0Yy249aplyM3CRtV6+E/hLy2JNySpr7Y9QGqDYE6vsomWAmxemIu nByYteaBGzIrxLkTSUKjX4IM7ejBT41EBUFoennq5910q7h2LiT1yfb606D0Um8= X-Google-Smtp-Source: AGHT+IGV0CaQWozdukxCOv9szzRwut8fzIQhJ0oT+uBW42XK2tCER+X14VH6Mef5wPkxmJ3eRDzSXA== X-Received: by 2002:a17:906:48c7:b0:a6f:4b5b:4ba7 with SMTP id a640c23a62f3a-a6f4b5b4c43mr115226566b.67.1718206514383; Wed, 12 Jun 2024 08:35:14 -0700 (PDT) Received: from draig.lan ([85.9.250.243]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-a6f0c410d31sm575607766b.73.2024.06.12.08.35.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 12 Jun 2024 08:35:11 -0700 (PDT) Received: from draig.lan (localhost [IPv6:::1]) by draig.lan (Postfix) with ESMTP id C62165FA1A; Wed, 12 Jun 2024 16:35:08 +0100 (BST) From: =?utf-8?q?Alex_Benn=C3=A9e?= To: qemu-devel@nongnu.org Cc: David Hildenbrand , Ilya Leoshkevich , Daniel Henrique Barboza , Marcelo Tosatti , Paolo Bonzini , Pierrick Bouvier , =?utf-8?q?Philippe_Mathieu-?= =?utf-8?q?Daud=C3=A9?= , Mark Burton , qemu-s390x@nongnu.org, Peter Maydell , kvm@vger.kernel.org, Laurent Vivier , Halil Pasic , Christian Borntraeger , Alexandre Iooss , qemu-arm@nongnu.org, Alexander Graf , Nicholas Piggin , =?utf-8?q?Alex_Benn=C3=A9e?= , Marco Liebel , Thomas Huth , Roman Bolshakov , qemu-ppc@nongnu.org, Mahmoud Mandour , Cameron Esfahani , Jamie Iles , "Dr. David Alan Gilbert" , Richard Henderson Subject: [PATCH 6/9] sysemu: generalise qtest_warp_clock as qemu_clock_advance_virtual_time Date: Wed, 12 Jun 2024 16:35:05 +0100 Message-Id: <20240612153508.1532940-7-alex.bennee@linaro.org> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20240612153508.1532940-1-alex.bennee@linaro.org> References: <20240612153508.1532940-1-alex.bennee@linaro.org> Precedence: bulk X-Mailing-List: kvm@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Move the key functionality of moving time forward into the clock sub-system itself. This will allow us to plumb in time control into plugins. From: Alex Bennée Signed-off-by: Pierrick Bouvier Signed-off-by: Alex Bennée Message-Id: <20240530220610.1245424-4-pierrick.bouvier@linaro.org> --- include/qemu/timer.h | 15 +++++++++++++++ system/qtest.c | 25 +++---------------------- util/qemu-timer.c | 26 ++++++++++++++++++++++++++ 3 files changed, 44 insertions(+), 22 deletions(-) diff --git a/include/qemu/timer.h b/include/qemu/timer.h index 9a366e551f..910587d829 100644 --- a/include/qemu/timer.h +++ b/include/qemu/timer.h @@ -245,6 +245,21 @@ bool qemu_clock_run_timers(QEMUClockType type); */ bool qemu_clock_run_all_timers(void); +/** + * qemu_clock_advance_virtual_time(): advance the virtual time tick + * @target: target time in nanoseconds + * + * This function is used where the control of the flow of time has + * been delegated to outside the clock subsystem (be it qtest, icount + * or some other external source). You can ask the clock system to + * return @early at the first expired timer. + * + * Time can only move forward, attempts to reverse time would lead to + * an error. + * + * Returns: new virtual time. + */ +int64_t qemu_clock_advance_virtual_time(int64_t dest); /* * QEMUTimerList diff --git a/system/qtest.c b/system/qtest.c index 5be66b0140..8cb98966b4 100644 --- a/system/qtest.c +++ b/system/qtest.c @@ -337,26 +337,6 @@ void qtest_set_virtual_clock(int64_t count) qatomic_set_i64(&qtest_clock_counter, count); } -static void qtest_clock_warp(int64_t dest) -{ - int64_t clock = cpus_get_virtual_clock(); - AioContext *aio_context; - assert(qtest_enabled()); - aio_context = qemu_get_aio_context(); - while (clock < dest) { - int64_t deadline = qemu_clock_deadline_ns_all(QEMU_CLOCK_VIRTUAL, - QEMU_TIMER_ATTR_ALL); - int64_t warp = qemu_soonest_timeout(dest - clock, deadline); - - cpus_set_virtual_clock(cpus_get_virtual_clock() + warp); - - qemu_clock_run_timers(QEMU_CLOCK_VIRTUAL); - timerlist_run_timers(aio_context->tlg.tl[QEMU_CLOCK_VIRTUAL]); - clock = qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL); - } - qemu_clock_notify(QEMU_CLOCK_VIRTUAL); -} - static bool (*process_command_cb)(CharBackend *chr, gchar **words); void qtest_set_command_cb(bool (*pc_cb)(CharBackend *chr, gchar **words)) @@ -751,7 +731,8 @@ static void qtest_process_command(CharBackend *chr, gchar **words) ns = qemu_clock_deadline_ns_all(QEMU_CLOCK_VIRTUAL, QEMU_TIMER_ATTR_ALL); } - qtest_clock_warp(qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL) + ns); + qemu_clock_advance_virtual_time( + qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL) + ns); qtest_send_prefix(chr); qtest_sendf(chr, "OK %"PRIi64"\n", (int64_t)qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL)); @@ -777,7 +758,7 @@ static void qtest_process_command(CharBackend *chr, gchar **words) g_assert(words[1]); ret = qemu_strtoi64(words[1], NULL, 0, &ns); g_assert(ret == 0); - qtest_clock_warp(ns); + qemu_clock_advance_virtual_time(ns); qtest_send_prefix(chr); qtest_sendf(chr, "OK %"PRIi64"\n", (int64_t)qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL)); diff --git a/util/qemu-timer.c b/util/qemu-timer.c index 6a0de33dd2..213114be68 100644 --- a/util/qemu-timer.c +++ b/util/qemu-timer.c @@ -645,6 +645,11 @@ int64_t qemu_clock_get_ns(QEMUClockType type) } } +static void qemu_virtual_clock_set_ns(int64_t time) +{ + return cpus_set_virtual_clock(time); +} + void init_clocks(QEMUTimerListNotifyCB *notify_cb) { QEMUClockType type; @@ -675,3 +680,24 @@ bool qemu_clock_run_all_timers(void) return progress; } + +int64_t qemu_clock_advance_virtual_time(int64_t dest) +{ + int64_t clock = qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL); + AioContext *aio_context; + aio_context = qemu_get_aio_context(); + while (clock < dest) { + int64_t deadline = qemu_clock_deadline_ns_all(QEMU_CLOCK_VIRTUAL, + QEMU_TIMER_ATTR_ALL); + int64_t warp = qemu_soonest_timeout(dest - clock, deadline); + + qemu_virtual_clock_set_ns(qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL) + warp); + + qemu_clock_run_timers(QEMU_CLOCK_VIRTUAL); + timerlist_run_timers(aio_context->tlg.tl[QEMU_CLOCK_VIRTUAL]); + clock = qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL); + } + qemu_clock_notify(QEMU_CLOCK_VIRTUAL); + + return clock; +} From patchwork Wed Jun 12 15:35:06 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Alex_Benn=C3=A9e?= X-Patchwork-Id: 13695208 Received: from mail-ed1-f48.google.com (mail-ed1-f48.google.com [209.85.208.48]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0539E180A9B for ; Wed, 12 Jun 2024 15:35:14 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.48 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1718206516; cv=none; b=JbBu4k71PhehU1HU/6fhDCTrqTSD64I4iA+KkdKurDM6kyBryuQ50JXwQ2KKenKzVWP8y8onc5U4BDHiW/H/hL7HtYn/21G5dnvxzd2FVW4XXPOwraazK5nK+I5TKk5jPpJdXWDEa/j1Ba4XAG9bc2hWO4WShuXgeCu/nRXi+RU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1718206516; c=relaxed/simple; bh=jmtIKePhQcjj1EOi2/U3yq7fxT7nUM+IOtIIQSVIq5o=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version:Content-Type; b=UMrmsV/y4XPGqf1MjbrSYdj1b2IdPvwTVX/unT9Tb5oCG3ETybqbDTzWFfFYqBzFVB/5Q6bei28XiF1WjSevd/NNEAgkfLWe9bUYaMyLM/1LgTkmRHjISFq15Dy6MiBD/sZAwVOsgz9chFZt3nVshbECgwo2Xt5IxwEpJOMdVx0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=Ieevseac; arc=none smtp.client-ip=209.85.208.48 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="Ieevseac" Received: by mail-ed1-f48.google.com with SMTP id 4fb4d7f45d1cf-572c65cea55so1728059a12.0 for ; Wed, 12 Jun 2024 08:35:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1718206513; x=1718811313; darn=vger.kernel.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=a0NIpkhyGGYgnbxSmBPfzzcGZB9GrmkEzQVe5cCnoVc=; b=IeevseacMlTK3FwgI+zwjBrraJxgr5eZqoCRzNs98BWRE2e5Z2cLOV6m7Ytz1QL7lO TxsK7/C5W+LdOKb0cATM6ijmFNSzesEZSjUdxL1GzlnogC+o4AYDsy7SZKAnjFE5cwA9 x4pURL9rsIHwvE82DaOKk4aT+HdSiG9jcbifhg7HFJgtJX9kg7onIdNehrRTxHqFHOlu 8QJtf17Us/y0oOyLCQlVtBqz5UpU3djaPG/koCJcdod5aYOWixiQEVUrW5dT4jYVu/1J stVfsloytitZR4M/Imojokb1SAJ+/BT58trmlZLHtlJagyv1/te9VScZ4MQ9wWmjJCHw QevA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1718206513; x=1718811313; 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=a0NIpkhyGGYgnbxSmBPfzzcGZB9GrmkEzQVe5cCnoVc=; b=m+GJQhUgs466Q8RAe3Fko3/itfhIXr0Li3Qe434HabGNSEyN3UzCgjCm6qBDA6bTIZ jnvG0qoRg/EU/VzfDdfodjLJXgpgS95HMHiimfhPZayUx61Aql5ghDLWxwSwJ9OvBKAn SAk6wODSDSgNrEBOgxGyMBCmYgk8pqXLXp0niGb2oRixqasxR73M5DZteG6HYMs/VxZC CH2WDD8nrTvaV+JqkYxuTVpsTYUSsqjEzxEeaxQanVt9rXVE+RgVC/jN2vJ3dlWZ4skN f0NI6ieUhdStkrVH4SDJa/SBm237FovwRSOdFKIOi7MYevZOIMvXKUSKsg8i+rbCzB2f LmPQ== X-Forwarded-Encrypted: i=1; AJvYcCXAtVV9bp5oRkVw54Uc1TCVxV+qKXuMBEG3NRCTsfF62Uyu2jrrnubRNDs//NLLtDh7Vkc28DPkWiZJkAZjTaIBABjh X-Gm-Message-State: AOJu0YzbJiMVL1PEm2XNsWD2h1yw5TfQ2oUaEHwiFi5MGgtXZnDt4umb 5fYkWb47nw20tlFNgrJHG+hpXe9Ygug5q/gjzBc0jVORYM4cYIwqSaPc+GWdmfM= X-Google-Smtp-Source: AGHT+IHiw9ywaeCwe00VTJSJ8JkM2YVfCIcQrjCS/i3yRBDrnPHhfF6suexbyfgKr6PBW9GlUolKmQ== X-Received: by 2002:a05:6402:703:b0:57c:537a:49c5 with SMTP id 4fb4d7f45d1cf-57cb4c17f24mr6294a12.18.1718206513407; Wed, 12 Jun 2024 08:35:13 -0700 (PDT) Received: from draig.lan ([85.9.250.243]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-57c855b959bsm5045481a12.38.2024.06.12.08.35.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 12 Jun 2024 08:35:11 -0700 (PDT) Received: from draig.lan (localhost [IPv6:::1]) by draig.lan (Postfix) with ESMTP id DE76D5FA1B; Wed, 12 Jun 2024 16:35:08 +0100 (BST) From: =?utf-8?q?Alex_Benn=C3=A9e?= To: qemu-devel@nongnu.org Cc: David Hildenbrand , Ilya Leoshkevich , Daniel Henrique Barboza , Marcelo Tosatti , Paolo Bonzini , Pierrick Bouvier , =?utf-8?q?Philippe_Mathieu-?= =?utf-8?q?Daud=C3=A9?= , Mark Burton , qemu-s390x@nongnu.org, Peter Maydell , kvm@vger.kernel.org, Laurent Vivier , Halil Pasic , Christian Borntraeger , Alexandre Iooss , qemu-arm@nongnu.org, Alexander Graf , Nicholas Piggin , =?utf-8?q?Alex_Benn=C3=A9e?= , Marco Liebel , Thomas Huth , Roman Bolshakov , qemu-ppc@nongnu.org, Mahmoud Mandour , Cameron Esfahani , Jamie Iles , "Dr. David Alan Gilbert" , Richard Henderson Subject: [PATCH 7/9] qtest: move qtest_{get, set}_virtual_clock to accel/qtest/qtest.c Date: Wed, 12 Jun 2024 16:35:06 +0100 Message-Id: <20240612153508.1532940-8-alex.bennee@linaro.org> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20240612153508.1532940-1-alex.bennee@linaro.org> References: <20240612153508.1532940-1-alex.bennee@linaro.org> Precedence: bulk X-Mailing-List: kvm@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 From: Pierrick Bouvier Signed-off-by: Pierrick Bouvier Reviewed-by: Philippe Mathieu-Daudé Message-Id: <20240530220610.1245424-5-pierrick.bouvier@linaro.org> --- include/sysemu/qtest.h | 3 --- accel/qtest/qtest.c | 12 ++++++++++++ system/qtest.c | 12 ------------ 3 files changed, 12 insertions(+), 15 deletions(-) diff --git a/include/sysemu/qtest.h b/include/sysemu/qtest.h index 45f3b7e1df..c161d75165 100644 --- a/include/sysemu/qtest.h +++ b/include/sysemu/qtest.h @@ -34,9 +34,6 @@ void qtest_server_init(const char *qtest_chrdev, const char *qtest_log, Error ** void qtest_server_set_send_handler(void (*send)(void *, const char *), void *opaque); void qtest_server_inproc_recv(void *opaque, const char *buf); - -int64_t qtest_get_virtual_clock(void); -void qtest_set_virtual_clock(int64_t count); #endif #endif diff --git a/accel/qtest/qtest.c b/accel/qtest/qtest.c index 53182e6c2a..bf14032d29 100644 --- a/accel/qtest/qtest.c +++ b/accel/qtest/qtest.c @@ -24,6 +24,18 @@ #include "qemu/main-loop.h" #include "hw/core/cpu.h" +static int64_t qtest_clock_counter; + +static int64_t qtest_get_virtual_clock(void) +{ + return qatomic_read_i64(&qtest_clock_counter); +} + +static void qtest_set_virtual_clock(int64_t count) +{ + qatomic_set_i64(&qtest_clock_counter, count); +} + static int qtest_init_accel(MachineState *ms) { return 0; diff --git a/system/qtest.c b/system/qtest.c index 8cb98966b4..12703a2045 100644 --- a/system/qtest.c +++ b/system/qtest.c @@ -325,18 +325,6 @@ static void qtest_irq_handler(void *opaque, int n, int level) } } -static int64_t qtest_clock_counter; - -int64_t qtest_get_virtual_clock(void) -{ - return qatomic_read_i64(&qtest_clock_counter); -} - -void qtest_set_virtual_clock(int64_t count) -{ - qatomic_set_i64(&qtest_clock_counter, count); -} - static bool (*process_command_cb)(CharBackend *chr, gchar **words); void qtest_set_command_cb(bool (*pc_cb)(CharBackend *chr, gchar **words)) From patchwork Wed Jun 12 15:35:07 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Alex_Benn=C3=A9e?= X-Patchwork-Id: 13695210 Received: from mail-ej1-f52.google.com (mail-ej1-f52.google.com [209.85.218.52]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 58302181314 for ; Wed, 12 Jun 2024 15:35:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.52 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1718206518; cv=none; b=jKJvwhe8fRgPP07YE7t9KYi8me85FKrPQcnLaKXMZzu63x0kUGsbIIhp06zfpWRYynArZTgRH0jJIFT7+3sp7t2MINQAvl9fFDsLsU2wtHRr0F96ECVscUu6jnrXMFYXrpDAW12dy3BBKhCI50fOB9RrHH8q29UKDbTgBe20LMc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1718206518; c=relaxed/simple; bh=v6jTYS7suBdtKFPEcX7pwBI66grzMGWJFDb1+VH63jg=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version:Content-Type; b=iDkCq4m3U7/P5nWx6p/qqKmJTg0LKQ24pzV6RcPNVeI2k99+V4boJcWbczQiDrEw8iGd4e/E+r9TnYrrPKvQWB7UN9+9DcxrilkgHukN93sAZL+ytl6+8OPFw0VzbghXNeyeXXtMVTxTzyAp+/CV3jz7wGXrvF2y8mlz7rUOrIE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=xv0+eCSD; arc=none smtp.client-ip=209.85.218.52 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="xv0+eCSD" Received: by mail-ej1-f52.google.com with SMTP id a640c23a62f3a-a6ef8bf500dso2915966b.0 for ; Wed, 12 Jun 2024 08:35:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1718206514; x=1718811314; darn=vger.kernel.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=PGoQj4qpl5RhrrC1ARvmO5/75amh4ElfKsyRGTMZr6o=; b=xv0+eCSDr7fjDdq+tStm9SVdfMCqVkFKbQyC0fk1oEC7gkYvabxhQtwl1jt94hI2eY HJOEGGGxEkS3wmpymDqA/81nVZqdQtGDPqN/XDIAyZbUTW1HXNNfDhLesJ9dPhV6POea dULPZ67cmR3yyncJvgjKq5g4Hc1gUNnr3e9DE/B/+SY9ppEIzUoQCOmdZjF4CeJrjam7 RMyaoQ/ea3H0SAqBXbyXkGBjtZ1AY+nqsbs9ZzrB4jz2p1d0+mvfYHEMyejpUD1NtFS9 aCzcDgNfT3G3jNB5IpfuaRlAc0w1kq4T9zPQ2bNzWrZ7AlDNsC9e7CXeZ+MsFl5GcTaC SJpA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1718206514; x=1718811314; 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=PGoQj4qpl5RhrrC1ARvmO5/75amh4ElfKsyRGTMZr6o=; b=MIP9Pkk2cEooV3sXZZFvUZbcDRXgfrH03mqpk7Hw+NwlIeHQAF68acqoSBFEvRIHeR PT7rtS550PQaSSfo0l95zvH5orB7yfwNV0XyBV5oSQHALcQot/fA6XrZpHrzYQ1d3+pb e/lqWUypjGAeaynYP7Hvs5z1AWAyWBIzHElUvY8NpPP6oY/xMEktK3HogiEcOphKUtYY jidFd/BIg+mxCDkZUK6Hf2UNrZCEQilsVBXcS42tydF2ZWOh8G5ejTzUT4cEXPVb1A8/ tXE0Upn4xLRSnuS9Gj3WX/t3j0+C56VGRogF3MwWmVFkrUzAJzjVrSNPWlH5VjSbYLBQ fUoQ== X-Forwarded-Encrypted: i=1; AJvYcCU7IxJrMZCp7sWAu+CDuYeFAPqd71zBM1s2NqKdwJcmugea9cSCpf1V0IFqaRWmD4HtdHmQTbqHBXQK8EwzG6RX0Q5m X-Gm-Message-State: AOJu0YwI7ypMVg4YnHHBkuMCjJDkzHqIIMtCYRoSmKR5fAFai4larGx+ dd0xWROaJJzLXEcO9bKlKFyHwoablhAd7yhq+BIwSDi6khj7mIuYlDvUmm+Ktk0= X-Google-Smtp-Source: AGHT+IG76EZWKhE5JO485CIAo85rC8bVxkvHDRmTHqUcDo+WGQuLSBgGHbJmn17mBFIkxNNff3ckGA== X-Received: by 2002:a17:906:7311:b0:a6f:4b46:dbb4 with SMTP id a640c23a62f3a-a6f4b46dd46mr128087966b.62.1718206514616; Wed, 12 Jun 2024 08:35:14 -0700 (PDT) Received: from draig.lan ([85.9.250.243]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-a6ef669bea6sm676540366b.153.2024.06.12.08.35.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 12 Jun 2024 08:35:11 -0700 (PDT) Received: from draig.lan (localhost [IPv6:::1]) by draig.lan (Postfix) with ESMTP id 059CA5FA1C; Wed, 12 Jun 2024 16:35:09 +0100 (BST) From: =?utf-8?q?Alex_Benn=C3=A9e?= To: qemu-devel@nongnu.org Cc: David Hildenbrand , Ilya Leoshkevich , Daniel Henrique Barboza , Marcelo Tosatti , Paolo Bonzini , Pierrick Bouvier , =?utf-8?q?Philippe_Mathieu-?= =?utf-8?q?Daud=C3=A9?= , Mark Burton , qemu-s390x@nongnu.org, Peter Maydell , kvm@vger.kernel.org, Laurent Vivier , Halil Pasic , Christian Borntraeger , Alexandre Iooss , qemu-arm@nongnu.org, Alexander Graf , Nicholas Piggin , =?utf-8?q?Alex_Benn=C3=A9e?= , Marco Liebel , Thomas Huth , Roman Bolshakov , qemu-ppc@nongnu.org, Mahmoud Mandour , Cameron Esfahani , Jamie Iles , "Dr. David Alan Gilbert" , Richard Henderson Subject: [PATCH 8/9] plugins: add time control API Date: Wed, 12 Jun 2024 16:35:07 +0100 Message-Id: <20240612153508.1532940-9-alex.bennee@linaro.org> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20240612153508.1532940-1-alex.bennee@linaro.org> References: <20240612153508.1532940-1-alex.bennee@linaro.org> Precedence: bulk X-Mailing-List: kvm@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Expose the ability to control time through the plugin API. Only one plugin can control time so it has to request control when loaded. There are probably more corner cases to catch here. From: Alex Bennée Signed-off-by: Pierrick Bouvier [AJB: tweaked user-mode handling] Signed-off-by: Alex Bennée Message-Id: <20240530220610.1245424-6-pierrick.bouvier@linaro.org> --- plugins/next - make qemu_plugin_update_ns a NOP in user-mode --- include/qemu/qemu-plugin.h | 25 +++++++++++++++++++++++++ plugins/api.c | 35 +++++++++++++++++++++++++++++++++++ plugins/qemu-plugins.symbols | 2 ++ 3 files changed, 62 insertions(+) diff --git a/include/qemu/qemu-plugin.h b/include/qemu/qemu-plugin.h index 95703d8fec..db4d67529e 100644 --- a/include/qemu/qemu-plugin.h +++ b/include/qemu/qemu-plugin.h @@ -661,6 +661,31 @@ void qemu_plugin_register_vcpu_mem_inline_per_vcpu( qemu_plugin_u64 entry, uint64_t imm); +/** + * qemu_plugin_request_time_control() - request the ability to control time + * + * This grants the plugin the ability to control system time. Only one + * plugin can control time so if multiple plugins request the ability + * all but the first will fail. + * + * Returns an opaque handle or NULL if fails + */ +const void *qemu_plugin_request_time_control(void); + +/** + * qemu_plugin_update_ns() - update system emulation time + * @handle: opaque handle returned by qemu_plugin_request_time_control() + * @time: time in nanoseconds + * + * This allows an appropriately authorised plugin (i.e. holding the + * time control handle) to move system time forward to @time. For + * user-mode emulation the time is not changed by this as all reported + * time comes from the host kernel. + * + * Start time is 0. + */ +void qemu_plugin_update_ns(const void *handle, int64_t time); + typedef void (*qemu_plugin_vcpu_syscall_cb_t)(qemu_plugin_id_t id, unsigned int vcpu_index, int64_t num, uint64_t a1, uint64_t a2, diff --git a/plugins/api.c b/plugins/api.c index 6bdb26bbe3..4431a0ea7e 100644 --- a/plugins/api.c +++ b/plugins/api.c @@ -39,6 +39,7 @@ #include "qemu/main-loop.h" #include "qemu/plugin.h" #include "qemu/log.h" +#include "qemu/timer.h" #include "tcg/tcg.h" #include "exec/exec-all.h" #include "exec/gdbstub.h" @@ -583,3 +584,37 @@ uint64_t qemu_plugin_u64_sum(qemu_plugin_u64 entry) } return total; } + +/* + * Time control + */ +static bool has_control; + +const void *qemu_plugin_request_time_control(void) +{ + if (!has_control) { + has_control = true; + return &has_control; + } + return NULL; +} + +#ifdef CONFIG_SOFTMMU +static void advance_virtual_time__async(CPUState *cpu, run_on_cpu_data data) +{ + int64_t new_time = data.host_ulong; + qemu_clock_advance_virtual_time(new_time); +} +#endif + +void qemu_plugin_update_ns(const void *handle, int64_t new_time) +{ +#ifdef CONFIG_SOFTMMU + if (handle == &has_control) { + /* Need to execute out of cpu_exec, so bql can be locked. */ + async_run_on_cpu(current_cpu, + advance_virtual_time__async, + RUN_ON_CPU_HOST_ULONG(new_time)); + } +#endif +} diff --git a/plugins/qemu-plugins.symbols b/plugins/qemu-plugins.symbols index aa0a77a319..ca773d8d9f 100644 --- a/plugins/qemu-plugins.symbols +++ b/plugins/qemu-plugins.symbols @@ -38,6 +38,7 @@ qemu_plugin_register_vcpu_tb_exec_cond_cb; qemu_plugin_register_vcpu_tb_exec_inline_per_vcpu; qemu_plugin_register_vcpu_tb_trans_cb; + qemu_plugin_request_time_control; qemu_plugin_reset; qemu_plugin_scoreboard_free; qemu_plugin_scoreboard_find; @@ -51,5 +52,6 @@ qemu_plugin_u64_set; qemu_plugin_u64_sum; qemu_plugin_uninstall; + qemu_plugin_update_ns; qemu_plugin_vcpu_for_each; }; From patchwork Wed Jun 12 15:35:08 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: =?utf-8?q?Alex_Benn=C3=A9e?= X-Patchwork-Id: 13695211 Received: from mail-ed1-f43.google.com (mail-ed1-f43.google.com [209.85.208.43]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 472B5181325 for ; Wed, 12 Jun 2024 15:35:17 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.43 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1718206519; cv=none; b=DlpJIUsmS1MxrvG/L++IhGFbBhR7EXreLtsqNkCZxjkty0XhqUpxEywp19syoZEMlNELqhnSxNwKmQusxjd/6znlT1McLnhqA++JynGtcktCqBeeS3gvW33SGhOZv7PSMjd7hThP38/WIpvpWQoUp/pv1SdC+7nS3DDdywtcF6E= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1718206519; c=relaxed/simple; bh=dAq+XGoEWIdnTHhnse9t/vW94PT5uWWsO13g7DXWTdU=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=QSaQq2BOkxZ0eBp745xXYswOUefsnOVwaM+vT59thFN3qz9fxfZ6glnt+Ixlt2sYIZxco99XBXnwrtHI9A9v9kjAg60iURc0EHZNEk7ogzww/NHCgisxS8Sdx7DZmsUTgoqC6mMucLdmlggzgGANCRoMgtA28uWnjifs1cWLU2U= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=CwMUsQ81; arc=none smtp.client-ip=209.85.208.43 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="CwMUsQ81" Received: by mail-ed1-f43.google.com with SMTP id 4fb4d7f45d1cf-57a4d7ba501so9302732a12.2 for ; Wed, 12 Jun 2024 08:35:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1718206515; x=1718811315; darn=vger.kernel.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=1uUeWcMjIB2TOUOcX1m/U9+CVF8niC1GNFEpyvssPNQ=; b=CwMUsQ81Sl2rb9sCJ/7LC7IzE0jCJGurgByvoW7RMybfHTZRtlPPofElD4TzSJ/PQY 4GsXxKjG5ltm630jEgtglfblwwZDkZSAlf95sIlxlNKuYJuggnxWgOuM/z1yypVu31S1 KSA0uCgx8yYINX2U2oJTXFBR/mkIDYaVnWgEvEiveCtdQN1YLlF1PgQlDsk9BUKl7tHY hOx4VYagH2tz+dnmfnt3Ps1FK+NdbphzCEPP/xAGG2cSIi7l+BsuOSb2SOHChQiONTtW 3GPa9jy9MLsYTpsSLBOlwaf0lltuZicxkKbtxmThE34yvRnOL+Zn+E53jnk40a0j+AYr +jBw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1718206515; x=1718811315; 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=1uUeWcMjIB2TOUOcX1m/U9+CVF8niC1GNFEpyvssPNQ=; b=jbFWh3CyKX4mXf94gHSx1/SD8y6bnTWiWxXVz3n5TbeynifgiGVW20blNuMt9A745L tAyQxdqnsLPSYDj0Daupa6lb0bHsMG8RomA0Kj/4PC0DAOGJS7i0+FJTS+txk/Q/rgsu Yo82vTSyfqnuzhQi7fCvfc4nUYocMGHriL7WFaGIi4sGDTiHL8SKcI2i5Z104mY5TGxb nwNpr+e8zYRAFXTYAeT5WTtRQzfZ2lPqLN4NbSV7/41W2YCZwhdNtgbZCMIeybdXwcsb WyCUy29ceLRueIPj27/JcBBZzst08dIHUFyFRyIGPDBmm+mxyIZpIpuZbWVP9P60kAR5 2N7A== X-Forwarded-Encrypted: i=1; AJvYcCWsnW9dTgUV3uf6zfOiEVskCcQO+fMzs7mYrD/K0INeq1Be+xrBFcKO/BkUIVTBekudnA0BIiu7O6h6Rp/wX0/pxUlJ X-Gm-Message-State: AOJu0Yx8eZQTUhvE36q9ckrYxevxro6WzGDqUaeWIgaFPCPLe9KUKYls nV8QQXYGzb7wdQGrQa16smOG9M4reBayY0HIP9SA8fQckeF3wnjhpSXC7ZfcHTU= X-Google-Smtp-Source: AGHT+IHCKOhkKIwUqM/1JrODiuK3xcF5lUTmN2FQB+h+HF6PKdLXYsyPDFJZr5Tf8JQXEgGtsWhV2w== X-Received: by 2002:a17:906:bfc9:b0:a68:a843:9014 with SMTP id a640c23a62f3a-a6f47f88b59mr143131866b.18.1718206515475; Wed, 12 Jun 2024 08:35:15 -0700 (PDT) Received: from draig.lan ([85.9.250.243]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-a6f1c49e682sm434788566b.205.2024.06.12.08.35.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 12 Jun 2024 08:35:11 -0700 (PDT) Received: from draig.lan (localhost [IPv6:::1]) by draig.lan (Postfix) with ESMTP id 1FC305F893; Wed, 12 Jun 2024 16:35:09 +0100 (BST) From: =?utf-8?q?Alex_Benn=C3=A9e?= To: qemu-devel@nongnu.org Cc: David Hildenbrand , Ilya Leoshkevich , Daniel Henrique Barboza , Marcelo Tosatti , Paolo Bonzini , Pierrick Bouvier , =?utf-8?q?Philippe_Mathieu-?= =?utf-8?q?Daud=C3=A9?= , Mark Burton , qemu-s390x@nongnu.org, Peter Maydell , kvm@vger.kernel.org, Laurent Vivier , Halil Pasic , Christian Borntraeger , Alexandre Iooss , qemu-arm@nongnu.org, Alexander Graf , Nicholas Piggin , =?utf-8?q?Alex_Benn=C3=A9e?= , Marco Liebel , Thomas Huth , Roman Bolshakov , qemu-ppc@nongnu.org, Mahmoud Mandour , Cameron Esfahani , Jamie Iles , "Dr. David Alan Gilbert" , Richard Henderson Subject: [PATCH 9/9] contrib/plugins: add ips plugin example for cost modeling Date: Wed, 12 Jun 2024 16:35:08 +0100 Message-Id: <20240612153508.1532940-10-alex.bennee@linaro.org> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20240612153508.1532940-1-alex.bennee@linaro.org> References: <20240612153508.1532940-1-alex.bennee@linaro.org> Precedence: bulk X-Mailing-List: kvm@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 From: Pierrick Bouvier This plugin uses the new time control interface to make decisions about the state of time during the emulation. The algorithm is currently very simple. The user specifies an ips rate which applies per core. If the core runs ahead of its allocated execution time the plugin sleeps for a bit to let real time catch up. Either way time is updated for the emulation as a function of total executed instructions with some adjustments for cores that idle. Examples -------- Slow down execution of /bin/true: $ num_insn=$(./build/qemu-x86_64 -plugin ./build/tests/plugin/libinsn.so -d plugin /bin/true |& grep total | sed -e 's/.*: //') $ time ./build/qemu-x86_64 -plugin ./build/contrib/plugins/libips.so,ips=$(($num_insn/4)) /bin/true real 4.000s Boot a Linux kernel simulating a 250MHz cpu: $ /build/qemu-system-x86_64 -kernel /boot/vmlinuz-6.1.0-21-amd64 -append "console=ttyS0" -plugin ./build/contrib/plugins/libips.so,ips=$((250*1000*1000)) -smp 1 -m 512 check time until kernel panic on serial0 Tested in system mode by booting a full debian system, and using: $ sysbench cpu run Performance decrease linearly with the given number of ips. Signed-off-by: Pierrick Bouvier Message-Id: <20240530220610.1245424-7-pierrick.bouvier@linaro.org> --- contrib/plugins/ips.c | 164 +++++++++++++++++++++++++++++++++++++++ contrib/plugins/Makefile | 1 + 2 files changed, 165 insertions(+) create mode 100644 contrib/plugins/ips.c diff --git a/contrib/plugins/ips.c b/contrib/plugins/ips.c new file mode 100644 index 0000000000..db77729264 --- /dev/null +++ b/contrib/plugins/ips.c @@ -0,0 +1,164 @@ +/* + * ips rate limiting plugin. + * + * This plugin can be used to restrict the execution of a system to a + * particular number of Instructions Per Second (ips). This controls + * time as seen by the guest so while wall-clock time may be longer + * from the guests point of view time will pass at the normal rate. + * + * This uses the new plugin API which allows the plugin to control + * system time. + * + * Copyright (c) 2023 Linaro Ltd + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#include +#include +#include + +QEMU_PLUGIN_EXPORT int qemu_plugin_version = QEMU_PLUGIN_VERSION; + +/* how many times do we update time per sec */ +#define NUM_TIME_UPDATE_PER_SEC 10 +#define NSEC_IN_ONE_SEC (1000 * 1000 * 1000) + +static GMutex global_state_lock; + +static uint64_t max_insn_per_second = 1000 * 1000 * 1000; /* ips per core, per second */ +static uint64_t max_insn_per_quantum; /* trap every N instructions */ +static int64_t virtual_time_ns; /* last set virtual time */ + +static const void *time_handle; + +typedef struct { + uint64_t total_insn; + uint64_t quantum_insn; /* insn in last quantum */ + int64_t last_quantum_time; /* time when last quantum started */ +} vCPUTime; + +struct qemu_plugin_scoreboard *vcpus; + +/* return epoch time in ns */ +static int64_t now_ns(void) +{ + return g_get_real_time() * 1000; +} + +static uint64_t num_insn_during(int64_t elapsed_ns) +{ + double num_secs = elapsed_ns / (double) NSEC_IN_ONE_SEC; + return num_secs * (double) max_insn_per_second; +} + +static int64_t time_for_insn(uint64_t num_insn) +{ + double num_secs = (double) num_insn / (double) max_insn_per_second; + return num_secs * (double) NSEC_IN_ONE_SEC; +} + +static void update_system_time(vCPUTime *vcpu) +{ + int64_t elapsed_ns = now_ns() - vcpu->last_quantum_time; + uint64_t max_insn = num_insn_during(elapsed_ns); + + if (vcpu->quantum_insn >= max_insn) { + /* this vcpu ran faster than expected, so it has to sleep */ + uint64_t insn_advance = vcpu->quantum_insn - max_insn; + uint64_t time_advance_ns = time_for_insn(insn_advance); + int64_t sleep_us = time_advance_ns / 1000; + g_usleep(sleep_us); + } + + vcpu->total_insn += vcpu->quantum_insn; + vcpu->quantum_insn = 0; + vcpu->last_quantum_time = now_ns(); + + /* based on total number of instructions, what should be the new time? */ + int64_t new_virtual_time = time_for_insn(vcpu->total_insn); + + g_mutex_lock(&global_state_lock); + + /* Time only moves forward. Another vcpu might have updated it already. */ + if (new_virtual_time > virtual_time_ns) { + qemu_plugin_update_ns(time_handle, new_virtual_time); + virtual_time_ns = new_virtual_time; + } + + g_mutex_unlock(&global_state_lock); +} + +static void vcpu_init(qemu_plugin_id_t id, unsigned int cpu_index) +{ + vCPUTime *vcpu = qemu_plugin_scoreboard_find(vcpus, cpu_index); + vcpu->total_insn = 0; + vcpu->quantum_insn = 0; + vcpu->last_quantum_time = now_ns(); +} + +static void vcpu_exit(qemu_plugin_id_t id, unsigned int cpu_index) +{ + vCPUTime *vcpu = qemu_plugin_scoreboard_find(vcpus, cpu_index); + update_system_time(vcpu); +} + +static void every_quantum_insn(unsigned int cpu_index, void *udata) +{ + vCPUTime *vcpu = qemu_plugin_scoreboard_find(vcpus, cpu_index); + g_assert(vcpu->quantum_insn >= max_insn_per_quantum); + update_system_time(vcpu); +} + +static void vcpu_tb_trans(qemu_plugin_id_t id, struct qemu_plugin_tb *tb) +{ + size_t n_insns = qemu_plugin_tb_n_insns(tb); + qemu_plugin_u64 quantum_insn = + qemu_plugin_scoreboard_u64_in_struct(vcpus, vCPUTime, quantum_insn); + /* count (and eventually trap) once per tb */ + qemu_plugin_register_vcpu_tb_exec_inline_per_vcpu( + tb, QEMU_PLUGIN_INLINE_ADD_U64, quantum_insn, n_insns); + qemu_plugin_register_vcpu_tb_exec_cond_cb( + tb, every_quantum_insn, + QEMU_PLUGIN_CB_NO_REGS, QEMU_PLUGIN_COND_GE, + quantum_insn, max_insn_per_quantum, NULL); +} + +static void plugin_exit(qemu_plugin_id_t id, void *udata) +{ + qemu_plugin_scoreboard_free(vcpus); +} + +QEMU_PLUGIN_EXPORT int qemu_plugin_install(qemu_plugin_id_t id, + const qemu_info_t *info, int argc, + char **argv) +{ + for (int i = 0; i < argc; i++) { + char *opt = argv[i]; + g_auto(GStrv) tokens = g_strsplit(opt, "=", 2); + if (g_strcmp0(tokens[0], "ips") == 0) { + max_insn_per_second = g_ascii_strtoull(tokens[1], NULL, 10); + if (!max_insn_per_second && errno) { + fprintf(stderr, "%s: couldn't parse %s (%s)\n", + __func__, tokens[1], g_strerror(errno)); + return -1; + } + } else { + fprintf(stderr, "option parsing failed: %s\n", opt); + return -1; + } + } + + vcpus = qemu_plugin_scoreboard_new(sizeof(vCPUTime)); + max_insn_per_quantum = max_insn_per_second / NUM_TIME_UPDATE_PER_SEC; + + time_handle = qemu_plugin_request_time_control(); + g_assert(time_handle); + + qemu_plugin_register_vcpu_tb_trans_cb(id, vcpu_tb_trans); + qemu_plugin_register_vcpu_init_cb(id, vcpu_init); + qemu_plugin_register_vcpu_exit_cb(id, vcpu_exit); + qemu_plugin_register_atexit_cb(id, plugin_exit, NULL); + + return 0; +} diff --git a/contrib/plugins/Makefile b/contrib/plugins/Makefile index 0b64d2c1e3..449ead1130 100644 --- a/contrib/plugins/Makefile +++ b/contrib/plugins/Makefile @@ -27,6 +27,7 @@ endif NAMES += hwprofile NAMES += cache NAMES += drcov +NAMES += ips ifeq ($(CONFIG_WIN32),y) SO_SUFFIX := .dll