Skip to contentSkip to conversation

new functions on_vcpu() causing segafault when trying to use breakpoints

kvm-userspace Jerone Young 2 participants 3 messages May 30, 2008 KVM

lore
Share & tools
lore
#0 lore raw

New code recently added to the repository has made some modifications to the kvm_update_debugger() function in qemu-kvm.c. Where as no longer to just call kvm_guest_debug...Now there is a new fuction on_vcpu() that places things in work queues and launches them.

The problem is when kvm_invold_guest_debug() gets called, it segfaults calling kvm_guest_debug().

What exactly is the point of complicating this?

This code does segfault on x86 also. For now I have just placed the old code back locally.

#1 lore raw
Quoted 7 lines · Jerone Young

New code recently added to the repository has made some modifications to the kvm_update_debugger() function in qemu-kvm.c. Where as no longer to just call kvm_guest_debug...Now there is a new fuction on_vcpu() that places things in work queues and launches them.

The problem is when kvm_invold_guest_debug() gets called, it segfaults calling kvm_guest_debug().

I bet this piece from [1] will solve it:

qemu/qemu-kvm.c +1 -1
Index: b/qemu/qemu-kvm.c
===================================================================
@@ -268,7 +268,7 @@ static void kvm_main_loop_wait(CPUState 
 	exit(1);
     }
 
-
+    cpu_single_env = env;
     flush_queued_work(env);
 
     if (vcpu_info[env->cpu_index].stop) {

I didn't bother posting it separately as I (obviously wrongly) assumed this wouldn't trigger for the existing code.

Quoted 2 lines

What exactly is the point of complicating this?

The old code quickly live-locked when you invoked kvm_guest_debug while the target vcpu was still running. I suggested to stop the vcpu when invoking this (and other problematic) services, Avi preferred the on_vcpu aproach. And that, indeed, turned out to be cleaner and easier reusable.

Quoted 3 lines

This code does segfault on x86 also. For now I have just placed the old code back locally.

I would be happy if you could give my patches a spin as well. I was using them for kernel debugging during this week, but I guess I'm still alone. :->

Jan

[1] http://permalink.gmane.org/gmane.comp.emulators.kvm.devel/17968

#2 lore raw
Quoted 26 lines · Jan Kiszka
Quoted 7 lines · Jerone Young

New code recently added to the repository has made some modifications to the kvm_update_debugger() function in qemu-kvm.c. Where as no longer to just call kvm_guest_debug...Now there is a new fuction on_vcpu() that places things in work queues and launches them.

The problem is when kvm_invold_guest_debug() gets called, it segfaults calling kvm_guest_debug().

I bet this piece from [1] will solve it:

Index: b/qemu/qemu-kvm.c
===================================================================

qemu/qemu-kvm.c +1 -1
@@ -268,7 +268,7 @@ static void kvm_main_loop_wait(CPUState 
 	exit(1);
     }
 
-
+    cpu_single_env = env;
     flush_queued_work(env);
 
     if (vcpu_info[env->cpu_index].stop) {
Quoted 2 lines

I didn't bother posting it separately as I (obviously wrongly) assumed this wouldn't trigger for the existing code.

Yeap that was it. Works fine now. Your going to want to send this patch out.

Quoted 9 lines
Quoted 3 lines

What exactly is the point of complicating this?

The old code quickly live-locked when you invoked kvm_guest_debug while the target vcpu was still running. I suggested to stop the vcpu when invoking this (and other problematic) services, Avi preferred the on_vcpu aproach. And that, indeed, turned out to be cleaner and easier reusable.

ah I see.

Quoted 8 lines
Quoted 4 lines

This code does segfault on x86 also. For now I have just placed the old code back locally.

I would be happy if you could give my patches a spin as well. I was using them for kernel debugging during this week, but I guess I'm still alone. :->

I would help, but I'm having a fun time debugging this week myself ;-) I'll let you if/when I can help out though.

Quoted 5 lines

Jan

[1] http://permalink.gmane.org/gmane.comp.emulators.kvm.devel/17968