Re: [Qemu-devel] Re: [PATCH 08/10] MCE: Relay UCR MCE to guest

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, Oct 20, 2010 at 02:51:56PM -0500, Anthony Liguori wrote:
> >+        e = errno;
> >+
> >+        qemu_mutex_lock(&qemu_global_mutex);
> >+
> >+        if (r == -1&&  !(e == EAGAIN || e == EINTR)) {
> >+            fprintf(stderr, "sigtimedwait: %s\n", strerror(e));
> >+            exit(1);
> >+        }
> >+
> >+        switch (r) {
> >+        case SIGBUS:
> >+#ifdef TARGET_I386
> >+            if (kvm_on_sigbus_vcpu(env, siginfo.si_code, siginfo.si_addr))
> >+#endif
> >+                sigbus_reraise();
> >+            break;
> >+        default:
> >+            break;
> >+        }
> >+
> >+        r = sigpending(&chkset);
> >+        if (r == -1) {
> >+            fprintf(stderr, "sigpending: %s\n", strerror(e));
> >+            exit(1);
> >+        }
> >+    } while (sigismember(&chkset, SIG_IPI) || sigismember(&chkset, SIGBUS));
> >  }
> 
> I don't understand why this loop is needed but we specifically wait
> for a signal to get delivered that's either SIG_IPI or SIGBUS.  We
> then check whether a SIG_IPI or SIGBUS is pending and loop waiting
> for signals again.
>
> Shouldn't we be looping on just sigismember(SIGBUS)?

Think of SIG_IPI and SIGBUS pending. SIGBUS must be processed
immediately.

Yes, sigismember(SIGBUS) would be fine. But the current code too.

> BTW, we're no longer respecting timeout because we're not adjusting
> ts after each iteration.

Right, timeout not used at the moment.
--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux