From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1KdlWp-0001s5-C6 for qemu-devel@nongnu.org; Thu, 11 Sep 2008 08:44:07 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1KdlWn-0001rd-Nu for qemu-devel@nongnu.org; Thu, 11 Sep 2008 08:44:05 -0400 Received: from [199.232.76.173] (port=48299 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1KdlWn-0001ra-I1 for qemu-devel@nongnu.org; Thu, 11 Sep 2008 08:44:05 -0400 Received: from yw-out-1718.google.com ([74.125.46.155]:33895) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1KdlWn-0003RJ-Dc for qemu-devel@nongnu.org; Thu, 11 Sep 2008 08:44:05 -0400 Received: by yw-out-1718.google.com with SMTP id 6so104885ywa.82 for ; Thu, 11 Sep 2008 05:44:04 -0700 (PDT) Message-ID: <48C91259.4010903@codemonkey.ws> Date: Thu, 11 Sep 2008 07:43:05 -0500 From: Anthony Liguori MIME-Version: 1.0 Subject: Re: [Qemu-devel] [5188] Add missing files from previous commit. References: In-Reply-To: Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit 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 C.W. Betts wrote: > This breaks compiling on Mac OS X, mainly because there isn't a file > called : > gcc -Wall -O2 -g -fno-strict-aliasing -mdynamic-no-pic -m32 -I. > -I/Users/cwbetts/makestuff/qemu-allmac/src -MMD -MP -MT > qemu-nbd-block-raw-posix.o -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 > -D_LARGEFILE_SOURCE -I/Users/cwbetts/makestuff/qemu-allmac/src/slirp > -DQEMU_NBD -c -o qemu-nbd-block-raw-posix.o > /Users/cwbetts/makestuff/qemu-allmac/src/block-raw-posix.c > In file included from > /Users/cwbetts/makestuff/qemu-allmac/src/block-raw-posix.c:31: > /Users/cwbetts/makestuff/qemu-allmac/src/compatfd.h:25:28: error: > linux/signalfd.h: No such file or directory Oh, I see what's broken. I'll commit a fix in a couple hours. Thanks for catching that! Regards, Anthony Liguori > On Sep 10, 2008, at 12:18 PM, Anthony Liguori wrote: > >> Revision: 5188 >> http://svn.sv.gnu.org/viewvc/?view=rev&root=qemu&revision=5188 >> >> Author: aliguori >> Date: 2008-09-10 18:18:38 +0000 (Wed, 10 Sep 2008) >> >> Log Message: >> ----------- >> Add missing files from previous commit. >> >> Added Paths: >> ----------- >> trunk/compatfd.c >> trunk/compatfd.h >> >> Added: trunk/compatfd.c >> =================================================================== >> --- trunk/compatfd.c (rev 0) >> +++ trunk/compatfd.c 2008-09-10 18:18:38 UTC (rev 5188) >> @@ -0,0 +1,128 @@ >> +/* >> + * signalfd/eventfd compatibility >> + * >> + * Copyright IBM, Corp. 2008 >> + * >> + * Authors: >> + * Anthony Liguori > >> + * >> + * This work is licensed under the terms of the GNU GPL, version 2. See >> + * the COPYING file in the top-level directory. >> + * >> + */ >> + >> +#include "qemu-common.h" >> +#include "compatfd.h" >> + >> +#include >> +#include >> + >> +struct sigfd_compat_info >> +{ >> + sigset_t mask; >> + int fd; >> +}; >> + >> +static void *sigwait_compat(void *opaque) >> +{ >> + struct sigfd_compat_info *info = opaque; >> + int err; >> + sigset_t all; >> + >> + sigfillset(&all); >> + sigprocmask(SIG_BLOCK, &all, NULL); >> + >> + do { >> + siginfo_t siginfo; >> + >> + err = sigwaitinfo(&info->mask, &siginfo); >> + if (err == -1 && errno == EINTR) { >> + err = 0; >> + continue; >> + } >> + >> + if (err > 0) { >> + char buffer[128]; >> + size_t offset = 0; >> + >> + memcpy(buffer, &err, sizeof(err)); >> + while (offset < sizeof(buffer)) { >> + ssize_t len; >> + >> + len = write(info->fd, buffer + offset, >> + sizeof(buffer) - offset); >> + if (len == -1 && errno == EINTR) >> + continue; >> + >> + if (len <= 0) { >> + err = -1; >> + break; >> + } >> + >> + offset += len; >> + } >> + } >> + } while (err >= 0); >> + >> + return NULL; >> +} >> + >> +static int qemu_signalfd_compat(const sigset_t *mask) >> +{ >> + pthread_attr_t attr; >> + pthread_t tid; >> + struct sigfd_compat_info *info; >> + int fds[2]; >> + >> + info = malloc(sizeof(*info)); >> + if (info == NULL) { >> + errno = ENOMEM; >> + return -1; >> + } >> + >> + if (pipe(fds) == -1) { >> + free(info); >> + return -1; >> + } >> + >> + memcpy(&info->mask, mask, sizeof(*mask)); >> + info->fd = fds[1]; >> + >> + pthread_attr_init(&attr); >> + pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED); >> + >> + pthread_create(&tid, &attr, sigwait_compat, info); >> + >> + pthread_attr_destroy(&attr); >> + >> + return fds[0]; >> +} >> + >> +int qemu_signalfd(const sigset_t *mask) >> +{ >> +#if defined(SYS_signalfd) >> + int ret; >> + >> + ret = syscall(SYS_signalfd, -1, mask, _NSIG / 8); >> + if (!(ret == -1 && errno == ENOSYS)) >> + return ret; >> +#endif >> + >> + return qemu_signalfd_compat(mask); >> +} >> + >> +int qemu_eventfd(int *fds) >> +{ >> +#if defined(SYS_eventfd) >> + int ret; >> + >> + ret = syscall(SYS_eventfd, 0); >> + if (ret >= 0) { >> + fds[0] = fds[1] = ret; >> + return 0; >> + } else if (!(ret == -1 && errno == ENOSYS)) >> + return ret; >> +#endif >> + >> + return pipe(fds); >> +} >> >> Added: trunk/compatfd.h >> =================================================================== >> --- trunk/compatfd.h (rev 0) >> +++ trunk/compatfd.h 2008-09-10 18:18:38 UTC (rev 5188) >> @@ -0,0 +1,32 @@ >> +/* >> + * signalfd/eventfd compatibility >> + * >> + * Copyright IBM, Corp. 2008 >> + * >> + * Authors: >> + * Anthony Liguori > >> + * >> + * This work is licensed under the terms of the GNU GPL, version 2. See >> + * the COPYING file in the top-level directory. >> + * >> + */ >> + >> +#ifndef QEMU_COMPATFD_H >> +#define QEMU_COMPATFD_H >> + >> +#include >> + >> +#if defined(__linux__) && !defined(SYS_signalfd) >> +struct signalfd_siginfo { >> + uint32_t ssi_signo; >> + uint8_t pad[124]; >> +}; >> +#else >> +#include >> +#endif >> + >> +int qemu_signalfd(const sigset_t *mask); >> + >> +int qemu_eventfd(int *fds); >> + >> +#endif >> >> >> >> >