* [Qemu-devel] [5188] Add missing files from previous commit. @ 2008-09-10 18:18 Anthony Liguori [not found] ` <F1F483DC-A893-418A-B8DE-CEE38834BD31@hotmail.com> 0 siblings, 1 reply; 3+ messages in thread From: Anthony Liguori @ 2008-09-10 18:18 UTC (permalink / raw) To: qemu-devel 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 <aliguori@us.ibm.com> + * + * 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 <sys/syscall.h> +#include <pthread.h> + +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 <aliguori@us.ibm.com> + * + * 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 <signal.h> + +#if defined(__linux__) && !defined(SYS_signalfd) +struct signalfd_siginfo { + uint32_t ssi_signo; + uint8_t pad[124]; +}; +#else +#include <linux/signalfd.h> +#endif + +int qemu_signalfd(const sigset_t *mask); + +int qemu_eventfd(int *fds); + +#endif ^ permalink raw reply [flat|nested] 3+ messages in thread
[parent not found: <F1F483DC-A893-418A-B8DE-CEE38834BD31@hotmail.com>]
* Re: [Qemu-devel] [5188] Add missing files from previous commit. [not found] ` <F1F483DC-A893-418A-B8DE-CEE38834BD31@hotmail.com> @ 2008-09-11 4:15 ` C.W. Betts 2008-09-11 12:43 ` Anthony Liguori 0 siblings, 1 reply; 3+ messages in thread From: C.W. Betts @ 2008-09-11 4:15 UTC (permalink / raw) To: qemu-devel [-- Attachment #1: Type: text/plain, Size: 4819 bytes --] This breaks compiling on Mac OS X, mainly because there isn't a file called <linux/signalfd.h>: 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 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 <aliguori@us.ibm.com> > + * > + * 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 <sys/syscall.h> > +#include <pthread.h> > + > +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 <aliguori@us.ibm.com> > + * > + * 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 <signal.h> > + > +#if defined(__linux__) && !defined(SYS_signalfd) > +struct signalfd_siginfo { > + uint32_t ssi_signo; > + uint8_t pad[124]; > +}; > +#else > +#include <linux/signalfd.h> > +#endif > + > +int qemu_signalfd(const sigset_t *mask); > + > +int qemu_eventfd(int *fds); > + > +#endif > > > > [-- Attachment #2: Type: text/html, Size: 9395 bytes --] ^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [Qemu-devel] [5188] Add missing files from previous commit. 2008-09-11 4:15 ` C.W. Betts @ 2008-09-11 12:43 ` Anthony Liguori 0 siblings, 0 replies; 3+ messages in thread From: Anthony Liguori @ 2008-09-11 12:43 UTC (permalink / raw) To: qemu-devel C.W. Betts wrote: > This breaks compiling on Mac OS X, mainly because there isn't a file > called <linux/signalfd.h>: > 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 >> <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 <aliguori@us.ibm.com <mailto:aliguori@us.ibm.com>> >> + * >> + * 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 <sys/syscall.h> >> +#include <pthread.h> >> + >> +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 <aliguori@us.ibm.com <mailto:aliguori@us.ibm.com>> >> + * >> + * 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 <signal.h> >> + >> +#if defined(__linux__) && !defined(SYS_signalfd) >> +struct signalfd_siginfo { >> + uint32_t ssi_signo; >> + uint8_t pad[124]; >> +}; >> +#else >> +#include <linux/signalfd.h> >> +#endif >> + >> +int qemu_signalfd(const sigset_t *mask); >> + >> +int qemu_eventfd(int *fds); >> + >> +#endif >> >> >> >> > ^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2008-09-11 12:44 UTC | newest] Thread overview: 3+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2008-09-10 18:18 [Qemu-devel] [5188] Add missing files from previous commit Anthony Liguori [not found] ` <F1F483DC-A893-418A-B8DE-CEE38834BD31@hotmail.com> 2008-09-11 4:15 ` C.W. Betts 2008-09-11 12:43 ` Anthony Liguori
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).