Is KVM_GET_SREGS safe from other threads?
Hi! We've noticed that sometimes KVM_GET_SREGS from a signal handler hangs. We use it like this: static void handle_sigquit(int sig) { int i; for (i = 0; i nrcpus; i++) { struct kvm_cpu *cpu = kvm_cpus[i]; kvm_cpu__show_registers(cpu); -- here kvm_cpu__show_code(cpu); kvm_cpu__show_page_tables(cpu); } and void kvm_cpu__show_registers(struct kvm_cpu *self) { [...] if (ioctl(self-vcpu_fd, KVM_GET_SREGS, sregs) 0) die(KVM_GET_REGS failed); is it not OK to call KVM_GET_SREGS from other threads than the one that's doing KVM_RUN? Pekka -- To unsubscribe from this list: send the line unsubscribe kvm in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: Is KVM_GET_SREGS safe from other threads?
On 05/08/2011 11:24 AM, Pekka Enberg wrote: Hi! We've noticed that sometimes KVM_GET_SREGS from a signal handler hangs. We use it like this: static void handle_sigquit(int sig) { int i; for (i = 0; i nrcpus; i++) { struct kvm_cpu *cpu = kvm_cpus[i]; kvm_cpu__show_registers(cpu);-- here kvm_cpu__show_code(cpu); kvm_cpu__show_page_tables(cpu); } and void kvm_cpu__show_registers(struct kvm_cpu *self) { [...] if (ioctl(self-vcpu_fd, KVM_GET_SREGS,sregs) 0) die(KVM_GET_REGS failed); is it not OK to call KVM_GET_SREGS from other threads than the one that's doing KVM_RUN? From Documentation/kvm/api.txt: - vcpu ioctls: These query and set attributes that control the operation of a single virtual cpu. Only run vcpu ioctls from the same thread that was used to create the vcpu. So no, it is not okay (nor is it meaningful, you get a register snapshot that is disconnected from all other vcpu state). -- error compiling committee.c: too many arguments to function -- To unsubscribe from this list: send the line unsubscribe kvm in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: Is KVM_GET_SREGS safe from other threads?
On Sun, May 8, 2011 at 11:50 AM, Avi Kivity a...@redhat.com wrote: On 05/08/2011 11:24 AM, Pekka Enberg wrote: Hi! We've noticed that sometimes KVM_GET_SREGS from a signal handler hangs. We use it like this: static void handle_sigquit(int sig) { int i; for (i = 0; i nrcpus; i++) { struct kvm_cpu *cpu = kvm_cpus[i]; kvm_cpu__show_registers(cpu);-- here kvm_cpu__show_code(cpu); kvm_cpu__show_page_tables(cpu); } and void kvm_cpu__show_registers(struct kvm_cpu *self) { [...] if (ioctl(self-vcpu_fd, KVM_GET_SREGS,sregs) 0) die(KVM_GET_REGS failed); is it not OK to call KVM_GET_SREGS from other threads than the one that's doing KVM_RUN? From Documentation/kvm/api.txt: - vcpu ioctls: These query and set attributes that control the operation of a single virtual cpu. Only run vcpu ioctls from the same thread that was used to create the vcpu. So no, it is not okay (nor is it meaningful, you get a register snapshot that is disconnected from all other vcpu state). Aah, I've read that part at some point but forgot all about it. Thanks, Avi! -- To unsubscribe from this list: send the line unsubscribe kvm in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html