Patchwork [03/16] Convert io handlers to QLIST

login
register
mail settings
Submitter Juan Quintela
Date March 11, 2010, 4:55 p.m.
Message ID <b0612c2122e7152b906945ba4f64e9ae2e34aa78.1268326362.git.quintela@redhat.com>
Download mbox | patch
Permalink /patch/47346/
State New
Headers show

Comments

Juan Quintela - March 11, 2010, 4:55 p.m.
Signed-off-by: Juan Quintela <quintela@redhat.com>
---
 vl.c |   35 ++++++++++++++---------------------
 1 files changed, 14 insertions(+), 21 deletions(-)
Anthony Liguori - March 22, 2010, 7:40 p.m.
On 03/11/2010 10:55 AM, Juan Quintela wrote:
> Signed-off-by: Juan Quintela<quintela@redhat.com>
>    

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;
> +            }
>           }
>       }
>
>

Patch

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;
+            }
         }
     }