From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:42328) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TWy0M-00062k-H4 for qemu-devel@nongnu.org; Fri, 09 Nov 2012 18:28:55 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1TWy0L-0008QE-Cd for qemu-devel@nongnu.org; Fri, 09 Nov 2012 18:28:54 -0500 Received: from mail-we0-f173.google.com ([74.125.82.173]:45520) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TWy0L-0008Q7-5I for qemu-devel@nongnu.org; Fri, 09 Nov 2012 18:28:53 -0500 Received: by mail-we0-f173.google.com with SMTP id t11so1931454wey.4 for ; Fri, 09 Nov 2012 15:28:52 -0800 (PST) Sender: Paolo Bonzini Message-ID: <509D91B2.30604@redhat.com> Date: Sat, 10 Nov 2012 00:28:50 +0100 From: Paolo Bonzini MIME-Version: 1.0 References: In-Reply-To: Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH] Revert "aio: clean up now-unused functions" List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: malc , qemu-devel Il 09/11/2012 21:43, malc ha scritto: > > Breaks (at least) SB16. Apparently doesn't do what commit message says > it does. > > This reverts commit 22bfa75eafc21522afbb265091faa9cc0649e9fb. NACK in this shape, but reverting just the async.c parts (and making aio_bh_update_timeout static otherwise you get a warning) is fine. Paolo > --- > async.c | 23 ++++++++++++++++------- > oslib-posix.c | 31 +++++++++++++++++++++++++++++++ > qemu-aio.h | 1 + > qemu-common.h | 1 + > 4 files changed, 49 insertions(+), 7 deletions(-) > > diff --git a/async.c b/async.c > index 04f9dcb..564526f 100644 > --- a/async.c > +++ b/async.c > @@ -117,20 +117,16 @@ void qemu_bh_delete(QEMUBH *bh) > bh->deleted = 1; > } > > -static gboolean > -aio_ctx_prepare(GSource *source, gint *timeout) > +void aio_bh_update_timeout(AioContext *ctx, uint32_t *timeout) > { > - AioContext *ctx = (AioContext *) source; > QEMUBH *bh; > - bool scheduled = false; > > for (bh = ctx->first_bh; bh; bh = bh->next) { > if (!bh->deleted && bh->scheduled) { > - scheduled = true; > if (bh->idle) { > /* idle bottom halves will be polled at least > * every 10ms */ > - *timeout = 10; > + *timeout = MIN(10, *timeout); > } else { > /* non-idle bottom halves will be executed > * immediately */ > @@ -139,8 +135,21 @@ aio_ctx_prepare(GSource *source, gint *timeout) > } > } > } > +} > + > +static gboolean > +aio_ctx_prepare(GSource *source, gint *timeout) > +{ > + AioContext *ctx = (AioContext *) source; > + uint32_t wait = -1; > + aio_bh_update_timeout(ctx, &wait); > + > + if (wait != -1) { > + *timeout = MIN(*timeout, wait); > + return wait == 0; > + } > > - return scheduled; > + return false; > } > > static gboolean > diff --git a/oslib-posix.c b/oslib-posix.c > index 9db9c3d..dbeb627 100644 > --- a/oslib-posix.c > +++ b/oslib-posix.c > @@ -61,6 +61,9 @@ static int running_on_valgrind = -1; > #ifdef CONFIG_LINUX > #include > #endif > +#ifdef CONFIG_EVENTFD > +#include > +#endif > > int qemu_get_thread_id(void) > { > @@ -180,6 +183,34 @@ int qemu_pipe(int pipefd[2]) > return ret; > } > > +/* > + * Creates an eventfd that looks like a pipe and has EFD_CLOEXEC set. > + */ > +int qemu_eventfd(int fds[2]) > +{ > +#ifdef CONFIG_EVENTFD > + int ret; > + > + ret = eventfd(0, 0); > + if (ret >= 0) { > + fds[0] = ret; > + fds[1] = dup(ret); > + if (fds[1] == -1) { > + close(ret); > + return -1; > + } > + qemu_set_cloexec(ret); > + qemu_set_cloexec(fds[1]); > + return 0; > + } > + if (errno != ENOSYS) { > + return -1; > + } > +#endif > + > + return qemu_pipe(fds); > +} > + > int qemu_utimens(const char *path, const struct timespec *times) > { > struct timeval tv[2], tv_now; > diff --git a/qemu-aio.h b/qemu-aio.h > index 1b7eb6e..2354617 100644 > --- a/qemu-aio.h > +++ b/qemu-aio.h > @@ -125,6 +125,7 @@ void aio_notify(AioContext *ctx); > * These are internal functions used by the QEMU main loop. > */ > int aio_bh_poll(AioContext *ctx); > +void aio_bh_update_timeout(AioContext *ctx, uint32_t *timeout); > > /** > * qemu_bh_schedule: Schedule a bottom half. > diff --git a/qemu-common.h b/qemu-common.h > index ac9985c..5059a97 100644 > --- a/qemu-common.h > +++ b/qemu-common.h > @@ -218,6 +218,7 @@ ssize_t qemu_recv_full(int fd, void *buf, size_t count, int flags) > QEMU_WARN_UNUSED_RESULT; > > #ifndef _WIN32 > +int qemu_eventfd(int pipefd[2]); > int qemu_pipe(int pipefd[2]); > #endif > >