Message ID | 1456190414-14451-1-git-send-email-famz@redhat.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Tue, Feb 23, 2016 at 09:20:14AM +0800, Fam Zheng wrote: > Reported-by: Matthew Fortune <Matthew.Fortune@imgtec.com> > Signed-off-by: Fam Zheng <famz@redhat.com> > --- > aio-posix.c | 8 +++++--- > 1 file changed, 5 insertions(+), 3 deletions(-) > > diff --git a/aio-posix.c b/aio-posix.c > index fa7f8ab..97e5a0c 100644 > --- a/aio-posix.c > +++ b/aio-posix.c > @@ -18,7 +18,9 @@ > #include "block/block.h" > #include "qemu/queue.h" > #include "qemu/sockets.h" > -#ifdef CONFIG_EPOLL > + > +#if defined(CONFIG_EPOLL) && defined(CONFIG_EPOLL_CREATE1) > +#define USE_EPOLL 1 Other Linux syscalls with multiple versions for CLOEXEC support tend to be wrapped in util/osdep.c. When CLOEXEC isn't available they just skip it rather than manually adding the flag using fcntl(2). The following function is added: int qemu_epoll_create(void) { #if defined(CONFIG_EPOLL_CREATE1) return epoll_create1(EPOLL_CLOEXEC); #elif defined(CONFIG_EPOLL) return epoll_create(1); #else return -ENOSYS; #endif } Now the rest of QEMU can rely on just CONFIG_EPOLL. Even if you don't want to add qemu_epoll_create(), please keep things simple by doing just s/CONFIG_EPOLL/CONFIG_EPOLL_CREATE1/ in aio-posix.c. That way USE_EPOLL isn't needed. It's confusing to have multiple preprocessor definitions related to epoll.
diff --git a/aio-posix.c b/aio-posix.c index fa7f8ab..97e5a0c 100644 --- a/aio-posix.c +++ b/aio-posix.c @@ -18,7 +18,9 @@ #include "block/block.h" #include "qemu/queue.h" #include "qemu/sockets.h" -#ifdef CONFIG_EPOLL + +#if defined(CONFIG_EPOLL) && defined(CONFIG_EPOLL_CREATE1) +#define USE_EPOLL 1 #include <sys/epoll.h> #endif @@ -33,7 +35,7 @@ struct AioHandler QLIST_ENTRY(AioHandler) node; }; -#ifdef CONFIG_EPOLL +#ifdef USE_EPOLL /* The fd number threashold to switch to epoll */ #define EPOLL_ENABLE_THRESHOLD 64 @@ -483,7 +485,7 @@ bool aio_poll(AioContext *ctx, bool blocking) void aio_context_setup(AioContext *ctx, Error **errp) { -#ifdef CONFIG_EPOLL +#ifdef USE_EPOLL assert(!ctx->epollfd); ctx->epollfd = epoll_create1(EPOLL_CLOEXEC); if (ctx->epollfd == -1) {
Reported-by: Matthew Fortune <Matthew.Fortune@imgtec.com> Signed-off-by: Fam Zheng <famz@redhat.com> --- aio-posix.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-)