Is KVM_GET_SREGS safe from other threads?

2011-05-08 Thread Pekka Enberg
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?

2011-05-08 Thread Avi Kivity

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?

2011-05-08 Thread Pekka Enberg
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