qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Gerd Hoffmann <kraxel@redhat.com>
To: qemu-devel@nongnu.org
Cc: Gerd Hoffmann <kraxel@redhat.com>
Subject: [Qemu-devel] [PATCH 01/22] console: QLIST-ify display change listeners.
Date: Thu,  1 Nov 2012 14:03:56 +0100	[thread overview]
Message-ID: <1351775057-3938-2-git-send-email-kraxel@redhat.com> (raw)
In-Reply-To: <1351775057-3938-1-git-send-email-kraxel@redhat.com>

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
 console.h  |   72 +++++++++++++++++++++++++++++++----------------------------
 hw/xenfb.c |    2 +-
 vl.c       |    9 ++-----
 3 files changed, 42 insertions(+), 41 deletions(-)

diff --git a/console.h b/console.h
index 6099d8d..4239eb3 100644
--- a/console.h
+++ b/console.h
@@ -164,7 +164,7 @@ struct DisplayChangeListener {
                      int w, int h, uint32_t c);
     void (*dpy_text_cursor)(struct DisplayState *s, int x, int y);
 
-    struct DisplayChangeListener *next;
+    QLIST_ENTRY(DisplayChangeListener) next;
 };
 
 struct DisplayAllocator {
@@ -179,7 +179,7 @@ struct DisplayState {
     struct QEMUTimer *gui_timer;
 
     struct DisplayAllocator* allocator;
-    struct DisplayChangeListener* listeners;
+    QLIST_HEAD(, DisplayChangeListener) listeners;
 
     void (*mouse_set)(int x, int y, int on);
     void (*cursor_define)(QEMUCursor *cursor);
@@ -231,72 +231,76 @@ static inline int is_buffer_shared(DisplaySurface *surface)
 
 static inline void register_displaychangelistener(DisplayState *ds, DisplayChangeListener *dcl)
 {
-    dcl->next = ds->listeners;
-    ds->listeners = dcl;
+    QLIST_INSERT_HEAD(&ds->listeners, dcl, next);
 }
 
 static inline void dpy_update(DisplayState *s, int x, int y, int w, int h)
 {
-    struct DisplayChangeListener *dcl = s->listeners;
-    while (dcl != NULL) {
+    struct DisplayChangeListener *dcl;
+    QLIST_FOREACH(dcl, &s->listeners, next) {
         dcl->dpy_update(s, x, y, w, h);
-        dcl = dcl->next;
     }
 }
 
 static inline void dpy_resize(DisplayState *s)
 {
-    struct DisplayChangeListener *dcl = s->listeners;
-    while (dcl != NULL) {
+    struct DisplayChangeListener *dcl;
+    QLIST_FOREACH(dcl, &s->listeners, next) {
         dcl->dpy_resize(s);
-        dcl = dcl->next;
     }
 }
 
 static inline void dpy_setdata(DisplayState *s)
 {
-    struct DisplayChangeListener *dcl = s->listeners;
-    while (dcl != NULL) {
-        if (dcl->dpy_setdata) dcl->dpy_setdata(s);
-        dcl = dcl->next;
+    struct DisplayChangeListener *dcl;
+    QLIST_FOREACH(dcl, &s->listeners, next) {
+        if (dcl->dpy_setdata) {
+            dcl->dpy_setdata(s);
+        }
     }
 }
 
 static inline void dpy_refresh(DisplayState *s)
 {
-    struct DisplayChangeListener *dcl = s->listeners;
-    while (dcl != NULL) {
-        if (dcl->dpy_refresh) dcl->dpy_refresh(s);
-        dcl = dcl->next;
+    struct DisplayChangeListener *dcl;
+    QLIST_FOREACH(dcl, &s->listeners, next) {
+        if (dcl->dpy_refresh) {
+            dcl->dpy_refresh(s);
+        }
     }
 }
 
 static inline void dpy_copy(struct DisplayState *s, int src_x, int src_y,
-                             int dst_x, int dst_y, int w, int h) {
-    struct DisplayChangeListener *dcl = s->listeners;
-    while (dcl != NULL) {
-        if (dcl->dpy_copy)
+                             int dst_x, int dst_y, int w, int h)
+{
+    struct DisplayChangeListener *dcl;
+    QLIST_FOREACH(dcl, &s->listeners, next) {
+        if (dcl->dpy_copy) {
             dcl->dpy_copy(s, src_x, src_y, dst_x, dst_y, w, h);
-        else /* TODO */
+        } else { /* TODO */
             dcl->dpy_update(s, dst_x, dst_y, w, h);
-        dcl = dcl->next;
+        }
     }
 }
 
 static inline void dpy_fill(struct DisplayState *s, int x, int y,
-                             int w, int h, uint32_t c) {
-    struct DisplayChangeListener *dcl = s->listeners;
-    while (dcl != NULL) {
-        if (dcl->dpy_fill) dcl->dpy_fill(s, x, y, w, h, c);
-        dcl = dcl->next;
+                             int w, int h, uint32_t c)
+{
+    struct DisplayChangeListener *dcl;
+    QLIST_FOREACH(dcl, &s->listeners, next) {
+        if (dcl->dpy_fill) {
+            dcl->dpy_fill(s, x, y, w, h, c);
+        }
     }
 }
 
-static inline void dpy_cursor(struct DisplayState *s, int x, int y) {
-    struct DisplayChangeListener *dcl = s->listeners;
-    while (dcl != NULL) {
-        if (dcl->dpy_text_cursor) dcl->dpy_text_cursor(s, x, y);
-        dcl = dcl->next;
+static inline void dpy_cursor(struct DisplayState *s, int x, int y)
+{
+    struct DisplayChangeListener *dcl;
+    QLIST_FOREACH(dcl, &s->listeners, next) {
+        if (dcl->dpy_text_cursor) {
+            dcl->dpy_text_cursor(s, x, y);
+        }
     }
 }
 
diff --git a/hw/xenfb.c b/hw/xenfb.c
index 338800a..ef24c33 100644
--- a/hw/xenfb.c
+++ b/hw/xenfb.c
@@ -717,7 +717,7 @@ static void xenfb_update(void *opaque)
 	if (xenfb_queue_full(xenfb))
 	    return;
 
-        for (l = xenfb->c.ds->listeners; l != NULL; l = l->next) {
+        QLIST_FOREACH(l, &xenfb->c.ds->listeners, next) {
             if (l->idle)
                 continue;
             idle = 0;
diff --git a/vl.c b/vl.c
index 5513d15..427e8a2 100644
--- a/vl.c
+++ b/vl.c
@@ -1359,15 +1359,14 @@ static void gui_update(void *opaque)
 {
     uint64_t interval = GUI_REFRESH_INTERVAL;
     DisplayState *ds = opaque;
-    DisplayChangeListener *dcl = ds->listeners;
+    DisplayChangeListener *dcl;
 
     dpy_refresh(ds);
 
-    while (dcl != NULL) {
+    QLIST_FOREACH(dcl, &ds->listeners, next) {
         if (dcl->gui_timer_interval &&
             dcl->gui_timer_interval < interval)
             interval = dcl->gui_timer_interval;
-        dcl = dcl->next;
     }
     qemu_mod_timer(ds->gui_timer, interval + qemu_get_clock_ms(rt_clock));
 }
@@ -3846,14 +3845,12 @@ int main(int argc, char **argv, char **envp)
 
     /* display setup */
     dpy_resize(ds);
-    dcl = ds->listeners;
-    while (dcl != NULL) {
+    QLIST_FOREACH(dcl, &ds->listeners, next) {
         if (dcl->dpy_refresh != NULL) {
             ds->gui_timer = qemu_new_timer_ms(rt_clock, gui_update, ds);
             qemu_mod_timer(ds->gui_timer, qemu_get_clock_ms(rt_clock));
             break;
         }
-        dcl = dcl->next;
     }
     text_consoles_set_display(ds);
 
-- 
1.7.1

  reply	other threads:[~2012-11-01 13:04 UTC|newest]

Thread overview: 29+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-11-01 13:03 [Qemu-devel] [PULL 00/22] console cleanups & pixman rendering Gerd Hoffmann
2012-11-01 13:03 ` Gerd Hoffmann [this message]
2012-11-01 13:03 ` [Qemu-devel] [PATCH 02/22] console: add unregister_displaychangelistener Gerd Hoffmann
2012-11-01 13:03 ` [Qemu-devel] [PATCH 03/22] console: move set_mouse + cursor_define callbacks Gerd Hoffmann
2012-11-01 13:03 ` [Qemu-devel] [PATCH 04/22] console: s/TextConsole/QemuConsole/ Gerd Hoffmann
2012-11-01 13:04 ` [Qemu-devel] [PATCH 05/22] console: untangle gfx & txt updates Gerd Hoffmann
2012-11-02  7:20   ` Jan Kiszka
2012-11-02 14:44     ` Peter Maydell
2012-11-01 13:04 ` [Qemu-devel] [PATCH 06/22] console: init displaychangelisteners on register Gerd Hoffmann
2012-11-01 13:04 ` [Qemu-devel] [PATCH 07/22] vga: fix text mode updating Gerd Hoffmann
2012-11-01 13:04 ` [Qemu-devel] [PATCH 08/22] console: remove dpy_gfx_fill Gerd Hoffmann
2012-11-01 13:04 ` [Qemu-devel] [PATCH 09/22] console: remove DisplayAllocator Gerd Hoffmann
2012-11-01 13:04 ` [Qemu-devel] [PATCH 10/22] pixman: add submodule Gerd Hoffmann
2012-11-01 13:04 ` [Qemu-devel] [PATCH 11/22] pixman: windup in configure & makefiles Gerd Hoffmann
2012-11-01 13:04 ` [Qemu-devel] [PATCH 12/22] pixman: helper functions Gerd Hoffmann
2012-11-01 13:04 ` [Qemu-devel] [PATCH 13/22] pixman: add pixman image to DisplaySurface Gerd Hoffmann
2012-11-01 13:04 ` [Qemu-devel] [PATCH 14/22] console: make qemu_alloc_display static Gerd Hoffmann
2012-11-01 13:04 ` [Qemu-devel] [PATCH 15/22] console: don't set PixelFormat alpha fields for 32bpp Gerd Hoffmann
2012-11-01 13:04 ` [Qemu-devel] [PATCH 16/22] qxl: stop direct access to DisplaySurface fields Gerd Hoffmann
2012-11-01 13:04 ` [Qemu-devel] [PATCH 17/22] vga: " Gerd Hoffmann
2012-11-01 13:04 ` [Qemu-devel] [PATCH 18/22] pixman: switch screendump function Gerd Hoffmann
2012-11-01 13:04 ` [Qemu-devel] [PATCH 19/22] pixman/vnc: use pixman images in vnc Gerd Hoffmann
2012-11-01 13:04 ` [Qemu-devel] [PATCH 20/22] pixman/vnc: remove rgb_prepare_row* functions Gerd Hoffmann
2012-11-01 13:04 ` [Qemu-devel] [PATCH 21/22] pixman/vnc: remove dead code Gerd Hoffmann
2012-11-01 13:04 ` [Qemu-devel] [PATCH 22/22] pixman: drop obsolete fields from DisplaySurface Gerd Hoffmann
2012-11-01 19:33 ` [Qemu-devel] [PULL 00/22] console cleanups & pixman rendering Anthony Liguori
2012-11-02 16:14   ` Andreas Färber
2012-11-02 16:32     ` Andreas Färber
2012-11-03 12:33       ` Blue Swirl

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1351775057-3938-2-git-send-email-kraxel@redhat.com \
    --to=kraxel@redhat.com \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).