qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: "Alex Bennée" <alex.bennee@linaro.org>
To: qemu-devel@nongnu.org
Cc: fam@euphon.net, berrange@redhat.com, f4bug@amsat.org,
	aurelien@aurel32.net, pbonzini@redhat.com, stefanha@redhat.com,
	crosa@redhat.com, minyihh@uci.edu, ma.mandourr@gmail.com,
	Luke.Craig@ll.mit.edu, cota@braap.org,
	aaron@os.amperecomputing.com, kuhn.chenqun@huawei.com,
	robhenry@microsoft.com, mahmoudabdalghany@outlook.com,
	"Alex Bennée" <alex.bennee@linaro.org>,
	"Mads Ynddal" <mads@ynddal.dk>,
	"Richard Henderson" <richard.henderson@linaro.org>,
	kvm@vger.kernel.org (open list:Overall KVM CPUs)
Subject: [PATCH  v1 45/51] gdbstub: move guest debug support check to ops
Date: Thu, 29 Sep 2022 12:42:25 +0100	[thread overview]
Message-ID: <20220929114231.583801-46-alex.bennee@linaro.org> (raw)
In-Reply-To: <20220929114231.583801-1-alex.bennee@linaro.org>

This removes the final hard coding of kvm_enabled() in gdbstub and
moves the check to an AccelOps.

Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Cc: Mads Ynddal <mads@ynddal.dk>
Message-Id: <20220927141504.3886314-15-alex.bennee@linaro.org>
---
 accel/kvm/kvm-cpus.h       | 1 +
 gdbstub/internals.h        | 1 +
 include/sysemu/accel-ops.h | 1 +
 include/sysemu/kvm.h       | 7 -------
 accel/kvm/kvm-accel-ops.c  | 1 +
 accel/kvm/kvm-all.c        | 6 ++++++
 accel/tcg/tcg-accel-ops.c  | 6 ++++++
 gdbstub/gdbstub.c          | 5 ++---
 gdbstub/softmmu.c          | 9 +++++++++
 gdbstub/user.c             | 6 ++++++
 10 files changed, 33 insertions(+), 10 deletions(-)

diff --git a/accel/kvm/kvm-cpus.h b/accel/kvm/kvm-cpus.h
index 33e435d62b..fd63fe6a59 100644
--- a/accel/kvm/kvm-cpus.h
+++ b/accel/kvm/kvm-cpus.h
@@ -18,6 +18,7 @@ void kvm_destroy_vcpu(CPUState *cpu);
 void kvm_cpu_synchronize_post_reset(CPUState *cpu);
 void kvm_cpu_synchronize_post_init(CPUState *cpu);
 void kvm_cpu_synchronize_pre_loadvm(CPUState *cpu);
+bool kvm_supports_guest_debug(void);
 int kvm_insert_breakpoint(CPUState *cpu, int type, hwaddr addr, hwaddr len);
 int kvm_remove_breakpoint(CPUState *cpu, int type, hwaddr addr, hwaddr len);
 void kvm_remove_all_breakpoints(CPUState *cpu);
diff --git a/gdbstub/internals.h b/gdbstub/internals.h
index 41e2e72dbf..eabb0341d1 100644
--- a/gdbstub/internals.h
+++ b/gdbstub/internals.h
@@ -9,6 +9,7 @@
 #ifndef _INTERNALS_H_
 #define _INTERNALS_H_
 
+bool gdb_supports_guest_debug(void);
 int gdb_breakpoint_insert(CPUState *cs, int type, hwaddr addr, hwaddr len);
 int gdb_breakpoint_remove(CPUState *cs, int type, hwaddr addr, hwaddr len);
 void gdb_breakpoint_remove_all(CPUState *cs);
diff --git a/include/sysemu/accel-ops.h b/include/sysemu/accel-ops.h
index 86794ac273..8cc7996def 100644
--- a/include/sysemu/accel-ops.h
+++ b/include/sysemu/accel-ops.h
@@ -47,6 +47,7 @@ struct AccelOpsClass {
     int64_t (*get_elapsed_ticks)(void);
 
     /* gdbstub hooks */
+    bool (*supports_guest_debug)(void);
     int (*insert_breakpoint)(CPUState *cpu, int type, hwaddr addr, hwaddr len);
     int (*remove_breakpoint)(CPUState *cpu, int type, hwaddr addr, hwaddr len);
     void (*remove_all_breakpoints)(CPUState *cpu);
diff --git a/include/sysemu/kvm.h b/include/sysemu/kvm.h
index 21d3f1d01e..6e1bd01725 100644
--- a/include/sysemu/kvm.h
+++ b/include/sysemu/kvm.h
@@ -46,7 +46,6 @@ extern bool kvm_readonly_mem_allowed;
 extern bool kvm_direct_msi_allowed;
 extern bool kvm_ioeventfd_any_length_allowed;
 extern bool kvm_msi_use_devid;
-extern bool kvm_has_guest_debug;
 
 #define kvm_enabled()           (kvm_allowed)
 /**
@@ -168,11 +167,6 @@ extern bool kvm_has_guest_debug;
  */
 #define kvm_msi_devid_required() (kvm_msi_use_devid)
 
-/*
- * Does KVM support guest debugging
- */
-#define kvm_supports_guest_debug() (kvm_has_guest_debug)
-
 #else
 
 #define kvm_enabled()           (0)
@@ -190,7 +184,6 @@ extern bool kvm_has_guest_debug;
 #define kvm_direct_msi_enabled() (false)
 #define kvm_ioeventfd_any_length_enabled() (false)
 #define kvm_msi_devid_required() (false)
-#define kvm_supports_guest_debug() (false)
 
 #endif  /* CONFIG_KVM_IS_POSSIBLE */
 
diff --git a/accel/kvm/kvm-accel-ops.c b/accel/kvm/kvm-accel-ops.c
index 5c0e37514c..fbf4fe3497 100644
--- a/accel/kvm/kvm-accel-ops.c
+++ b/accel/kvm/kvm-accel-ops.c
@@ -99,6 +99,7 @@ static void kvm_accel_ops_class_init(ObjectClass *oc, void *data)
     ops->synchronize_pre_loadvm = kvm_cpu_synchronize_pre_loadvm;
 
 #ifdef KVM_CAP_SET_GUEST_DEBUG
+    ops->supports_guest_debug = kvm_supports_guest_debug;
     ops->insert_breakpoint = kvm_insert_breakpoint;
     ops->remove_breakpoint = kvm_remove_breakpoint;
     ops->remove_all_breakpoints = kvm_remove_all_breakpoints;
diff --git a/accel/kvm/kvm-all.c b/accel/kvm/kvm-all.c
index b8c734fe3a..6ebff6e5a6 100644
--- a/accel/kvm/kvm-all.c
+++ b/accel/kvm/kvm-all.c
@@ -3287,6 +3287,12 @@ int kvm_update_guest_debug(CPUState *cpu, unsigned long reinject_trap)
     return data.err;
 }
 
+bool kvm_supports_guest_debug(void)
+{
+    /* probed during kvm_init() */
+    return kvm_has_guest_debug;
+}
+
 int kvm_insert_breakpoint(CPUState *cpu, int type, hwaddr addr, hwaddr len)
 {
     struct kvm_sw_breakpoint *bp;
diff --git a/accel/tcg/tcg-accel-ops.c b/accel/tcg/tcg-accel-ops.c
index 965c2ad581..19cbf1db3a 100644
--- a/accel/tcg/tcg-accel-ops.c
+++ b/accel/tcg/tcg-accel-ops.c
@@ -93,6 +93,11 @@ void tcg_handle_interrupt(CPUState *cpu, int mask)
     }
 }
 
+static bool tcg_supports_guest_debug(void)
+{
+    return true;
+}
+
 /* Translate GDB watchpoint type to a flags value for cpu_watchpoint_* */
 static inline int xlat_gdb_type(CPUState *cpu, int gdbtype)
 {
@@ -198,6 +203,7 @@ static void tcg_accel_ops_init(AccelOpsClass *ops)
         }
     }
 
+    ops->supports_guest_debug = tcg_supports_guest_debug;
     ops->insert_breakpoint = tcg_insert_breakpoint;
     ops->remove_breakpoint = tcg_remove_breakpoint;
     ops->remove_all_breakpoints = tcg_remove_all_breakpoints;
diff --git a/gdbstub/gdbstub.c b/gdbstub/gdbstub.c
index ff9f3f9586..be88ca0d71 100644
--- a/gdbstub/gdbstub.c
+++ b/gdbstub/gdbstub.c
@@ -45,7 +45,6 @@
 
 #include "qemu/sockets.h"
 #include "sysemu/hw_accel.h"
-#include "sysemu/kvm.h"
 #include "sysemu/runstate.h"
 #include "semihosting/semihost.h"
 #include "exec/exec-all.h"
@@ -3447,8 +3446,8 @@ int gdbserver_start(const char *device)
         return -1;
     }
 
-    if (kvm_enabled() && !kvm_supports_guest_debug()) {
-        error_report("gdbstub: KVM doesn't support guest debugging");
+    if (!gdb_supports_guest_debug()) {
+        error_report("gdbstub: current accelerator doesn't support guest debugging");
         return -1;
     }
 
diff --git a/gdbstub/softmmu.c b/gdbstub/softmmu.c
index 4e73890379..f208c6cf15 100644
--- a/gdbstub/softmmu.c
+++ b/gdbstub/softmmu.c
@@ -15,6 +15,15 @@
 #include "sysemu/cpus.h"
 #include "internals.h"
 
+bool gdb_supports_guest_debug(void)
+{
+    const AccelOpsClass *ops = cpus_get_accel();
+    if (ops->supports_guest_debug) {
+        return ops->supports_guest_debug();
+    }
+    return false;
+}
+
 int gdb_breakpoint_insert(CPUState *cs, int type, hwaddr addr, hwaddr len)
 {
     const AccelOpsClass *ops = cpus_get_accel();
diff --git a/gdbstub/user.c b/gdbstub/user.c
index 42652b28a7..033e5fdd71 100644
--- a/gdbstub/user.c
+++ b/gdbstub/user.c
@@ -14,6 +14,12 @@
 #include "hw/core/cpu.h"
 #include "internals.h"
 
+bool gdb_supports_guest_debug(void)
+{
+    /* user-mode == TCG == supported */
+    return true;
+}
+
 int gdb_breakpoint_insert(CPUState *cs, int type, hwaddr addr, hwaddr len)
 {
     CPUState *cpu;
-- 
2.34.1



  parent reply	other threads:[~2022-09-29 14:41 UTC|newest]

Thread overview: 55+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-09-29 11:41 [PATCH v1 00/51] maintainer pre-PR (testing, plugins, gitdm, semihosting) Alex Bennée
2022-09-29 11:41 ` [PATCH v1 01/51] scripts/ci/setup: ninja missing from build-environment Alex Bennée
2022-09-29 11:41 ` [PATCH v1 02/51] scripts/ci/setup: Fix libxen requirements Alex Bennée
2022-09-29 11:41 ` [PATCH v1 03/51] scripts/ci/setup: spice-server only on x86 aarch64 Alex Bennée
2022-09-29 11:41 ` [PATCH v1 04/51] tests/docker: run script use realpath instead of readlink Alex Bennée
2022-09-29 11:41 ` [PATCH v1 05/51] configure: move detected gdb to TCG's config-host.mak Alex Bennée
2022-09-29 11:41 ` [PATCH v1 06/51] target/hexagon: add flex/bison/glib2 to qemu.yml Alex Bennée
2022-09-29 11:41 ` [PATCH v1 07/51] target/hexagon: regenerate docker/cirrus files Alex Bennée
2022-09-29 11:41 ` [PATCH v1 08/51] target/hexagon: manually add flex/bison/glib2 to remaining containers Alex Bennée
2022-09-29 11:41 ` [PATCH v1 09/51] tests/docker: update fedora-win[32|64]-cross with lcitool Alex Bennée
2022-09-29 11:41 ` [PATCH v1 10/51] tests/docker: move alpine from edge to tagged release Alex Bennée
2022-09-29 11:41 ` [PATCH v1 11/51] tests/qtest: bump up QOS_PATH_MAX_ELEMENT_SIZE Alex Bennée
2022-09-29 11:41 ` [PATCH v1 12/51] configure: do not invoke as/ld directly for pc-bios/optionrom Alex Bennée
2022-09-29 11:41 ` [PATCH v1 13/51] pc-bios/optionrom: detect CC options just once Alex Bennée
2022-09-29 11:41 ` [PATCH v1 14/51] pc-bios/s390-ccw: " Alex Bennée
2022-09-29 11:41 ` [PATCH v1 15/51] vof: add distclean target Alex Bennée
2022-09-29 14:36   ` BALATON Zoltan
2022-09-29 16:25     ` Alex Bennée
2022-09-29 16:45     ` Alex Bennée
2022-09-29 11:41 ` [PATCH v1 16/51] build: add recursive distclean rules Alex Bennée
2022-09-29 11:41 ` [PATCH v1 17/51] configure: return status code from probe_target_compiler Alex Bennée
2022-09-29 11:41 ` [PATCH v1 18/51] configure: store container engine in config-host.mak Alex Bennée
2022-09-29 11:41 ` [PATCH v1 19/51] tests: simplify Makefile invocation for tests/tcg Alex Bennée
2022-09-29 11:42 ` [PATCH v1 20/51] tests/tcg: remove -f from Makefile invocation Alex Bennée
2022-09-29 11:42 ` [PATCH v1 21/51] tests/tcg: add distclean rule Alex Bennée
2022-09-29 11:42 ` [PATCH v1 22/51] tests/tcg: unify ppc64 and ppc64le Makefiles Alex Bennée
2022-09-29 11:42 ` [PATCH v1 23/51] tests/tcg: clean up calls to run-test Alex Bennée
2022-09-29 11:42 ` [PATCH v1 24/51] tests/tcg: move compiler tests to Makefiles Alex Bennée
2022-09-29 11:42 ` [PATCH v1 25/51] configure: move tests/tcg/Makefile.prereqs to root build directory Alex Bennée
2022-09-29 11:42 ` [PATCH v1 26/51] configure: unify creation of cross-compilation Makefiles Alex Bennée
2022-09-29 11:42 ` [PATCH v1 27/51] configure: cleanup creation of tests/tcg target config Alex Bennée
2022-09-29 11:42 ` [PATCH v1 28/51] configure: build ROMs with container-based cross compilers Alex Bennée
2022-09-29 11:42 ` [PATCH v1 29/51] pc-bios/optionrom: Adopt meson style Make output Alex Bennée
2022-09-29 11:42 ` [PATCH v1 30/51] pc-bios/s390-ccw: " Alex Bennée
2022-09-29 11:42 ` [PATCH v1 31/51] pc-bios/vof: " Alex Bennée
2022-09-29 11:42 ` [PATCH v1 32/51] monitor: expose monitor_puts to rest of code Alex Bennée
2022-09-29 11:42 ` [PATCH v1 33/51] disas: generalise plugin_printf and use for monitor_disas Alex Bennée
2022-09-29 11:42 ` [PATCH v1 34/51] disas: use result of ->read_memory_func Alex Bennée
2022-09-29 11:42 ` [PATCH v1 35/51] plugins: extend execlog to filter matches Alex Bennée
2022-09-29 11:42 ` [PATCH v1 36/51] plugins: Assert mmu_idx in range before use in qemu_plugin_get_hwaddr Alex Bennée
2022-09-29 11:42 ` [PATCH v1 37/51] docs/devel: clean-up qemu invocations in tcg-plugins Alex Bennée
2022-09-29 11:42 ` [PATCH v1 38/51] docs/devel: move API to end of tcg-plugins.rst Alex Bennée
2022-09-29 11:42 ` [PATCH v1 39/51] contrib/plugins: reset skip when matching in execlog Alex Bennée
2022-09-29 11:42 ` [PATCH v1 40/51] docs/devel: document the test plugins Alex Bennée
2022-09-29 11:42 ` [PATCH v1 41/51] semihosting: update link to spec Alex Bennée
2022-09-29 11:42 ` [PATCH v1 42/51] gdbstub: move into its own sub directory Alex Bennée
2022-09-29 11:42 ` [PATCH v1 43/51] gdbstub: move sstep flags probing into AccelClass Alex Bennée
2022-09-29 11:42 ` [PATCH v1 44/51] gdbstub: move breakpoint logic to accel ops Alex Bennée
2022-09-29 11:42 ` Alex Bennée [this message]
2022-09-29 11:42 ` [PATCH v1 46/51] accel/kvm: move kvm_update_guest_debug to inline stub Alex Bennée
2022-09-29 11:42 ` [PATCH v1 47/51] contrib/gitdm: add mapping for Loongson Technology Alex Bennée
2022-09-29 11:42 ` [PATCH v1 48/51] contrib/gitdm: add Paul to individual contributors Alex Bennée
2022-09-29 11:42 ` [PATCH v1 49/51] contrib/gitdm: add WANG Xuerui to individual contributers Alex Bennée
2022-09-29 11:42 ` [PATCH v1 50/51] contrib/gitdm: add ISCAS to the academics group Alex Bennée
2022-09-29 11:42 ` [PATCH v1 51/51] contrib/gitdm: add China Telecom to the domain map Alex Bennée

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20220929114231.583801-46-alex.bennee@linaro.org \
    --to=alex.bennee@linaro.org \
    --cc=Luke.Craig@ll.mit.edu \
    --cc=aaron@os.amperecomputing.com \
    --cc=aurelien@aurel32.net \
    --cc=berrange@redhat.com \
    --cc=cota@braap.org \
    --cc=crosa@redhat.com \
    --cc=f4bug@amsat.org \
    --cc=fam@euphon.net \
    --cc=kuhn.chenqun@huawei.com \
    --cc=kvm@vger.kernel.org \
    --cc=ma.mandourr@gmail.com \
    --cc=mads@ynddal.dk \
    --cc=mahmoudabdalghany@outlook.com \
    --cc=minyihh@uci.edu \
    --cc=pbonzini@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=richard.henderson@linaro.org \
    --cc=robhenry@microsoft.com \
    --cc=stefanha@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).