From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1NtnU9-0007I8-EN for qemu-devel@nongnu.org; Mon, 22 Mar 2010 15:40:25 -0400 Received: from [199.232.76.173] (port=43435 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1NtnU8-0007Hj-Vc for qemu-devel@nongnu.org; Mon, 22 Mar 2010 15:40:25 -0400 Received: from Debian-exim by monty-python.gnu.org with spam-scanned (Exim 4.60) (envelope-from ) id 1NtnU7-0005XV-Ab for qemu-devel@nongnu.org; Mon, 22 Mar 2010 15:40:24 -0400 Received: from mail-fx0-f221.google.com ([209.85.220.221]:58937) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1NtnU7-0005XN-0G for qemu-devel@nongnu.org; Mon, 22 Mar 2010 15:40:23 -0400 Received: by fxm21 with SMTP id 21so2133653fxm.2 for ; Mon, 22 Mar 2010 12:40:21 -0700 (PDT) Message-ID: <4BA7C79F.8090800@codemonkey.ws> Date: Mon, 22 Mar 2010 14:40:15 -0500 From: Anthony Liguori MIME-Version: 1.0 Subject: Re: [Qemu-devel] [PATCH 03/16] Convert io handlers to QLIST References: In-Reply-To: Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Juan Quintela Cc: qemu-devel@nongnu.org On 03/11/2010 10:55 AM, Juan Quintela wrote: > Signed-off-by: Juan Quintela > Applied 3-7, thanks. Regards, Anthony Liguori > --- > vl.c | 35 ++++++++++++++--------------------- > 1 files changed, 14 insertions(+), 21 deletions(-) > > diff --git a/vl.c b/vl.c > index 10d8e34..051eb1c 100644 > --- a/vl.c > +++ b/vl.c > @@ -2597,10 +2597,12 @@ typedef struct IOHandlerRecord { > void *opaque; > /* temporary data */ > struct pollfd *ufd; > - struct IOHandlerRecord *next; > + QLIST_ENTRY(IOHandlerRecord) next; > } IOHandlerRecord; > > -static IOHandlerRecord *first_io_handler; > +static QLIST_HEAD(, IOHandlerRecord) io_handlers = > + QLIST_HEAD_INITIALIZER(io_handlers); > + > > /* XXX: fd_read_poll should be suppressed, but an API change is > necessary in the character devices to suppress fd_can_read(). */ > @@ -2610,28 +2612,22 @@ int qemu_set_fd_handler2(int fd, > IOHandler *fd_write, > void *opaque) > { > - IOHandlerRecord **pioh, *ioh; > + IOHandlerRecord *ioh; > > if (!fd_read&& !fd_write) { > - pioh =&first_io_handler; > - for(;;) { > - ioh = *pioh; > - if (ioh == NULL) > - break; > + QLIST_FOREACH(ioh,&io_handlers, next) { > if (ioh->fd == fd) { > ioh->deleted = 1; > break; > } > - pioh =&ioh->next; > } > } else { > - for(ioh = first_io_handler; ioh != NULL; ioh = ioh->next) { > + QLIST_FOREACH(ioh,&io_handlers, next) { > if (ioh->fd == fd) > goto found; > } > ioh = qemu_mallocz(sizeof(IOHandlerRecord)); > - ioh->next = first_io_handler; > - first_io_handler = ioh; > + QLIST_INSERT_HEAD(&io_handlers, ioh, next); > found: > ioh->fd = fd; > ioh->fd_read_poll = fd_read_poll; > @@ -3822,7 +3818,7 @@ void main_loop_wait(int timeout) > FD_ZERO(&rfds); > FD_ZERO(&wfds); > FD_ZERO(&xfds); > - for(ioh = first_io_handler; ioh != NULL; ioh = ioh->next) { > + QLIST_FOREACH(ioh,&io_handlers, next) { > if (ioh->deleted) > continue; > if (ioh->fd_read&& > @@ -3848,9 +3844,9 @@ void main_loop_wait(int timeout) > ret = select(nfds + 1,&rfds,&wfds,&xfds,&tv); > qemu_mutex_lock_iothread(); > if (ret> 0) { > - IOHandlerRecord **pioh; > + IOHandlerRecord *pioh; > > - for(ioh = first_io_handler; ioh != NULL; ioh = ioh->next) { > + QLIST_FOREACH(ioh,&io_handlers, next) { > if (!ioh->deleted&& ioh->fd_read&& FD_ISSET(ioh->fd,&rfds)) { > ioh->fd_read(ioh->opaque); > } > @@ -3860,14 +3856,11 @@ void main_loop_wait(int timeout) > } > > /* remove deleted IO handlers */ > - pioh =&first_io_handler; > - while (*pioh) { > - ioh = *pioh; > + QLIST_FOREACH_SAFE(ioh,&io_handlers, next, pioh) { > if (ioh->deleted) { > - *pioh = ioh->next; > + QLIST_REMOVE(ioh, next); > qemu_free(ioh); > - } else > - pioh =&ioh->next; > + } > } > } > >