From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1KdnDh-0000nX-Ky for qemu-devel@nongnu.org; Thu, 11 Sep 2008 10:32:29 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1KdnDg-0000m7-Nc for qemu-devel@nongnu.org; Thu, 11 Sep 2008 10:32:28 -0400 Received: from [199.232.76.173] (port=47985 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1KdnDg-0000ly-Hs for qemu-devel@nongnu.org; Thu, 11 Sep 2008 10:32:28 -0400 Received: from savannah.gnu.org ([199.232.41.3]:40659 helo=sv.gnu.org) by monty-python.gnu.org with esmtps (TLS-1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.60) (envelope-from ) id 1KdnDg-0005Sl-CS for qemu-devel@nongnu.org; Thu, 11 Sep 2008 10:32:28 -0400 Received: from cvs.savannah.gnu.org ([199.232.41.69]) by sv.gnu.org with esmtp (Exim 4.63) (envelope-from ) id 1KdnDf-00075i-Lu for qemu-devel@nongnu.org; Thu, 11 Sep 2008 14:32:27 +0000 Received: from aliguori by cvs.savannah.gnu.org with local (Exim 4.63) (envelope-from ) id 1KdnDf-00075d-FE for qemu-devel@nongnu.org; Thu, 11 Sep 2008 14:32:27 +0000 MIME-Version: 1.0 Errors-To: aliguori Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From: Anthony Liguori Message-Id: Date: Thu, 11 Sep 2008 14:32:27 +0000 Subject: [Qemu-devel] [5195] Make sure to read siginfo from signalfd Reply-To: qemu-devel@nongnu.org List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Revision: 5195 http://svn.sv.gnu.org/viewvc/?view=rev&root=qemu&revision=5195 Author: aliguori Date: 2008-09-11 14:32:27 +0000 (Thu, 11 Sep 2008) Log Message: ----------- Make sure to read siginfo from signalfd Otherwise, we'll idle at 100% cpu. Signed-off-by: Anthony Liguori Modified Paths: -------------- trunk/block-raw-posix.c Modified: trunk/block-raw-posix.c =================================================================== --- trunk/block-raw-posix.c 2008-09-11 14:18:56 UTC (rev 5194) +++ trunk/block-raw-posix.c 2008-09-11 14:32:27 UTC (rev 5195) @@ -449,7 +449,31 @@ { RawAIOCB *acb, **pacb; int ret; + size_t offset; + union { + struct qemu_signalfd_siginfo siginfo; + char buf[128]; + } sig; + /* try to read from signalfd, don't freak out if we can't read anything */ + offset = 0; + while (offset < 128) { + ssize_t len; + + len = read(aio_sig_fd, sig.buf + offset, 128 - offset); + if (len == -1 && errno == EINTR) + continue; + if (len == -1 && errno == EAGAIN) { + /* there is no natural reason for this to happen, + * so we'll spin hard until we get everything just + * to be on the safe side. */ + if (offset > 0) + continue; + } + + offset += len; + } + for(;;) { pacb = &first_aio; for(;;) { @@ -498,6 +522,9 @@ sigprocmask(SIG_BLOCK, &mask, NULL); aio_sig_fd = qemu_signalfd(&mask); + + fcntl(aio_sig_fd, F_SETFL, O_NONBLOCK); + #if !defined(QEMU_IMG) && !defined(QEMU_NBD) qemu_set_fd_handler2(aio_sig_fd, NULL, qemu_aio_poll, NULL, NULL); #endif