From: Fabiano Rosas <farosas@linux.ibm.com>
To: qemu-devel@nongnu.org
Cc: qemu-ppc@nongnu.org, philmd@redhat.com, pbonzini@redhat.com,
crosthwaite.peter@gmail.com, rth@twiddle.net,
david@gibson.dropbear.id.au, cohuck@redhat.com, aik@ozlabs.ru
Subject: [Qemu-devel] [RFC PATCH v3 4/7] kvm-all: Introduce kvm_set_singlestep
Date: Fri, 18 Jan 2019 12:07:55 -0200 [thread overview]
Message-ID: <20190118140758.829-5-farosas@linux.ibm.com> (raw)
In-Reply-To: <20190118140758.829-1-farosas@linux.ibm.com>
This will allow architecture-specifc implementations of a fallback
mechanism for single stepping in cases where KVM does not support it
via the KVM_SET_GUEST_DEBUG ioctl.
Signed-off-by: Fabiano Rosas <farosas@linux.ibm.com>
---
accel/kvm/kvm-all.c | 9 +++++++++
accel/stubs/kvm-stub.c | 4 ++++
exec.c | 2 +-
include/sysemu/kvm.h | 2 ++
stubs/Makefile.objs | 1 +
stubs/kvm-arch-set-singlestep.c | 8 ++++++++
6 files changed, 25 insertions(+), 1 deletion(-)
create mode 100644 stubs/kvm-arch-set-singlestep.c
diff --git a/accel/kvm/kvm-all.c b/accel/kvm/kvm-all.c
index 0dc7a32883..8dc5d32f08 100644
--- a/accel/kvm/kvm-all.c
+++ b/accel/kvm/kvm-all.c
@@ -2320,6 +2320,15 @@ int kvm_update_guest_debug(CPUState *cpu, unsigned long reinject_trap)
return data.err;
}
+void kvm_set_singlestep(CPUState *cs, int enabled)
+{
+ if (kvm_has_guestdbg_singlestep()) {
+ kvm_update_guest_debug(cs, 0);
+ } else {
+ kvm_arch_set_singlestep(cs, enabled);
+ }
+}
+
int kvm_insert_breakpoint(CPUState *cpu, target_ulong addr,
target_ulong len, int type)
{
diff --git a/accel/stubs/kvm-stub.c b/accel/stubs/kvm-stub.c
index 02d5170031..69bd07f50e 100644
--- a/accel/stubs/kvm-stub.c
+++ b/accel/stubs/kvm-stub.c
@@ -79,6 +79,10 @@ int kvm_update_guest_debug(CPUState *cpu, unsigned long reinject_trap)
return -ENOSYS;
}
+void kvm_set_singlestep(CPUState *cs, int enabled)
+{
+}
+
int kvm_insert_breakpoint(CPUState *cpu, target_ulong addr,
target_ulong len, int type)
{
diff --git a/exec.c b/exec.c
index 895449f926..6612f90b3a 100644
--- a/exec.c
+++ b/exec.c
@@ -1234,7 +1234,7 @@ void cpu_single_step(CPUState *cpu, int enabled)
if (cpu->singlestep_enabled != enabled) {
cpu->singlestep_enabled = enabled;
if (kvm_enabled()) {
- kvm_update_guest_debug(cpu, 0);
+ kvm_set_singlestep(cpu, enabled);
} else {
/* must flush all the translated code to avoid inconsistencies */
/* XXX: only flush what is necessary */
diff --git a/include/sysemu/kvm.h b/include/sysemu/kvm.h
index ca2bbff053..e1ef2f5b99 100644
--- a/include/sysemu/kvm.h
+++ b/include/sysemu/kvm.h
@@ -247,6 +247,7 @@ bool kvm_memcrypt_enabled(void);
*/
int kvm_memcrypt_encrypt_data(uint8_t *ptr, uint64_t len);
+void kvm_arch_set_singlestep(CPUState *cpu, int enabled);
#ifdef NEED_CPU_H
#include "cpu.h"
@@ -259,6 +260,7 @@ int kvm_remove_breakpoint(CPUState *cpu, target_ulong addr,
target_ulong len, int type);
void kvm_remove_all_breakpoints(CPUState *cpu);
int kvm_update_guest_debug(CPUState *cpu, unsigned long reinject_trap);
+void kvm_set_singlestep(CPUState *cs, int enabled);
int kvm_on_sigbus_vcpu(CPUState *cpu, int code, void *addr);
int kvm_on_sigbus(int code, void *addr);
diff --git a/stubs/Makefile.objs b/stubs/Makefile.objs
index 5dd0aeeec6..145ca9620b 100644
--- a/stubs/Makefile.objs
+++ b/stubs/Makefile.objs
@@ -16,6 +16,7 @@ stub-obj-y += get-vm-name.o
stub-obj-y += iothread.o
stub-obj-y += iothread-lock.o
stub-obj-y += is-daemonized.o
+stub-obj-y += kvm-arch-set-singlestep.o
stub-obj-$(CONFIG_LINUX_AIO) += linux-aio.o
stub-obj-y += machine-init-done.o
stub-obj-y += migr-blocker.o
diff --git a/stubs/kvm-arch-set-singlestep.c b/stubs/kvm-arch-set-singlestep.c
new file mode 100644
index 0000000000..ba6e0323d6
--- /dev/null
+++ b/stubs/kvm-arch-set-singlestep.c
@@ -0,0 +1,8 @@
+#include "qemu/osdep.h"
+#include "qemu/error-report.h"
+#include "sysemu/kvm.h"
+
+void kvm_arch_set_singlestep(CPUState *cpu, int enabled)
+{
+ warn_report("KVM does not support single stepping");
+}
--
2.17.1
next prev parent reply other threads:[~2019-01-18 14:08 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-01-18 14:07 [Qemu-devel] [RFC PATCH v3 0/7] target/ppc: single step for KVM HV Fabiano Rosas
2019-01-18 14:07 ` [Qemu-devel] [RFC PATCH v3 1/7] target/ppc: Move exception vector offset computation into a function Fabiano Rosas
2019-01-25 1:22 ` Alexey Kardashevskiy
2019-01-18 14:07 ` [Qemu-devel] [RFC PATCH v3 2/7] target/ppc: Add ppc_get_trace_int_handler_addr Fabiano Rosas
2019-01-25 1:22 ` Alexey Kardashevskiy
2019-02-01 4:08 ` Alexey Kardashevskiy
2019-01-18 14:07 ` [Qemu-devel] [RFC PATCH v3 3/7] kvm: support checking for single step capability Fabiano Rosas
2019-01-25 1:24 ` Alexey Kardashevskiy
2019-01-18 14:07 ` Fabiano Rosas [this message]
2019-01-18 14:07 ` [Qemu-devel] [RFC PATCH v3 5/7] target/ppc: Move handling of hardware breakpoints to a separate function Fabiano Rosas
2019-01-18 14:07 ` [Qemu-devel] [RFC PATCH v3 6/7] target/ppc: Refactor kvm_handle_debug Fabiano Rosas
2019-01-25 1:37 ` Alexey Kardashevskiy
2019-01-18 14:07 ` [Qemu-devel] [RFC PATCH v3 7/7] target/ppc: support single stepping with KVM HV Fabiano Rosas
2019-01-25 4:52 ` Alexey Kardashevskiy
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=20190118140758.829-5-farosas@linux.ibm.com \
--to=farosas@linux.ibm.com \
--cc=aik@ozlabs.ru \
--cc=cohuck@redhat.com \
--cc=crosthwaite.peter@gmail.com \
--cc=david@gibson.dropbear.id.au \
--cc=pbonzini@redhat.com \
--cc=philmd@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=qemu-ppc@nongnu.org \
--cc=rth@twiddle.net \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.