qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH 00/16] *** SUBJECT HERE ***
@ 2010-03-11 16:55 Juan Quintela
  2010-03-11 16:55 ` [Qemu-devel] [PATCH 01/16] migration: Clear fd also in error cases Juan Quintela
                   ` (15 more replies)
  0 siblings, 16 replies; 19+ messages in thread
From: Juan Quintela @ 2010-03-11 16:55 UTC (permalink / raw)
  To: qemu-devel

*** BLURB HERE ***

Juan Quintela (16):
  migration: Clear fd also in error cases
  migration: unix migration should obey autostart are the other ones
  Convert io handlers to QLIST
  remove useless cast
  rename IOCanRWHandler to IOCanReadHandler
  bt: remove bt_host_read_poll()
  Handle deleted IOHandlers in a single buffer
  tap: insert tap_can_send() into tap_send()
  qemu-char:stdio insert poll call into read one
  qemu-char:tcp insert poll call into read one
  qemu-char:fd insert poll call into read one
  qemu-char:pty insert poll call into read one
  qemu-char:udp insert poll call into read one
  Remove qemu_set_fd_handler2()
  Remove now unused fd_read_poll and all its only left user
  Add qemu_remove_fd_handler()

 aio.c               |    2 +-
 audio/alsaaudio.c   |    4 +-
 audio/ossaudio.c    |    6 +-
 bt-host.c           |    9 +----
 hw/xen_backend.c    |    4 +-
 migration-exec.c    |    9 ++--
 migration-fd.c      |    7 +--
 migration-tcp.c     |   13 +++---
 migration-unix.c    |   15 ++++---
 migration.c         |    8 ++--
 net/socket.c        |    6 +-
 net/tap.c           |   27 ++++--------
 net/vde.c           |    2 +-
 qemu-aio.h          |    4 +-
 qemu-char.c         |  112 ++++++++++++++++----------------------------------
 qemu-char.h         |   11 +----
 qemu-common.h       |    2 +-
 qemu-tool.c         |    9 ++--
 usb-linux.c         |    2 +-
 vl.c                |   92 +++++++++++++++++-------------------------
 vnc-auth-sasl.c     |    2 +-
 vnc-auth-vencrypt.c |    2 +-
 vnc.c               |   12 +++---
 23 files changed, 139 insertions(+), 221 deletions(-)

^ permalink raw reply	[flat|nested] 19+ messages in thread

* [Qemu-devel] [PATCH 01/16] migration: Clear fd also in error cases
  2010-03-11 16:55 [Qemu-devel] [PATCH 00/16] *** SUBJECT HERE *** Juan Quintela
@ 2010-03-11 16:55 ` Juan Quintela
  2010-03-11 16:55 ` [Qemu-devel] [PATCH 02/16] migration: unix migration should obey autostart are the other ones Juan Quintela
                   ` (14 subsequent siblings)
  15 siblings, 0 replies; 19+ messages in thread
From: Juan Quintela @ 2010-03-11 16:55 UTC (permalink / raw)
  To: qemu-devel

Not clearing the fd and closing the file makes qemu spin using 100%CPU
after incoming migration error.

See for instance bug:
https://bugzilla.redhat.com/show_bug.cgi?id=518032

Signed-off-by: Juan Quintela <quintela@redhat.com>
---
 migration-exec.c |    4 ++--
 migration-fd.c   |    4 ++--
 migration-tcp.c  |    5 ++---
 migration-unix.c |    5 ++---
 4 files changed, 8 insertions(+), 10 deletions(-)

diff --git a/migration-exec.c b/migration-exec.c
index 3edc026..6ff8449 100644
--- a/migration-exec.c
+++ b/migration-exec.c
@@ -120,12 +120,12 @@ static void exec_accept_incoming_migration(void *opaque)
     }
     qemu_announce_self();
     DPRINTF("successfully loaded vm state\n");
-    /* we've successfully migrated, close the fd */
-    qemu_set_fd_handler2(qemu_stdio_fd(f), NULL, NULL, NULL, NULL);
+
     if (autostart)
         vm_start();

 err:
+    qemu_set_fd_handler2(qemu_stdio_fd(f), NULL, NULL, NULL, NULL);
     qemu_fclose(f);
 }

diff --git a/migration-fd.c b/migration-fd.c
index 0cc74ad..9cf52ce 100644
--- a/migration-fd.c
+++ b/migration-fd.c
@@ -113,12 +113,12 @@ static void fd_accept_incoming_migration(void *opaque)
     }
     qemu_announce_self();
     DPRINTF("successfully loaded vm state\n");
-    /* we've successfully migrated, close the fd */
-    qemu_set_fd_handler2(qemu_stdio_fd(f), NULL, NULL, NULL, NULL);
+
     if (autostart)
         vm_start();

 err:
+    qemu_set_fd_handler2(qemu_stdio_fd(f), NULL, NULL, NULL, NULL);
     qemu_fclose(f);
 }

diff --git a/migration-tcp.c b/migration-tcp.c
index e7f307c..95ce722 100644
--- a/migration-tcp.c
+++ b/migration-tcp.c
@@ -170,15 +170,14 @@ static void tcp_accept_incoming_migration(void *opaque)
     qemu_announce_self();
     DPRINTF("successfully loaded vm state\n");

-    /* we've successfully migrated, close the server socket */
-    qemu_set_fd_handler2(s, NULL, NULL, NULL, NULL);
-    close(s);
     if (autostart)
         vm_start();

 out_fopen:
     qemu_fclose(f);
 out:
+    qemu_set_fd_handler2(s, NULL, NULL, NULL, NULL);
+    close(s);
     close(c);
 }

diff --git a/migration-unix.c b/migration-unix.c
index b7aab38..ce59a2a 100644
--- a/migration-unix.c
+++ b/migration-unix.c
@@ -176,13 +176,12 @@ static void unix_accept_incoming_migration(void *opaque)
     qemu_announce_self();
     DPRINTF("successfully loaded vm state\n");

-    /* we've successfully migrated, close the server socket */
-    qemu_set_fd_handler2(s, NULL, NULL, NULL, NULL);
-    close(s);

 out_fopen:
     qemu_fclose(f);
 out:
+    qemu_set_fd_handler2(s, NULL, NULL, NULL, NULL);
+    close(s);
     close(c);
 }

-- 
1.6.6.1

^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [Qemu-devel] [PATCH 02/16] migration: unix migration should obey autostart are the other ones
  2010-03-11 16:55 [Qemu-devel] [PATCH 00/16] *** SUBJECT HERE *** Juan Quintela
  2010-03-11 16:55 ` [Qemu-devel] [PATCH 01/16] migration: Clear fd also in error cases Juan Quintela
@ 2010-03-11 16:55 ` Juan Quintela
  2010-03-11 16:55 ` [Qemu-devel] [PATCH 03/16] Convert io handlers to QLIST Juan Quintela
                   ` (13 subsequent siblings)
  15 siblings, 0 replies; 19+ messages in thread
From: Juan Quintela @ 2010-03-11 16:55 UTC (permalink / raw)
  To: qemu-devel

This was the only incoming migration without autostart check

Signed-off-by: Juan Quintela <quintela@redhat.com>
---
 migration-unix.c |    2 ++
 1 files changed, 2 insertions(+), 0 deletions(-)

diff --git a/migration-unix.c b/migration-unix.c
index ce59a2a..49de1b9 100644
--- a/migration-unix.c
+++ b/migration-unix.c
@@ -176,6 +176,8 @@ static void unix_accept_incoming_migration(void *opaque)
     qemu_announce_self();
     DPRINTF("successfully loaded vm state\n");

+    if (autostart)
+        vm_start();

 out_fopen:
     qemu_fclose(f);
-- 
1.6.6.1

^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [Qemu-devel] [PATCH 03/16] Convert io handlers to QLIST
  2010-03-11 16:55 [Qemu-devel] [PATCH 00/16] *** SUBJECT HERE *** Juan Quintela
  2010-03-11 16:55 ` [Qemu-devel] [PATCH 01/16] migration: Clear fd also in error cases Juan Quintela
  2010-03-11 16:55 ` [Qemu-devel] [PATCH 02/16] migration: unix migration should obey autostart are the other ones Juan Quintela
@ 2010-03-11 16:55 ` Juan Quintela
  2010-03-22 19:40   ` Anthony Liguori
  2010-03-11 16:55 ` [Qemu-devel] [PATCH 04/16] remove useless cast Juan Quintela
                   ` (12 subsequent siblings)
  15 siblings, 1 reply; 19+ messages in thread
From: Juan Quintela @ 2010-03-11 16:55 UTC (permalink / raw)
  To: qemu-devel


Signed-off-by: Juan Quintela <quintela@redhat.com>
---
 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;
+            }
         }
     }

-- 
1.6.6.1

^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [Qemu-devel] [PATCH 04/16] remove useless cast
  2010-03-11 16:55 [Qemu-devel] [PATCH 00/16] *** SUBJECT HERE *** Juan Quintela
                   ` (2 preceding siblings ...)
  2010-03-11 16:55 ` [Qemu-devel] [PATCH 03/16] Convert io handlers to QLIST Juan Quintela
@ 2010-03-11 16:55 ` Juan Quintela
  2010-03-11 16:55 ` [Qemu-devel] [PATCH 05/16] rename IOCanRWHandler to IOCanReadHandler Juan Quintela
                   ` (11 subsequent siblings)
  15 siblings, 0 replies; 19+ messages in thread
From: Juan Quintela @ 2010-03-11 16:55 UTC (permalink / raw)
  To: qemu-devel

values are already pointers, no need to cast them to void *

Signed-off-by: Juan Quintela <quintela@redhat.com>
---
 migration-exec.c |    3 +--
 migration-fd.c   |    3 +--
 2 files changed, 2 insertions(+), 4 deletions(-)

diff --git a/migration-exec.c b/migration-exec.c
index 6ff8449..5435827 100644
--- a/migration-exec.c
+++ b/migration-exec.c
@@ -141,8 +141,7 @@ int exec_start_incoming_migration(const char *command)
     }

     qemu_set_fd_handler2(qemu_stdio_fd(f), NULL,
-			 exec_accept_incoming_migration, NULL,
-			 (void *)(unsigned long)f);
+			 exec_accept_incoming_migration, NULL, f);

     return 0;
 }
diff --git a/migration-fd.c b/migration-fd.c
index 9cf52ce..0abd372 100644
--- a/migration-fd.c
+++ b/migration-fd.c
@@ -136,8 +136,7 @@ int fd_start_incoming_migration(const char *infd)
         return -errno;
     }

-    qemu_set_fd_handler2(fd, NULL, fd_accept_incoming_migration, NULL,
-			 (void *)(unsigned long)f);
+    qemu_set_fd_handler2(fd, NULL, fd_accept_incoming_migration, NULL, f);

     return 0;
 }
-- 
1.6.6.1

^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [Qemu-devel] [PATCH 05/16] rename IOCanRWHandler to IOCanReadHandler
  2010-03-11 16:55 [Qemu-devel] [PATCH 00/16] *** SUBJECT HERE *** Juan Quintela
                   ` (3 preceding siblings ...)
  2010-03-11 16:55 ` [Qemu-devel] [PATCH 04/16] remove useless cast Juan Quintela
@ 2010-03-11 16:55 ` Juan Quintela
  2010-03-11 16:55 ` [Qemu-devel] [PATCH 06/16] bt: remove bt_host_read_poll() Juan Quintela
                   ` (10 subsequent siblings)
  15 siblings, 0 replies; 19+ messages in thread
From: Juan Quintela @ 2010-03-11 16:55 UTC (permalink / raw)
  To: qemu-devel

It was always only used for reads

Signed-off-by: Juan Quintela <quintela@redhat.com>
---
 qemu-char.c   |    4 ++--
 qemu-char.h   |    7 +++----
 qemu-common.h |    2 +-
 qemu-tool.c   |    2 +-
 vl.c          |    4 ++--
 5 files changed, 9 insertions(+), 10 deletions(-)

diff --git a/qemu-char.c b/qemu-char.c
index 86c7c5a..6ea4e8c 100644
--- a/qemu-char.c
+++ b/qemu-char.c
@@ -182,7 +182,7 @@ void qemu_chr_send_event(CharDriverState *s, int event)
 }

 void qemu_chr_add_handlers(CharDriverState *s,
-                           IOCanRWHandler *fd_can_read,
+                           IOCanReadHandler *fd_can_read,
                            IOReadHandler *fd_read,
                            IOEventHandler *fd_event,
                            void *opaque)
@@ -214,7 +214,7 @@ static CharDriverState *qemu_chr_open_null(QemuOpts *opts)
 #define MUX_BUFFER_SIZE 32	/* Must be a power of 2.  */
 #define MUX_BUFFER_MASK (MUX_BUFFER_SIZE - 1)
 typedef struct {
-    IOCanRWHandler *chr_can_read[MAX_MUX];
+    IOCanReadHandler *chr_can_read[MAX_MUX];
     IOReadHandler *chr_read[MAX_MUX];
     IOEventHandler *chr_event[MAX_MUX];
     void *ext_opaque[MAX_MUX];
diff --git a/qemu-char.h b/qemu-char.h
index bcc0766..3a9427b 100644
--- a/qemu-char.h
+++ b/qemu-char.h
@@ -57,7 +57,7 @@ struct CharDriverState {
     int (*chr_ioctl)(struct CharDriverState *s, int cmd, void *arg);
     int (*get_msgfd)(struct CharDriverState *s);
     IOEventHandler *chr_event;
-    IOCanRWHandler *chr_can_read;
+    IOCanReadHandler *chr_can_read;
     IOReadHandler *chr_read;
     void *handler_opaque;
     void (*chr_send_event)(struct CharDriverState *chr, int event);
@@ -79,7 +79,7 @@ void qemu_chr_printf(CharDriverState *s, const char *fmt, ...);
 int qemu_chr_write(CharDriverState *s, const uint8_t *buf, int len);
 void qemu_chr_send_event(CharDriverState *s, int event);
 void qemu_chr_add_handlers(CharDriverState *s,
-                           IOCanRWHandler *fd_can_read,
+                           IOCanReadHandler *fd_can_read,
                            IOReadHandler *fd_read,
                            IOEventHandler *fd_event,
                            void *opaque);
@@ -98,7 +98,7 @@ extern int term_escape_char;
 /* async I/O support */

 int qemu_set_fd_handler2(int fd,
-                         IOCanRWHandler *fd_read_poll,
+                         IOCanReadHandler *fd_read_poll,
                          IOHandler *fd_read,
                          IOHandler *fd_write,
                          void *opaque);
@@ -106,5 +106,4 @@ int qemu_set_fd_handler(int fd,
                         IOHandler *fd_read,
                         IOHandler *fd_write,
                         void *opaque);
-
 #endif
diff --git a/qemu-common.h b/qemu-common.h
index 805be1a..42bfbcd 100644
--- a/qemu-common.h
+++ b/qemu-common.h
@@ -183,7 +183,7 @@ void QEMU_NORETURN hw_error(const char *fmt, ...)

 /* IO callbacks.  */
 typedef void IOReadHandler(void *opaque, const uint8_t *buf, int size);
-typedef int IOCanRWHandler(void *opaque);
+typedef int IOCanReadHandler(void *opaque);
 typedef void IOHandler(void *opaque);

 struct ParallelIOArg {
diff --git a/qemu-tool.c b/qemu-tool.c
index 18b48af..45e6df9 100644
--- a/qemu-tool.c
+++ b/qemu-tool.c
@@ -91,7 +91,7 @@ void qemu_bh_delete(QEMUBH *bh)
 }

 int qemu_set_fd_handler2(int fd,
-                         IOCanRWHandler *fd_read_poll,
+                         IOCanReadHandler *fd_read_poll,
                          IOHandler *fd_read,
                          IOHandler *fd_write,
                          void *opaque)
diff --git a/vl.c b/vl.c
index 051eb1c..e790c6a 100644
--- a/vl.c
+++ b/vl.c
@@ -2590,7 +2590,7 @@ void pcmcia_info(Monitor *mon)

 typedef struct IOHandlerRecord {
     int fd;
-    IOCanRWHandler *fd_read_poll;
+    IOCanReadHandler *fd_read_poll;
     IOHandler *fd_read;
     IOHandler *fd_write;
     int deleted;
@@ -2607,7 +2607,7 @@ static QLIST_HEAD(, IOHandlerRecord) io_handlers =
 /* XXX: fd_read_poll should be suppressed, but an API change is
    necessary in the character devices to suppress fd_can_read(). */
 int qemu_set_fd_handler2(int fd,
-                         IOCanRWHandler *fd_read_poll,
+                         IOCanReadHandler *fd_read_poll,
                          IOHandler *fd_read,
                          IOHandler *fd_write,
                          void *opaque)
-- 
1.6.6.1

^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [Qemu-devel] [PATCH 06/16] bt: remove bt_host_read_poll()
  2010-03-11 16:55 [Qemu-devel] [PATCH 00/16] *** SUBJECT HERE *** Juan Quintela
                   ` (4 preceding siblings ...)
  2010-03-11 16:55 ` [Qemu-devel] [PATCH 05/16] rename IOCanRWHandler to IOCanReadHandler Juan Quintela
@ 2010-03-11 16:55 ` Juan Quintela
  2010-03-11 16:55 ` [Qemu-devel] [PATCH 07/16] Handle deleted IOHandlers in a single buffer Juan Quintela
                   ` (9 subsequent siblings)
  15 siblings, 0 replies; 19+ messages in thread
From: Juan Quintela @ 2010-03-11 16:55 UTC (permalink / raw)
  To: qemu-devel

It allways returned true, that is the equivalent of not having the
callback.

Signed-off-by: Juan Quintela <quintela@redhat.com>
---
 bt-host.c |    9 +--------
 1 files changed, 1 insertions(+), 8 deletions(-)

diff --git a/bt-host.c b/bt-host.c
index 964ac11..33b2761 100644
--- a/bt-host.c
+++ b/bt-host.c
@@ -80,13 +80,6 @@ static void bt_host_sco(struct HCIInfo *hci, const uint8_t *data, int len)
     bt_host_send(hci, HCI_SCODATA_PKT, data, len);
 }

-static int bt_host_read_poll(void *opaque)
-{
-    struct bt_host_hci_s *s = (struct bt_host_hci_s *) opaque;
-
-    return !!s->hci.evt_recv;
-}
-
 static void bt_host_read(void *opaque)
 {
     struct bt_host_hci_s *s = (struct bt_host_hci_s *) opaque;
@@ -192,7 +185,7 @@ struct HCIInfo *bt_host_hci(const char *id)
     s->hci.acl_send = bt_host_acl;
     s->hci.bdaddr_set = bt_host_bdaddr_set;

-    qemu_set_fd_handler2(s->fd, bt_host_read_poll, bt_host_read, NULL, s);
+    qemu_set_fd_handler(s->fd, bt_host_read, NULL, s);

     return &s->hci;
 }
-- 
1.6.6.1

^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [Qemu-devel] [PATCH 07/16] Handle deleted IOHandlers in a single buffer
  2010-03-11 16:55 [Qemu-devel] [PATCH 00/16] *** SUBJECT HERE *** Juan Quintela
                   ` (5 preceding siblings ...)
  2010-03-11 16:55 ` [Qemu-devel] [PATCH 06/16] bt: remove bt_host_read_poll() Juan Quintela
@ 2010-03-11 16:55 ` Juan Quintela
  2010-03-11 16:55 ` [Qemu-devel] [PATCH 08/16] tap: insert tap_can_send() into tap_send() Juan Quintela
                   ` (8 subsequent siblings)
  15 siblings, 0 replies; 19+ messages in thread
From: Juan Quintela @ 2010-03-11 16:55 UTC (permalink / raw)
  To: qemu-devel


Signed-off-by: Juan Quintela <quintela@redhat.com>
---
 vl.c |   17 +++++++----------
 1 files changed, 7 insertions(+), 10 deletions(-)

diff --git a/vl.c b/vl.c
index e790c6a..52dc4f4 100644
--- a/vl.c
+++ b/vl.c
@@ -3846,20 +3846,17 @@ void main_loop_wait(int timeout)
     if (ret > 0) {
         IOHandlerRecord *pioh;

-        QLIST_FOREACH(ioh, &io_handlers, next) {
-            if (!ioh->deleted && ioh->fd_read && FD_ISSET(ioh->fd, &rfds)) {
-                ioh->fd_read(ioh->opaque);
-            }
-            if (!ioh->deleted && ioh->fd_write && FD_ISSET(ioh->fd, &wfds)) {
-                ioh->fd_write(ioh->opaque);
-            }
-        }
-
-	/* remove deleted IO handlers */
         QLIST_FOREACH_SAFE(ioh, &io_handlers, next, pioh) {
             if (ioh->deleted) {
                 QLIST_REMOVE(ioh, next);
                 qemu_free(ioh);
+                continue;
+            }
+            if (ioh->fd_read && FD_ISSET(ioh->fd, &rfds)) {
+                ioh->fd_read(ioh->opaque);
+            }
+            if (ioh->fd_write && FD_ISSET(ioh->fd, &wfds)) {
+                ioh->fd_write(ioh->opaque);
             }
         }
     }
-- 
1.6.6.1

^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [Qemu-devel] [PATCH 08/16] tap: insert tap_can_send() into tap_send()
  2010-03-11 16:55 [Qemu-devel] [PATCH 00/16] *** SUBJECT HERE *** Juan Quintela
                   ` (6 preceding siblings ...)
  2010-03-11 16:55 ` [Qemu-devel] [PATCH 07/16] Handle deleted IOHandlers in a single buffer Juan Quintela
@ 2010-03-11 16:55 ` Juan Quintela
  2010-03-17 17:52   ` Anthony Liguori
  2010-03-11 16:55 ` [Qemu-devel] [PATCH 09/16] qemu-char:stdio insert poll call into read one Juan Quintela
                   ` (7 subsequent siblings)
  15 siblings, 1 reply; 19+ messages in thread
From: Juan Quintela @ 2010-03-11 16:55 UTC (permalink / raw)
  To: qemu-devel

This way we can remove the poll test

Signed-off-by: Juan Quintela <quintela@redhat.com>
---
 net/tap.c |   27 +++++++++------------------
 1 files changed, 9 insertions(+), 18 deletions(-)

diff --git a/net/tap.c b/net/tap.c
index 7a7320c..3ab65a3 100644
--- a/net/tap.c
+++ b/net/tap.c
@@ -61,17 +61,15 @@ typedef struct TAPState {

 static int launch_script(const char *setup_script, const char *ifname, int fd);

-static int tap_can_send(void *opaque);
 static void tap_send(void *opaque);
 static void tap_writable(void *opaque);

 static void tap_update_fd_handler(TAPState *s)
 {
-    qemu_set_fd_handler2(s->fd,
-                         s->read_poll  ? tap_can_send : NULL,
-                         s->read_poll  ? tap_send     : NULL,
-                         s->write_poll ? tap_writable : NULL,
-                         s);
+    qemu_set_fd_handler(s->fd,
+                        s->read_poll  ? tap_send     : NULL,
+                        s->write_poll ? tap_writable : NULL,
+                        s);
 }

 static void tap_read_poll(TAPState *s, int enable)
@@ -165,13 +163,6 @@ static ssize_t tap_receive(VLANClientState *nc, const uint8_t *buf, size_t size)
     return tap_write_packet(s, iov, 1);
 }

-static int tap_can_send(void *opaque)
-{
-    TAPState *s = opaque;
-
-    return qemu_can_send_packet(&s->nc);
-}
-
 #ifndef __sun__
 ssize_t tap_read_packet(int tapfd, uint8_t *buf, int maxlen)
 {
@@ -188,12 +179,10 @@ static void tap_send_completed(VLANClientState *nc, ssize_t len)
 static void tap_send(void *opaque)
 {
     TAPState *s = opaque;
-    int size;

-    do {
+    while (qemu_can_send_packet(&s->nc) > 0) {
         uint8_t *buf = s->buf;
-
-        size = tap_read_packet(s->fd, s->buf, sizeof(s->buf));
+        int size = tap_read_packet(s->fd, s->buf, sizeof(s->buf));
         if (size <= 0) {
             break;
         }
@@ -206,8 +195,10 @@ static void tap_send(void *opaque)
         size = qemu_send_packet_async(&s->nc, buf, size, tap_send_completed);
         if (size == 0) {
             tap_read_poll(s, 0);
+        } else if (size < 0) {
+            return;
         }
-    } while (size > 0 && qemu_can_send_packet(&s->nc));
+    }
 }

 int tap_has_ufo(VLANClientState *nc)
-- 
1.6.6.1

^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [Qemu-devel] [PATCH 09/16] qemu-char:stdio insert poll call into read one
  2010-03-11 16:55 [Qemu-devel] [PATCH 00/16] *** SUBJECT HERE *** Juan Quintela
                   ` (7 preceding siblings ...)
  2010-03-11 16:55 ` [Qemu-devel] [PATCH 08/16] tap: insert tap_can_send() into tap_send() Juan Quintela
@ 2010-03-11 16:55 ` Juan Quintela
  2010-03-11 16:55 ` [Qemu-devel] [PATCH 10/16] qemu-char:tcp " Juan Quintela
                   ` (6 subsequent siblings)
  15 siblings, 0 replies; 19+ messages in thread
From: Juan Quintela @ 2010-03-11 16:55 UTC (permalink / raw)
  To: qemu-devel

This way we can remove the poll test

Signed-off-by: Juan Quintela <quintela@redhat.com>
---
 qemu-char.c |   22 +++++++---------------
 1 files changed, 7 insertions(+), 15 deletions(-)

diff --git a/qemu-char.c b/qemu-char.c
index 6ea4e8c..93b3ea4 100644
--- a/qemu-char.c
+++ b/qemu-char.c
@@ -664,8 +664,10 @@ static CharDriverState *qemu_chr_open_pipe(QemuOpts *opts)
 static uint8_t term_fifo[TERM_FIFO_MAX_SIZE];
 static int term_fifo_size;

-static int stdio_read_poll(void *opaque)
+static void stdio_read(void *opaque)
 {
+    int size;
+    uint8_t buf[1];
     CharDriverState *chr = opaque;

     /* try to flush the queue if needed */
@@ -673,19 +675,9 @@ static int stdio_read_poll(void *opaque)
         qemu_chr_read(chr, term_fifo, 1);
         term_fifo_size = 0;
     }
-    /* see if we can absorb more chars */
-    if (term_fifo_size == 0)
-        return 1;
-    else
-        return 0;
-}
-
-static void stdio_read(void *opaque)
-{
-    int size;
-    uint8_t buf[1];
-    CharDriverState *chr = opaque;
-
+    if (term_fifo_size != 0) {
+        return;
+    }
     size = read(0, buf, 1);
     if (size == 0) {
         /* stdin has been closed. Remove it from the active list.  */
@@ -757,7 +749,7 @@ static CharDriverState *qemu_chr_open_stdio(QemuOpts *opts)
         return NULL;
     chr = qemu_chr_open_fd(0, 1);
     chr->chr_close = qemu_chr_close_stdio;
-    qemu_set_fd_handler2(0, stdio_read_poll, stdio_read, NULL, chr);
+    qemu_set_fd_handler(0, stdio_read, NULL, chr);
     stdio_nb_clients++;
     term_init(opts);

-- 
1.6.6.1

^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [Qemu-devel] [PATCH 10/16] qemu-char:tcp insert poll call into read one
  2010-03-11 16:55 [Qemu-devel] [PATCH 00/16] *** SUBJECT HERE *** Juan Quintela
                   ` (8 preceding siblings ...)
  2010-03-11 16:55 ` [Qemu-devel] [PATCH 09/16] qemu-char:stdio insert poll call into read one Juan Quintela
@ 2010-03-11 16:55 ` Juan Quintela
  2010-03-11 16:55 ` [Qemu-devel] [PATCH 11/16] qemu-char:fd " Juan Quintela
                   ` (5 subsequent siblings)
  15 siblings, 0 replies; 19+ messages in thread
From: Juan Quintela @ 2010-03-11 16:55 UTC (permalink / raw)
  To: qemu-devel

This way we can remove the poll test

Signed-off-by: Juan Quintela <quintela@redhat.com>
---
 qemu-char.c |   18 +++++-------------
 1 files changed, 5 insertions(+), 13 deletions(-)

diff --git a/qemu-char.c b/qemu-char.c
index 93b3ea4..063da94 100644
--- a/qemu-char.c
+++ b/qemu-char.c
@@ -1899,16 +1899,6 @@ static int tcp_chr_write(CharDriverState *chr, const uint8_t *buf, int len)
     }
 }

-static int tcp_chr_read_poll(void *opaque)
-{
-    CharDriverState *chr = opaque;
-    TCPCharDriver *s = chr->opaque;
-    if (!s->connected)
-        return 0;
-    s->max_size = qemu_chr_can_read(chr);
-    return s->max_size;
-}
-
 #define IAC 255
 #define IAC_BREAK 243
 static void tcp_chr_process_IAC_bytes(CharDriverState *chr,
@@ -2030,7 +2020,10 @@ static void tcp_chr_read(void *opaque)
     uint8_t buf[READ_BUF_LEN];
     int len, size;

-    if (!s->connected || s->max_size <= 0)
+    if (!s->connected)
+        return;
+    s->max_size = qemu_chr_can_read(chr);
+    if (s->max_size <= 0)
         return;
     len = sizeof(buf);
     if (len > s->max_size)
@@ -2064,8 +2057,7 @@ static void tcp_chr_connect(void *opaque)
     TCPCharDriver *s = chr->opaque;

     s->connected = 1;
-    qemu_set_fd_handler2(s->fd, tcp_chr_read_poll,
-                         tcp_chr_read, NULL, chr);
+    qemu_set_fd_handler(s->fd, tcp_chr_read, NULL, chr);
     qemu_chr_generic_open(chr);
 }

-- 
1.6.6.1

^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [Qemu-devel] [PATCH 11/16] qemu-char:fd insert poll call into read one
  2010-03-11 16:55 [Qemu-devel] [PATCH 00/16] *** SUBJECT HERE *** Juan Quintela
                   ` (9 preceding siblings ...)
  2010-03-11 16:55 ` [Qemu-devel] [PATCH 10/16] qemu-char:tcp " Juan Quintela
@ 2010-03-11 16:55 ` Juan Quintela
  2010-03-11 16:55 ` [Qemu-devel] [PATCH 12/16] qemu-char:pty " Juan Quintela
                   ` (4 subsequent siblings)
  15 siblings, 0 replies; 19+ messages in thread
From: Juan Quintela @ 2010-03-11 16:55 UTC (permalink / raw)
  To: qemu-devel

This way we can remove the poll test

Signed-off-by: Juan Quintela <quintela@redhat.com>
---
 qemu-char.c |   15 ++++-----------
 1 files changed, 4 insertions(+), 11 deletions(-)

diff --git a/qemu-char.c b/qemu-char.c
index 063da94..875f254 100644
--- a/qemu-char.c
+++ b/qemu-char.c
@@ -536,15 +536,6 @@ static int fd_chr_write(CharDriverState *chr, const uint8_t *buf, int len)
     return send_all(s->fd_out, buf, len);
 }

-static int fd_chr_read_poll(void *opaque)
-{
-    CharDriverState *chr = opaque;
-    FDCharDriver *s = chr->opaque;
-
-    s->max_size = qemu_chr_can_read(chr);
-    return s->max_size;
-}
-
 static void fd_chr_read(void *opaque)
 {
     CharDriverState *chr = opaque;
@@ -552,6 +543,9 @@ static void fd_chr_read(void *opaque)
     int size, len;
     uint8_t buf[READ_BUF_LEN];

+    s->max_size = qemu_chr_can_read(chr);
+    if (s->max_size <= 0)
+        return;
     len = sizeof(buf);
     if (len > s->max_size)
         len = s->max_size;
@@ -576,8 +570,7 @@ static void fd_chr_update_read_handler(CharDriverState *chr)
     if (s->fd_in >= 0) {
         if (display_type == DT_NOGRAPHIC && s->fd_in == 0) {
         } else {
-            qemu_set_fd_handler2(s->fd_in, fd_chr_read_poll,
-                                 fd_chr_read, NULL, chr);
+            qemu_set_fd_handler(s->fd_in, fd_chr_read, NULL, chr);
         }
     }
 }
-- 
1.6.6.1

^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [Qemu-devel] [PATCH 12/16] qemu-char:pty insert poll call into read one
  2010-03-11 16:55 [Qemu-devel] [PATCH 00/16] *** SUBJECT HERE *** Juan Quintela
                   ` (10 preceding siblings ...)
  2010-03-11 16:55 ` [Qemu-devel] [PATCH 11/16] qemu-char:fd " Juan Quintela
@ 2010-03-11 16:55 ` Juan Quintela
  2010-03-11 16:55 ` [Qemu-devel] [PATCH 13/16] qemu-char:udp " Juan Quintela
                   ` (3 subsequent siblings)
  15 siblings, 0 replies; 19+ messages in thread
From: Juan Quintela @ 2010-03-11 16:55 UTC (permalink / raw)
  To: qemu-devel

This way we can remove the poll test

Signed-off-by: Juan Quintela <quintela@redhat.com>
---
 qemu-char.c |   16 +++++-----------
 1 files changed, 5 insertions(+), 11 deletions(-)

diff --git a/qemu-char.c b/qemu-char.c
index 875f254..bc294af 100644
--- a/qemu-char.c
+++ b/qemu-char.c
@@ -833,15 +833,6 @@ static int pty_chr_write(CharDriverState *chr, const uint8_t *buf, int len)
     return send_all(s->fd, buf, len);
 }

-static int pty_chr_read_poll(void *opaque)
-{
-    CharDriverState *chr = opaque;
-    PtyCharDriver *s = chr->opaque;
-
-    s->read_bytes = qemu_chr_can_read(chr);
-    return s->read_bytes;
-}
-
 static void pty_chr_read(void *opaque)
 {
     CharDriverState *chr = opaque;
@@ -849,6 +840,10 @@ static void pty_chr_read(void *opaque)
     int size, len;
     uint8_t buf[READ_BUF_LEN];

+    s->read_bytes = qemu_chr_can_read(chr);
+
+    if (s->read_bytes <= 0)
+        return;
     len = sizeof(buf);
     if (len > s->read_bytes)
         len = s->read_bytes;
@@ -870,8 +865,7 @@ static void pty_chr_update_read_handler(CharDriverState *chr)
 {
     PtyCharDriver *s = chr->opaque;

-    qemu_set_fd_handler2(s->fd, pty_chr_read_poll,
-                         pty_chr_read, NULL, chr);
+    qemu_set_fd_handler(s->fd, pty_chr_read, NULL, chr);
     s->polling = 1;
     /*
      * Short timeout here: just need wait long enougth that qemu makes
-- 
1.6.6.1

^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [Qemu-devel] [PATCH 13/16] qemu-char:udp insert poll call into read one
  2010-03-11 16:55 [Qemu-devel] [PATCH 00/16] *** SUBJECT HERE *** Juan Quintela
                   ` (11 preceding siblings ...)
  2010-03-11 16:55 ` [Qemu-devel] [PATCH 12/16] qemu-char:pty " Juan Quintela
@ 2010-03-11 16:55 ` Juan Quintela
  2010-03-11 16:55 ` [Qemu-devel] [PATCH 14/16] Remove qemu_set_fd_handler2() Juan Quintela
                   ` (2 subsequent siblings)
  15 siblings, 0 replies; 19+ messages in thread
From: Juan Quintela @ 2010-03-11 16:55 UTC (permalink / raw)
  To: qemu-devel

This way we can remove the poll test

Signed-off-by: Juan Quintela <quintela@redhat.com>
---
 qemu-char.c |   13 ++-----------
 1 files changed, 2 insertions(+), 11 deletions(-)

diff --git a/qemu-char.c b/qemu-char.c
index bc294af..9098d79 100644
--- a/qemu-char.c
+++ b/qemu-char.c
@@ -1767,7 +1767,7 @@ static int udp_chr_write(CharDriverState *chr, const uint8_t *buf, int len)
     return send(s->fd, (const void *)buf, len, 0);
 }

-static int udp_chr_read_poll(void *opaque)
+static void udp_chr_read(void *opaque)
 {
     CharDriverState *chr = opaque;
     NetCharDriver *s = chr->opaque;
@@ -1782,14 +1782,6 @@ static int udp_chr_read_poll(void *opaque)
         s->bufptr++;
         s->max_size = qemu_chr_can_read(chr);
     }
-    return s->max_size;
-}
-
-static void udp_chr_read(void *opaque)
-{
-    CharDriverState *chr = opaque;
-    NetCharDriver *s = chr->opaque;
-
     if (s->max_size == 0)
         return;
     s->bufcnt = recv(s->fd, (void *)s->buf, sizeof(s->buf), 0);
@@ -1810,8 +1802,7 @@ static void udp_chr_update_read_handler(CharDriverState *chr)
     NetCharDriver *s = chr->opaque;

     if (s->fd >= 0) {
-        qemu_set_fd_handler2(s->fd, udp_chr_read_poll,
-                             udp_chr_read, NULL, chr);
+        qemu_set_fd_handler(s->fd, udp_chr_read, NULL, chr);
     }
 }

-- 
1.6.6.1

^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [Qemu-devel] [PATCH 14/16] Remove qemu_set_fd_handler2()
  2010-03-11 16:55 [Qemu-devel] [PATCH 00/16] *** SUBJECT HERE *** Juan Quintela
                   ` (12 preceding siblings ...)
  2010-03-11 16:55 ` [Qemu-devel] [PATCH 13/16] qemu-char:udp " Juan Quintela
@ 2010-03-11 16:55 ` Juan Quintela
  2010-03-11 16:55 ` [Qemu-devel] [PATCH 15/16] Remove now unused fd_read_poll and all its only left user Juan Quintela
  2010-03-11 16:55 ` [Qemu-devel] [PATCH 16/16] Add qemu_remove_fd_handler() Juan Quintela
  15 siblings, 0 replies; 19+ messages in thread
From: Juan Quintela @ 2010-03-11 16:55 UTC (permalink / raw)
  To: qemu-devel

Now that there are no more poll_read users, we can remove it.  Convert all
users to qemu_set_fd_handler().

Signed-off-by: Juan Quintela <quintela@redhat.com>
---
 aio.c               |    2 +-
 migration-exec.c    |    6 +++---
 migration-fd.c      |    4 ++--
 migration-tcp.c     |   10 +++++-----
 migration-unix.c    |   10 +++++-----
 migration.c         |    8 ++++----
 qemu-aio.h          |    4 ++--
 qemu-char.c         |   12 ++++++------
 qemu-char.h         |    5 -----
 qemu-tool.c         |    9 ++++-----
 vl.c                |   24 ++++++------------------
 vnc-auth-sasl.c     |    2 +-
 vnc-auth-vencrypt.c |    2 +-
 vnc.c               |   12 ++++++------
 14 files changed, 46 insertions(+), 64 deletions(-)

diff --git a/aio.c b/aio.c
index f164a47..16105b3 100644
--- a/aio.c
+++ b/aio.c
@@ -93,7 +93,7 @@ int qemu_aio_set_fd_handler(int fd,
         node->opaque = opaque;
     }

-    qemu_set_fd_handler2(fd, NULL, io_read, io_write, opaque);
+    qemu_set_fd_handler(fd, io_read, io_write, opaque);

     return 0;
 }
diff --git a/migration-exec.c b/migration-exec.c
index 5435827..c971145 100644
--- a/migration-exec.c
+++ b/migration-exec.c
@@ -125,7 +125,7 @@ static void exec_accept_incoming_migration(void *opaque)
         vm_start();

 err:
-    qemu_set_fd_handler2(qemu_stdio_fd(f), NULL, NULL, NULL, NULL);
+    qemu_set_fd_handler(qemu_stdio_fd(f), NULL, NULL, NULL);
     qemu_fclose(f);
 }

@@ -140,8 +140,8 @@ int exec_start_incoming_migration(const char *command)
         return -errno;
     }

-    qemu_set_fd_handler2(qemu_stdio_fd(f), NULL,
-			 exec_accept_incoming_migration, NULL, f);
+    qemu_set_fd_handler(qemu_stdio_fd(f),
+                        exec_accept_incoming_migration, NULL, f);

     return 0;
 }
diff --git a/migration-fd.c b/migration-fd.c
index 0abd372..93e1c4e 100644
--- a/migration-fd.c
+++ b/migration-fd.c
@@ -118,7 +118,7 @@ static void fd_accept_incoming_migration(void *opaque)
         vm_start();

 err:
-    qemu_set_fd_handler2(qemu_stdio_fd(f), NULL, NULL, NULL, NULL);
+    qemu_set_fd_handler(qemu_stdio_fd(f), NULL, NULL, NULL);
     qemu_fclose(f);
 }

@@ -136,7 +136,7 @@ int fd_start_incoming_migration(const char *infd)
         return -errno;
     }

-    qemu_set_fd_handler2(fd, NULL, fd_accept_incoming_migration, NULL, f);
+    qemu_set_fd_handler(fd, fd_accept_incoming_migration, NULL, f);

     return 0;
 }
diff --git a/migration-tcp.c b/migration-tcp.c
index 95ce722..80ebbc5 100644
--- a/migration-tcp.c
+++ b/migration-tcp.c
@@ -66,7 +66,7 @@ static void tcp_wait_for_connect(void *opaque)
         return;
     }

-    qemu_set_fd_handler2(s->fd, NULL, NULL, NULL, NULL);
+    qemu_set_fd_handler(s->fd, NULL, NULL, NULL);

     if (val == 0)
         migrate_fd_connect(s);
@@ -123,7 +123,7 @@ MigrationState *tcp_start_outgoing_migration(Monitor *mon,
             ret = -(s->get_error(s));

         if (ret == -EINPROGRESS || ret == -EWOULDBLOCK)
-            qemu_set_fd_handler2(s->fd, NULL, NULL, tcp_wait_for_connect, s);
+            qemu_set_fd_handler(s->fd, NULL, tcp_wait_for_connect, s);
     } while (ret == -EINTR);

     if (ret < 0 && ret != -EINPROGRESS && ret != -EWOULDBLOCK) {
@@ -176,7 +176,7 @@ static void tcp_accept_incoming_migration(void *opaque)
 out_fopen:
     qemu_fclose(f);
 out:
-    qemu_set_fd_handler2(s, NULL, NULL, NULL, NULL);
+    qemu_set_fd_handler(s, NULL, NULL, NULL);
     close(s);
     close(c);
 }
@@ -205,8 +205,8 @@ int tcp_start_incoming_migration(const char *host_port)
     if (listen(s, 1) == -1)
         goto err;

-    qemu_set_fd_handler2(s, NULL, tcp_accept_incoming_migration, NULL,
-                         (void *)(unsigned long)s);
+    qemu_set_fd_handler(s, tcp_accept_incoming_migration, NULL,
+                        (void *)(unsigned long)s);

     return 0;

diff --git a/migration-unix.c b/migration-unix.c
index 49de1b9..891b3a7 100644
--- a/migration-unix.c
+++ b/migration-unix.c
@@ -65,7 +65,7 @@ static void unix_wait_for_connect(void *opaque)
         return;
     }

-    qemu_set_fd_handler2(s->fd, NULL, NULL, NULL, NULL);
+    qemu_set_fd_handler(s->fd, NULL, NULL, NULL);

     if (val == 0)
         migrate_fd_connect(s);
@@ -118,7 +118,7 @@ MigrationState *unix_start_outgoing_migration(Monitor *mon,
 	    ret = -(s->get_error(s));

         if (ret == -EINPROGRESS || ret == -EWOULDBLOCK)
-	    qemu_set_fd_handler2(s->fd, NULL, NULL, unix_wait_for_connect, s);
+	    qemu_set_fd_handler(s->fd, NULL, unix_wait_for_connect, s);
     } while (ret == -EINTR);

     if (ret < 0 && ret != -EINPROGRESS && ret != -EWOULDBLOCK) {
@@ -182,7 +182,7 @@ static void unix_accept_incoming_migration(void *opaque)
 out_fopen:
     qemu_fclose(f);
 out:
-    qemu_set_fd_handler2(s, NULL, NULL, NULL, NULL);
+    qemu_set_fd_handler(s, NULL, NULL, NULL);
     close(s);
     close(c);
 }
@@ -214,8 +214,8 @@ int unix_start_incoming_migration(const char *path)
         goto err;
     }

-    qemu_set_fd_handler2(sock, NULL, unix_accept_incoming_migration, NULL,
-			 (void *)(unsigned long)sock);
+    qemu_set_fd_handler(sock, unix_accept_incoming_migration, NULL,
+                        (void *)(unsigned long)sock);

     return 0;

diff --git a/migration.c b/migration.c
index 05f6cc5..2da715c 100644
--- a/migration.c
+++ b/migration.c
@@ -292,7 +292,7 @@ void migrate_fd_error(FdMigrationState *s)

 void migrate_fd_cleanup(FdMigrationState *s)
 {
-    qemu_set_fd_handler2(s->fd, NULL, NULL, NULL, NULL);
+    qemu_set_fd_handler(s->fd, NULL, NULL, NULL);

     if (s->file) {
         DPRINTF("closing file\n");
@@ -315,7 +315,7 @@ void migrate_fd_put_notify(void *opaque)
 {
     FdMigrationState *s = opaque;

-    qemu_set_fd_handler2(s->fd, NULL, NULL, NULL, NULL);
+    qemu_set_fd_handler(s->fd, NULL, NULL, NULL);
     qemu_file_put_notify(s->file);
 }

@@ -332,7 +332,7 @@ ssize_t migrate_fd_put_buffer(void *opaque, const void *data, size_t size)
         ret = -(s->get_error(s));

     if (ret == -EAGAIN)
-        qemu_set_fd_handler2(s->fd, NULL, NULL, migrate_fd_put_notify, s);
+        qemu_set_fd_handler(s->fd, NULL, migrate_fd_put_notify, s);

     return ret;
 }
@@ -449,6 +449,6 @@ int migrate_fd_close(void *opaque)
 {
     FdMigrationState *s = opaque;

-    qemu_set_fd_handler2(s->fd, NULL, NULL, NULL, NULL);
+    qemu_set_fd_handler(s->fd, NULL, NULL, NULL);
     return s->close(s);
 }
diff --git a/qemu-aio.h b/qemu-aio.h
index 3bdd749..0630cbe 100644
--- a/qemu-aio.h
+++ b/qemu-aio.h
@@ -43,11 +43,11 @@ void qemu_aio_wait(void);
 int qemu_aio_process_queue(void);

 /* Register a file descriptor and associated callbacks.  Behaves very similarly
- * to qemu_set_fd_handler2.  Unlike qemu_set_fd_handler2, these callbacks will
+ * to qemu_set_fd_handler.  Unlike qemu_set_fd_handler, these callbacks will
  * be invoked when using either qemu_aio_wait() or qemu_aio_flush().
  *
  * Code that invokes AIO completion functions should rely on this function
- * instead of qemu_set_fd_handler[2].
+ * instead of qemu_set_fd_handler.
  */
 int qemu_aio_set_fd_handler(int fd,
                             IOHandler *io_read,
diff --git a/qemu-char.c b/qemu-char.c
index 9098d79..3635f4e 100644
--- a/qemu-char.c
+++ b/qemu-char.c
@@ -554,7 +554,7 @@ static void fd_chr_read(void *opaque)
     size = read(s->fd_in, buf, len);
     if (size == 0) {
         /* FD has been closed. Remove it from the active list.  */
-        qemu_set_fd_handler2(s->fd_in, NULL, NULL, NULL, NULL);
+        qemu_set_fd_handler(s->fd_in, NULL, NULL, NULL);
         qemu_chr_event(chr, CHR_EVENT_CLOSED);
         return;
     }
@@ -582,7 +582,7 @@ static void fd_chr_close(struct CharDriverState *chr)
     if (s->fd_in >= 0) {
         if (display_type == DT_NOGRAPHIC && s->fd_in == 0) {
         } else {
-            qemu_set_fd_handler2(s->fd_in, NULL, NULL, NULL, NULL);
+            qemu_set_fd_handler(s->fd_in, NULL, NULL, NULL);
         }
     }

@@ -674,7 +674,7 @@ static void stdio_read(void *opaque)
     size = read(0, buf, 1);
     if (size == 0) {
         /* stdin has been closed. Remove it from the active list.  */
-        qemu_set_fd_handler2(0, NULL, NULL, NULL, NULL);
+        qemu_set_fd_handler(0, NULL, NULL, NULL);
         qemu_chr_event(chr, CHR_EVENT_CLOSED);
         return;
     }
@@ -730,7 +730,7 @@ static void qemu_chr_close_stdio(struct CharDriverState *chr)
 {
     term_exit();
     stdio_nb_clients--;
-    qemu_set_fd_handler2(0, NULL, NULL, NULL, NULL);
+    qemu_set_fd_handler(0, NULL, NULL, NULL);
     fd_chr_close(chr);
 }

@@ -883,7 +883,7 @@ static void pty_chr_state(CharDriverState *chr, int connected)
     PtyCharDriver *s = chr->opaque;

     if (!connected) {
-        qemu_set_fd_handler2(s->fd, NULL, NULL, NULL, NULL);
+        qemu_set_fd_handler(s->fd, NULL, NULL, NULL);
         s->connected = 0;
         s->polling = 0;
         /* (re-)connect poll interval for idle guests: once per second.
@@ -919,7 +919,7 @@ static void pty_chr_close(struct CharDriverState *chr)
 {
     PtyCharDriver *s = chr->opaque;

-    qemu_set_fd_handler2(s->fd, NULL, NULL, NULL, NULL);
+    qemu_set_fd_handler(s->fd, NULL, NULL, NULL);
     close(s->fd);
     qemu_del_timer(s->timer);
     qemu_free_timer(s->timer);
diff --git a/qemu-char.h b/qemu-char.h
index 3a9427b..3bad12d 100644
--- a/qemu-char.h
+++ b/qemu-char.h
@@ -97,11 +97,6 @@ extern int term_escape_char;

 /* async I/O support */

-int qemu_set_fd_handler2(int fd,
-                         IOCanReadHandler *fd_read_poll,
-                         IOHandler *fd_read,
-                         IOHandler *fd_write,
-                         void *opaque);
 int qemu_set_fd_handler(int fd,
                         IOHandler *fd_read,
                         IOHandler *fd_write,
diff --git a/qemu-tool.c b/qemu-tool.c
index 45e6df9..873763e 100644
--- a/qemu-tool.c
+++ b/qemu-tool.c
@@ -90,11 +90,10 @@ void qemu_bh_delete(QEMUBH *bh)
     qemu_free(bh);
 }

-int qemu_set_fd_handler2(int fd,
-                         IOCanReadHandler *fd_read_poll,
-                         IOHandler *fd_read,
-                         IOHandler *fd_write,
-                         void *opaque)
+int qemu_set_fd_handler(int fd,
+                        IOHandler *fd_read,
+                        IOHandler *fd_write,
+                        void *opaque)
 {
     return 0;
 }
diff --git a/vl.c b/vl.c
index 52dc4f4..f102a82 100644
--- a/vl.c
+++ b/vl.c
@@ -2604,13 +2604,10 @@ 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(). */
-int qemu_set_fd_handler2(int fd,
-                         IOCanReadHandler *fd_read_poll,
-                         IOHandler *fd_read,
-                         IOHandler *fd_write,
-                         void *opaque)
+int qemu_set_fd_handler(int fd,
+                        IOHandler *fd_read,
+                        IOHandler *fd_write,
+                        void *opaque)
 {
     IOHandlerRecord *ioh;

@@ -2630,7 +2627,6 @@ int qemu_set_fd_handler2(int fd,
         QLIST_INSERT_HEAD(&io_handlers, ioh, next);
     found:
         ioh->fd = fd;
-        ioh->fd_read_poll = fd_read_poll;
         ioh->fd_read = fd_read;
         ioh->fd_write = fd_write;
         ioh->opaque = opaque;
@@ -2639,14 +2635,6 @@ int qemu_set_fd_handler2(int fd,
     return 0;
 }

-int qemu_set_fd_handler(int fd,
-                        IOHandler *fd_read,
-                        IOHandler *fd_write,
-                        void *opaque)
-{
-    return qemu_set_fd_handler2(fd, NULL, fd_read, fd_write, opaque);
-}
-
 #ifdef _WIN32
 /***********************************************************/
 /* Polling handling */
@@ -3252,8 +3240,8 @@ static int qemu_event_init(void)
     if (err < 0)
         goto fail;

-    qemu_set_fd_handler2(fds[0], NULL, qemu_event_read, NULL,
-                         (void *)(unsigned long)fds[0]);
+    qemu_set_fd_handler(fds[0], qemu_event_read, NULL,
+                        (void *)(unsigned long)fds[0]);

     io_thread_fd = fds[1];
     return 0;
diff --git a/vnc-auth-sasl.c b/vnc-auth-sasl.c
index acaac0c..1e4f77f 100644
--- a/vnc-auth-sasl.c
+++ b/vnc-auth-sasl.c
@@ -83,7 +83,7 @@ long vnc_client_write_sasl(VncState *vs)
      * SASL encoded output
      */
     if (vs->output.offset == 0) {
-        qemu_set_fd_handler2(vs->csock, NULL, vnc_client_read, NULL, vs);
+        qemu_set_fd_handler(vs->csock, vnc_client_read, NULL, vs);
     }

     return ret;
diff --git a/vnc-auth-vencrypt.c b/vnc-auth-vencrypt.c
index 07c1691..a5d2b44 100644
--- a/vnc-auth-vencrypt.c
+++ b/vnc-auth-vencrypt.c
@@ -93,7 +93,7 @@ static int vnc_start_vencrypt_handshake(struct VncState *vs) {

     VNC_DEBUG("Handshake done, switching to TLS data mode\n");
     vs->tls.wiremode = VNC_WIREMODE_TLS;
-    qemu_set_fd_handler2(vs->csock, NULL, vnc_client_read, vnc_client_write, vs);
+    qemu_set_fd_handler(vs->csock, vnc_client_read, vnc_client_write, vs);

     start_auth_vencrypt_subauth(vs);

diff --git a/vnc.c b/vnc.c
index 01353a9..2cfb0eb 100644
--- a/vnc.c
+++ b/vnc.c
@@ -1076,7 +1076,7 @@ static void vnc_disconnect_start(VncState *vs)
 {
     if (vs->csock == -1)
         return;
-    qemu_set_fd_handler2(vs->csock, NULL, NULL, NULL, NULL);
+    qemu_set_fd_handler(vs->csock, NULL, NULL, NULL);
     closesocket(vs->csock);
     vs->csock = -1;
 }
@@ -1218,7 +1218,7 @@ static long vnc_client_write_plain(VncState *vs)
     vs->output.offset -= ret;

     if (vs->output.offset == 0) {
-        qemu_set_fd_handler2(vs->csock, NULL, vnc_client_read, NULL, vs);
+        qemu_set_fd_handler(vs->csock, vnc_client_read, NULL, vs);
     }

     return ret;
@@ -1356,7 +1356,7 @@ void vnc_write(VncState *vs, const void *data, size_t len)
     buffer_reserve(&vs->output, len);

     if (vs->csock != -1 && buffer_empty(&vs->output)) {
-        qemu_set_fd_handler2(vs->csock, NULL, vnc_client_read, vnc_client_write, vs);
+        qemu_set_fd_handler(vs->csock, vnc_client_read, vnc_client_write, vs);
     }

     buffer_append(&vs->output, data, len);
@@ -2389,7 +2389,7 @@ static void vnc_connect(VncDisplay *vd, int csock)
     VNC_DEBUG("New client on socket %d\n", csock);
     dcl->idle = 0;
     socket_set_nonblock(vs->csock);
-    qemu_set_fd_handler2(vs->csock, NULL, vnc_client_read, NULL, vs);
+    qemu_set_fd_handler(vs->csock, vnc_client_read, NULL, vs);

     vnc_client_cache_addr(vs);
     vnc_qmp_event(vs, QEVENT_VNC_CONNECTED);
@@ -2475,7 +2475,7 @@ void vnc_display_close(DisplayState *ds)
         vs->display = NULL;
     }
     if (vs->lsock != -1) {
-        qemu_set_fd_handler2(vs->lsock, NULL, NULL, NULL, NULL);
+        qemu_set_fd_handler(vs->lsock, NULL, NULL, NULL);
         close(vs->lsock);
         vs->lsock = -1;
     }
@@ -2730,5 +2730,5 @@ int vnc_display_open(DisplayState *ds, const char *display)
             vs->display = dpy;
         }
     }
-    return qemu_set_fd_handler2(vs->lsock, NULL, vnc_listen_read, NULL, vs);
+    return qemu_set_fd_handler(vs->lsock, vnc_listen_read, NULL, vs);
 }
-- 
1.6.6.1

^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [Qemu-devel] [PATCH 15/16] Remove now unused fd_read_poll and all its only left user
  2010-03-11 16:55 [Qemu-devel] [PATCH 00/16] *** SUBJECT HERE *** Juan Quintela
                   ` (13 preceding siblings ...)
  2010-03-11 16:55 ` [Qemu-devel] [PATCH 14/16] Remove qemu_set_fd_handler2() Juan Quintela
@ 2010-03-11 16:55 ` Juan Quintela
  2010-03-11 16:55 ` [Qemu-devel] [PATCH 16/16] Add qemu_remove_fd_handler() Juan Quintela
  15 siblings, 0 replies; 19+ messages in thread
From: Juan Quintela @ 2010-03-11 16:55 UTC (permalink / raw)
  To: qemu-devel


Signed-off-by: Juan Quintela <quintela@redhat.com>
---
 vl.c |    5 +----
 1 files changed, 1 insertions(+), 4 deletions(-)

diff --git a/vl.c b/vl.c
index f102a82..304d05c 100644
--- a/vl.c
+++ b/vl.c
@@ -2590,7 +2590,6 @@ void pcmcia_info(Monitor *mon)

 typedef struct IOHandlerRecord {
     int fd;
-    IOCanReadHandler *fd_read_poll;
     IOHandler *fd_read;
     IOHandler *fd_write;
     int deleted;
@@ -3809,9 +3808,7 @@ void main_loop_wait(int timeout)
     QLIST_FOREACH(ioh, &io_handlers, next) {
         if (ioh->deleted)
             continue;
-        if (ioh->fd_read &&
-            (!ioh->fd_read_poll ||
-             ioh->fd_read_poll(ioh->opaque) != 0)) {
+        if (ioh->fd_read) {
             FD_SET(ioh->fd, &rfds);
             if (ioh->fd > nfds)
                 nfds = ioh->fd;
-- 
1.6.6.1

^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [Qemu-devel] [PATCH 16/16] Add qemu_remove_fd_handler()
  2010-03-11 16:55 [Qemu-devel] [PATCH 00/16] *** SUBJECT HERE *** Juan Quintela
                   ` (14 preceding siblings ...)
  2010-03-11 16:55 ` [Qemu-devel] [PATCH 15/16] Remove now unused fd_read_poll and all its only left user Juan Quintela
@ 2010-03-11 16:55 ` Juan Quintela
  15 siblings, 0 replies; 19+ messages in thread
From: Juan Quintela @ 2010-03-11 16:55 UTC (permalink / raw)
  To: qemu-devel

Switch all users of qemu_set_fd_handler(fd, NULL, NULL, NULL) to this
new function.

Signed-off-by: Juan Quintela <quintela@redhat.com>
---
 audio/alsaaudio.c |    4 ++--
 audio/ossaudio.c  |    6 +++---
 hw/xen_backend.c  |    4 ++--
 migration-exec.c  |    2 +-
 migration-fd.c    |    2 +-
 migration-tcp.c   |    4 ++--
 migration-unix.c  |    4 ++--
 migration.c       |    6 +++---
 net/socket.c      |    6 +++---
 net/vde.c         |    2 +-
 qemu-char.c       |   24 +++++++++++-------------
 qemu-char.h       |    1 +
 usb-linux.c       |    2 +-
 vl.c              |   19 +++++++++++++------
 vnc.c             |    4 ++--
 15 files changed, 48 insertions(+), 42 deletions(-)

diff --git a/audio/alsaaudio.c b/audio/alsaaudio.c
index 88344ff..b4437e6 100644
--- a/audio/alsaaudio.c
+++ b/audio/alsaaudio.c
@@ -134,7 +134,7 @@ static void alsa_fini_poll (struct pollhlp *hlp)

     if (pfds) {
         for (i = 0; i < hlp->count; ++i) {
-            qemu_set_fd_handler (pfds[i].fd, NULL, NULL, NULL);
+            qemu_remove_fd_handler (pfds[i].fd);
         }
         qemu_free (pfds);
     }
@@ -286,7 +286,7 @@ static int alsa_poll_helper (snd_pcm_t *handle, struct pollhlp *hlp, int mask)
                    pfds[i].events, i, pfds[i].fd, err);

             while (i--) {
-                qemu_set_fd_handler (pfds[i].fd, NULL, NULL, NULL);
+                qemu_remove_fd_handler (pfds[i].fd);
             }
             qemu_free (pfds);
             return -1;
diff --git a/audio/ossaudio.c b/audio/ossaudio.c
index 42bffae..bc11128 100644
--- a/audio/ossaudio.c
+++ b/audio/ossaudio.c
@@ -122,7 +122,7 @@ static void oss_anal_close (int *fdp)
 {
     int err;

-    qemu_set_fd_handler (*fdp, NULL, NULL, NULL);
+    qemu_remove_fd_handler (*fdp);
     err = close (*fdp);
     if (err) {
         oss_logerr (errno, "Failed to close file(fd=%d)\n", *fdp);
@@ -651,7 +651,7 @@ static int oss_ctl_out (HWVoiceOut *hw, int cmd, ...)

     case VOICE_DISABLE:
         if (hw->poll_mode) {
-            qemu_set_fd_handler (oss->fd, NULL, NULL, NULL);
+            qemu_remove_fd_handler (oss->fd);
             hw->poll_mode = 0;
         }

@@ -835,7 +835,7 @@ static int oss_ctl_in (HWVoiceIn *hw, int cmd, ...)
     case VOICE_DISABLE:
         if (hw->poll_mode) {
             hw->poll_mode = 0;
-            qemu_set_fd_handler (oss->fd, NULL, NULL, NULL);
+            qemu_remove_fd_handler (oss->fd);
         }
         break;
     }
diff --git a/hw/xen_backend.c b/hw/xen_backend.c
index a2e408f..37d24c5 100644
--- a/hw/xen_backend.c
+++ b/hw/xen_backend.c
@@ -635,7 +635,7 @@ int xen_be_init(void)
     return 0;

 err:
-    qemu_set_fd_handler(xs_fileno(xenstore), NULL, NULL, NULL);
+    qemu_clear_fd_handler(xs_fileno(xenstore));
     xs_daemon_close(xenstore);
     xenstore = NULL;

@@ -667,7 +667,7 @@ void xen_be_unbind_evtchn(struct XenDevice *xendev)
 {
     if (xendev->local_port == -1)
 	return;
-    qemu_set_fd_handler(xc_evtchn_fd(xendev->evtchndev), NULL, NULL, NULL);
+    qemu_remove_fd_handler(xc_evtchn_fd(xendev->evtchndev));
     xc_evtchn_unbind(xendev->evtchndev, xendev->local_port);
     xen_be_printf(xendev, 2, "unbind evtchn port %d\n", xendev->local_port);
     xendev->local_port = -1;
diff --git a/migration-exec.c b/migration-exec.c
index c971145..45667d7 100644
--- a/migration-exec.c
+++ b/migration-exec.c
@@ -125,7 +125,7 @@ static void exec_accept_incoming_migration(void *opaque)
         vm_start();

 err:
-    qemu_set_fd_handler(qemu_stdio_fd(f), NULL, NULL, NULL);
+    qemu_remove_fd_handler(qemu_stdio_fd(f));
     qemu_fclose(f);
 }

diff --git a/migration-fd.c b/migration-fd.c
index 93e1c4e..9aa4191 100644
--- a/migration-fd.c
+++ b/migration-fd.c
@@ -118,7 +118,7 @@ static void fd_accept_incoming_migration(void *opaque)
         vm_start();

 err:
-    qemu_set_fd_handler(qemu_stdio_fd(f), NULL, NULL, NULL);
+    qemu_remove_fd_handler(qemu_stdio_fd(f));
     qemu_fclose(f);
 }

diff --git a/migration-tcp.c b/migration-tcp.c
index 80ebbc5..228f279 100644
--- a/migration-tcp.c
+++ b/migration-tcp.c
@@ -66,7 +66,7 @@ static void tcp_wait_for_connect(void *opaque)
         return;
     }

-    qemu_set_fd_handler(s->fd, NULL, NULL, NULL);
+    qemu_remove_fd_handler(s->fd);

     if (val == 0)
         migrate_fd_connect(s);
@@ -176,7 +176,7 @@ static void tcp_accept_incoming_migration(void *opaque)
 out_fopen:
     qemu_fclose(f);
 out:
-    qemu_set_fd_handler(s, NULL, NULL, NULL);
+    qemu_remove_fd_handler(s);
     close(s);
     close(c);
 }
diff --git a/migration-unix.c b/migration-unix.c
index 891b3a7..c998e95 100644
--- a/migration-unix.c
+++ b/migration-unix.c
@@ -65,7 +65,7 @@ static void unix_wait_for_connect(void *opaque)
         return;
     }

-    qemu_set_fd_handler(s->fd, NULL, NULL, NULL);
+    qemu_remove_fd_handler(s->fd);

     if (val == 0)
         migrate_fd_connect(s);
@@ -182,7 +182,7 @@ static void unix_accept_incoming_migration(void *opaque)
 out_fopen:
     qemu_fclose(f);
 out:
-    qemu_set_fd_handler(s, NULL, NULL, NULL);
+    qemu_remove_fd_handler(s);
     close(s);
     close(c);
 }
diff --git a/migration.c b/migration.c
index 2da715c..282ba99 100644
--- a/migration.c
+++ b/migration.c
@@ -292,7 +292,7 @@ void migrate_fd_error(FdMigrationState *s)

 void migrate_fd_cleanup(FdMigrationState *s)
 {
-    qemu_set_fd_handler(s->fd, NULL, NULL, NULL);
+    qemu_remove_fd_handler(s->fd);

     if (s->file) {
         DPRINTF("closing file\n");
@@ -315,7 +315,7 @@ void migrate_fd_put_notify(void *opaque)
 {
     FdMigrationState *s = opaque;

-    qemu_set_fd_handler(s->fd, NULL, NULL, NULL);
+    qemu_remove_fd_handler(s->fd);
     qemu_file_put_notify(s->file);
 }

@@ -449,6 +449,6 @@ int migrate_fd_close(void *opaque)
 {
     FdMigrationState *s = opaque;

-    qemu_set_fd_handler(s->fd, NULL, NULL, NULL);
+    qemu_remove_fd_handler(s->fd);
     return s->close(s);
 }
diff --git a/net/socket.c b/net/socket.c
index 442a9c7..e47374e 100644
--- a/net/socket.c
+++ b/net/socket.c
@@ -84,7 +84,7 @@ static void net_socket_send(void *opaque)
     } else if (size == 0) {
         /* end of connection */
     eoc:
-        qemu_set_fd_handler(s->fd, NULL, NULL, NULL);
+        qemu_remove_fd_handler(s->fd);
         closesocket(s->fd);
         return;
     }
@@ -143,7 +143,7 @@ static void net_socket_send_dgram(void *opaque)
         return;
     if (size == 0) {
         /* end of connection */
-        qemu_set_fd_handler(s->fd, NULL, NULL, NULL);
+        qemu_remove_fd_handler(s->fd);
         return;
     }
     qemu_send_packet(&s->nc, s->buf, size);
@@ -212,7 +212,7 @@ fail:
 static void net_socket_cleanup(VLANClientState *nc)
 {
     NetSocketState *s = DO_UPCAST(NetSocketState, nc, nc);
-    qemu_set_fd_handler(s->fd, NULL, NULL, NULL);
+    qemu_remove_fd_handler(s->fd);
     close(s->fd);
 }

diff --git a/net/vde.c b/net/vde.c
index 0b46fa6..598604f 100644
--- a/net/vde.c
+++ b/net/vde.c
@@ -65,7 +65,7 @@ static ssize_t vde_receive(VLANClientState *nc, const uint8_t *buf, size_t size)
 static void vde_cleanup(VLANClientState *nc)
 {
     VDEState *s = DO_UPCAST(VDEState, nc, nc);
-    qemu_set_fd_handler(vde_datafd(s->vde), NULL, NULL, NULL);
+    qemu_remove_fd_handler(vde_datafd(s->vde));
     vde_close(s->vde);
 }

diff --git a/qemu-char.c b/qemu-char.c
index 3635f4e..8574a0f 100644
--- a/qemu-char.c
+++ b/qemu-char.c
@@ -553,8 +553,7 @@ static void fd_chr_read(void *opaque)
         return;
     size = read(s->fd_in, buf, len);
     if (size == 0) {
-        /* FD has been closed. Remove it from the active list.  */
-        qemu_set_fd_handler(s->fd_in, NULL, NULL, NULL);
+        qemu_remove_fd_handler(s->fd_in);
         qemu_chr_event(chr, CHR_EVENT_CLOSED);
         return;
     }
@@ -582,7 +581,7 @@ static void fd_chr_close(struct CharDriverState *chr)
     if (s->fd_in >= 0) {
         if (display_type == DT_NOGRAPHIC && s->fd_in == 0) {
         } else {
-            qemu_set_fd_handler(s->fd_in, NULL, NULL, NULL);
+            qemu_remove_fd_handler(s->fd_in);
         }
     }

@@ -673,8 +672,7 @@ static void stdio_read(void *opaque)
     }
     size = read(0, buf, 1);
     if (size == 0) {
-        /* stdin has been closed. Remove it from the active list.  */
-        qemu_set_fd_handler(0, NULL, NULL, NULL);
+        qemu_remove_fd_handler(0);
         qemu_chr_event(chr, CHR_EVENT_CLOSED);
         return;
     }
@@ -730,7 +728,7 @@ static void qemu_chr_close_stdio(struct CharDriverState *chr)
 {
     term_exit();
     stdio_nb_clients--;
-    qemu_set_fd_handler(0, NULL, NULL, NULL);
+    qemu_remove_fd_handler(0);
     fd_chr_close(chr);
 }

@@ -883,7 +881,7 @@ static void pty_chr_state(CharDriverState *chr, int connected)
     PtyCharDriver *s = chr->opaque;

     if (!connected) {
-        qemu_set_fd_handler(s->fd, NULL, NULL, NULL);
+        qemu_remove_fd_handler(s->fd);
         s->connected = 0;
         s->polling = 0;
         /* (re-)connect poll interval for idle guests: once per second.
@@ -919,7 +917,7 @@ static void pty_chr_close(struct CharDriverState *chr)
 {
     PtyCharDriver *s = chr->opaque;

-    qemu_set_fd_handler(s->fd, NULL, NULL, NULL);
+    qemu_remove_fd_handler(s->fd);
     close(s->fd);
     qemu_del_timer(s->timer);
     qemu_free_timer(s->timer);
@@ -1810,7 +1808,7 @@ static void udp_chr_close(CharDriverState *chr)
 {
     NetCharDriver *s = chr->opaque;
     if (s->fd >= 0) {
-        qemu_set_fd_handler(s->fd, NULL, NULL, NULL);
+        qemu_remove_fd_handler(s->fd);
         closesocket(s->fd);
     }
     qemu_free(s);
@@ -2013,7 +2011,7 @@ static void tcp_chr_read(void *opaque)
         if (s->listen_fd >= 0) {
             qemu_set_fd_handler(s->listen_fd, tcp_chr_accept, NULL, chr);
         }
-        qemu_set_fd_handler(s->fd, NULL, NULL, NULL);
+        qemu_remove_fd_handler(s->fd);
         closesocket(s->fd);
         s->fd = -1;
         qemu_chr_event(chr, CHR_EVENT_CLOSED);
@@ -2096,7 +2094,7 @@ static void tcp_chr_accept(void *opaque)
     if (s->do_nodelay)
         socket_set_nodelay(fd);
     s->fd = fd;
-    qemu_set_fd_handler(s->listen_fd, NULL, NULL, NULL);
+    qemu_remove_fd_handler(s->listen_fd);
     tcp_chr_connect(chr);
 }

@@ -2104,11 +2102,11 @@ static void tcp_chr_close(CharDriverState *chr)
 {
     TCPCharDriver *s = chr->opaque;
     if (s->fd >= 0) {
-        qemu_set_fd_handler(s->fd, NULL, NULL, NULL);
+        qemu_remove_fd_handler(s->fd);
         closesocket(s->fd);
     }
     if (s->listen_fd >= 0) {
-        qemu_set_fd_handler(s->listen_fd, NULL, NULL, NULL);
+        qemu_remove_fd_handler(s->listen_fd);
         closesocket(s->listen_fd);
     }
     qemu_free(s);
diff --git a/qemu-char.h b/qemu-char.h
index 3bad12d..fcb770b 100644
--- a/qemu-char.h
+++ b/qemu-char.h
@@ -101,4 +101,5 @@ int qemu_set_fd_handler(int fd,
                         IOHandler *fd_read,
                         IOHandler *fd_write,
                         void *opaque);
+int qemu_remove_fd_handler(int fd);
 #endif
diff --git a/usb-linux.c b/usb-linux.c
index a9c15c6..86d3595 100644
--- a/usb-linux.c
+++ b/usb-linux.c
@@ -957,7 +957,7 @@ static int usb_host_close(USBHostDevice *dev)
     if (dev->fd == -1)
         return -1;

-    qemu_set_fd_handler(dev->fd, NULL, NULL, NULL);
+    qemu_remove_fd_handler(dev->fd);
     dev->closing = 1;
     async_complete(dev);
     dev->closing = 0;
diff --git a/vl.c b/vl.c
index 304d05c..bfeefbe 100644
--- a/vl.c
+++ b/vl.c
@@ -2602,6 +2602,18 @@ typedef struct IOHandlerRecord {
 static QLIST_HEAD(, IOHandlerRecord) io_handlers =
     QLIST_HEAD_INITIALIZER(io_handlers);

+int qemu_remove_fd_handler(int fd)
+{
+    IOHandlerRecord *ioh;
+
+    QLIST_FOREACH(ioh, &io_handlers, next) {
+        if (ioh->fd == fd) {
+            ioh->deleted = 1;
+            break;
+        }
+    }
+    return 0;
+}

 int qemu_set_fd_handler(int fd,
                         IOHandler *fd_read,
@@ -2611,12 +2623,7 @@ int qemu_set_fd_handler(int fd,
     IOHandlerRecord *ioh;

     if (!fd_read && !fd_write) {
-        QLIST_FOREACH(ioh, &io_handlers, next) {
-            if (ioh->fd == fd) {
-                ioh->deleted = 1;
-                break;
-            }
-        }
+        qemu_remove_fd_handler(fd);
     } else {
         QLIST_FOREACH(ioh, &io_handlers, next) {
             if (ioh->fd == fd)
diff --git a/vnc.c b/vnc.c
index 2cfb0eb..2a9fcb9 100644
--- a/vnc.c
+++ b/vnc.c
@@ -1076,7 +1076,7 @@ static void vnc_disconnect_start(VncState *vs)
 {
     if (vs->csock == -1)
         return;
-    qemu_set_fd_handler(vs->csock, NULL, NULL, NULL);
+    qemu_remove_fd_handler(vs->csock);
     closesocket(vs->csock);
     vs->csock = -1;
 }
@@ -2475,7 +2475,7 @@ void vnc_display_close(DisplayState *ds)
         vs->display = NULL;
     }
     if (vs->lsock != -1) {
-        qemu_set_fd_handler(vs->lsock, NULL, NULL, NULL);
+        qemu_remove_fd_handler(vs->lsock);
         close(vs->lsock);
         vs->lsock = -1;
     }
-- 
1.6.6.1

^ permalink raw reply related	[flat|nested] 19+ messages in thread

* Re: [Qemu-devel] [PATCH 08/16] tap: insert tap_can_send() into tap_send()
  2010-03-11 16:55 ` [Qemu-devel] [PATCH 08/16] tap: insert tap_can_send() into tap_send() Juan Quintela
@ 2010-03-17 17:52   ` Anthony Liguori
  0 siblings, 0 replies; 19+ messages in thread
From: Anthony Liguori @ 2010-03-17 17:52 UTC (permalink / raw)
  To: Juan Quintela; +Cc: qemu-devel

On 03/11/2010 10:55 AM, Juan Quintela wrote:
> This way we can remove the poll test
>
> Signed-off-by: Juan Quintela<quintela@redhat.com>
>    

Won't this cause unnecessary wake ups?

Right now, we use the can_read() poll function to determine whether to 
add an fd to a fdset.  With this patch, we always add the fd to the 
fdset and then we just fail the read.

To eliminate the poll function, we need to change the handlers from 
polling, to noticing when they no longer can be read, and remove the 
read callback entirely.

Regards,

Anthony Liguori

> ---
>   net/tap.c |   27 +++++++++------------------
>   1 files changed, 9 insertions(+), 18 deletions(-)
>
> diff --git a/net/tap.c b/net/tap.c
> index 7a7320c..3ab65a3 100644
> --- a/net/tap.c
> +++ b/net/tap.c
> @@ -61,17 +61,15 @@ typedef struct TAPState {
>
>   static int launch_script(const char *setup_script, const char *ifname, int fd);
>
> -static int tap_can_send(void *opaque);
>   static void tap_send(void *opaque);
>   static void tap_writable(void *opaque);
>
>   static void tap_update_fd_handler(TAPState *s)
>   {
> -    qemu_set_fd_handler2(s->fd,
> -                         s->read_poll  ? tap_can_send : NULL,
> -                         s->read_poll  ? tap_send     : NULL,
> -                         s->write_poll ? tap_writable : NULL,
> -                         s);
> +    qemu_set_fd_handler(s->fd,
> +                        s->read_poll  ? tap_send     : NULL,
> +                        s->write_poll ? tap_writable : NULL,
> +                        s);
>   }
>
>   static void tap_read_poll(TAPState *s, int enable)
> @@ -165,13 +163,6 @@ static ssize_t tap_receive(VLANClientState *nc, const uint8_t *buf, size_t size)
>       return tap_write_packet(s, iov, 1);
>   }
>
> -static int tap_can_send(void *opaque)
> -{
> -    TAPState *s = opaque;
> -
> -    return qemu_can_send_packet(&s->nc);
> -}
> -
>   #ifndef __sun__
>   ssize_t tap_read_packet(int tapfd, uint8_t *buf, int maxlen)
>   {
> @@ -188,12 +179,10 @@ static void tap_send_completed(VLANClientState *nc, ssize_t len)
>   static void tap_send(void *opaque)
>   {
>       TAPState *s = opaque;
> -    int size;
>
> -    do {
> +    while (qemu_can_send_packet(&s->nc)>  0) {
>           uint8_t *buf = s->buf;
> -
> -        size = tap_read_packet(s->fd, s->buf, sizeof(s->buf));
> +        int size = tap_read_packet(s->fd, s->buf, sizeof(s->buf));
>           if (size<= 0) {
>               break;
>           }
> @@ -206,8 +195,10 @@ static void tap_send(void *opaque)
>           size = qemu_send_packet_async(&s->nc, buf, size, tap_send_completed);
>           if (size == 0) {
>               tap_read_poll(s, 0);
> +        } else if (size<  0) {
> +            return;
>           }
> -    } while (size>  0&&  qemu_can_send_packet(&s->nc));
> +    }
>   }
>
>   int tap_has_ufo(VLANClientState *nc)
>    

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [Qemu-devel] [PATCH 03/16] Convert io handlers to QLIST
  2010-03-11 16:55 ` [Qemu-devel] [PATCH 03/16] Convert io handlers to QLIST Juan Quintela
@ 2010-03-22 19:40   ` Anthony Liguori
  0 siblings, 0 replies; 19+ messages in thread
From: Anthony Liguori @ 2010-03-22 19:40 UTC (permalink / raw)
  To: Juan Quintela; +Cc: qemu-devel

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

^ permalink raw reply	[flat|nested] 19+ messages in thread

end of thread, other threads:[~2010-03-22 19:40 UTC | newest]

Thread overview: 19+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-03-11 16:55 [Qemu-devel] [PATCH 00/16] *** SUBJECT HERE *** Juan Quintela
2010-03-11 16:55 ` [Qemu-devel] [PATCH 01/16] migration: Clear fd also in error cases Juan Quintela
2010-03-11 16:55 ` [Qemu-devel] [PATCH 02/16] migration: unix migration should obey autostart are the other ones Juan Quintela
2010-03-11 16:55 ` [Qemu-devel] [PATCH 03/16] Convert io handlers to QLIST Juan Quintela
2010-03-22 19:40   ` Anthony Liguori
2010-03-11 16:55 ` [Qemu-devel] [PATCH 04/16] remove useless cast Juan Quintela
2010-03-11 16:55 ` [Qemu-devel] [PATCH 05/16] rename IOCanRWHandler to IOCanReadHandler Juan Quintela
2010-03-11 16:55 ` [Qemu-devel] [PATCH 06/16] bt: remove bt_host_read_poll() Juan Quintela
2010-03-11 16:55 ` [Qemu-devel] [PATCH 07/16] Handle deleted IOHandlers in a single buffer Juan Quintela
2010-03-11 16:55 ` [Qemu-devel] [PATCH 08/16] tap: insert tap_can_send() into tap_send() Juan Quintela
2010-03-17 17:52   ` Anthony Liguori
2010-03-11 16:55 ` [Qemu-devel] [PATCH 09/16] qemu-char:stdio insert poll call into read one Juan Quintela
2010-03-11 16:55 ` [Qemu-devel] [PATCH 10/16] qemu-char:tcp " Juan Quintela
2010-03-11 16:55 ` [Qemu-devel] [PATCH 11/16] qemu-char:fd " Juan Quintela
2010-03-11 16:55 ` [Qemu-devel] [PATCH 12/16] qemu-char:pty " Juan Quintela
2010-03-11 16:55 ` [Qemu-devel] [PATCH 13/16] qemu-char:udp " Juan Quintela
2010-03-11 16:55 ` [Qemu-devel] [PATCH 14/16] Remove qemu_set_fd_handler2() Juan Quintela
2010-03-11 16:55 ` [Qemu-devel] [PATCH 15/16] Remove now unused fd_read_poll and all its only left user Juan Quintela
2010-03-11 16:55 ` [Qemu-devel] [PATCH 16/16] Add qemu_remove_fd_handler() Juan Quintela

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).