[PATCH 03/13] accel: Elide kvm_update_guest_debug by checking kvm_supports_guest_debug

Philippe Mathieu-Daudé via posted 13 patches 4 years ago
[PATCH 03/13] accel: Elide kvm_update_guest_debug by checking kvm_supports_guest_debug
Posted by Philippe Mathieu-Daudé via 4 years ago
Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
---
 accel/stubs/kvm-stub.c | 5 -----
 cpu.c                  | 2 +-
 2 files changed, 1 insertion(+), 6 deletions(-)

diff --git a/accel/stubs/kvm-stub.c b/accel/stubs/kvm-stub.c
index 7e0fb884b9..924ffbde85 100644
--- a/accel/stubs/kvm-stub.c
+++ b/accel/stubs/kvm-stub.c
@@ -46,11 +46,6 @@ int kvm_has_many_ioeventfds(void)
     return 0;
 }
 
-int kvm_update_guest_debug(CPUState *cpu, unsigned long reinject_trap)
-{
-    return -ENOSYS;
-}
-
 int kvm_insert_breakpoint(CPUState *cpu, target_ulong addr,
                           target_ulong len, int type)
 {
diff --git a/cpu.c b/cpu.c
index 97d42b6b2a..834e2b4cdb 100644
--- a/cpu.c
+++ b/cpu.c
@@ -350,7 +350,7 @@ void cpu_single_step(CPUState *cpu, int enabled)
 {
     if (cpu->singlestep_enabled != enabled) {
         cpu->singlestep_enabled = enabled;
-        if (kvm_enabled()) {
+        if (kvm_enabled() && kvm_supports_guest_debug()) {
             kvm_update_guest_debug(cpu, 0);
         }
         trace_breakpoint_singlestep(cpu->cpu_index, enabled);
-- 
2.34.1


Re: [PATCH 03/13] accel: Elide kvm_update_guest_debug by checking kvm_supports_guest_debug
Posted by Richard Henderson 4 years ago
On 2/9/22 02:22, Philippe Mathieu-Daudé wrote:
> -int kvm_update_guest_debug(CPUState *cpu, unsigned long reinject_trap)
> -{
> -    return -ENOSYS;
> -}
> -
>   int kvm_insert_breakpoint(CPUState *cpu, target_ulong addr,
>                             target_ulong len, int type)
>   {
> diff --git a/cpu.c b/cpu.c
> index 97d42b6b2a..834e2b4cdb 100644
> --- a/cpu.c
> +++ b/cpu.c
> @@ -350,7 +350,7 @@ void cpu_single_step(CPUState *cpu, int enabled)
>   {
>       if (cpu->singlestep_enabled != enabled) {
>           cpu->singlestep_enabled = enabled;
> -        if (kvm_enabled()) {
> +        if (kvm_enabled() && kvm_supports_guest_debug()) {
>               kvm_update_guest_debug(cpu, 0);

Why is this second hunk required?

I would think the stub would be removable on its own, since it is protected by 
kvm_enabled, which will expand to false exactly like kvm_supports_guest_debug expands to 
false.

As an aside, I wonder about the non-checking of the update return value...


r~