qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Gerd Hoffmann <kraxel@redhat.com>
To: qemu-devel@nongnu.org
Cc: Anthony Liguori <aliguori@us.ibm.com>, Gerd Hoffmann <kraxel@redhat.com>
Subject: [Qemu-devel] [PATCH 11/24] console: displaystate init revamp
Date: Thu,  4 Apr 2013 09:28:53 +0200	[thread overview]
Message-ID: <1365060546-24638-12-git-send-email-kraxel@redhat.com> (raw)
In-Reply-To: <1365060546-24638-1-git-send-email-kraxel@redhat.com>

We have only one DisplayState, so there is no need for the "next"
linking, rip it.  Also consolidate all displaystate initialization
into init_displaystate().  This function is called by vl.c after
creating the devices (and thus all QemuConsoles) and before
initializing DisplayChangeListensers (aka gtk/sdl/vnc/spice ui).

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
 include/ui/console.h |    5 +---
 ui/console.c         |   73 +++++++++++++++++++++++---------------------------
 vl.c                 |    6 +----
 3 files changed, 36 insertions(+), 48 deletions(-)

diff --git a/include/ui/console.h b/include/ui/console.h
index a234c72..3725dae 100644
--- a/include/ui/console.h
+++ b/include/ui/console.h
@@ -189,12 +189,9 @@ struct DisplayState {
     bool have_text;
 
     QLIST_HEAD(, DisplayChangeListener) listeners;
-
-    struct DisplayState *next;
 };
 
-void register_displaystate(DisplayState *ds);
-DisplayState *get_displaystate(void);
+DisplayState *init_displaystate(void);
 DisplaySurface* qemu_create_displaysurface_from(int width, int height, int bpp,
                                                 int linesize, uint8_t *data,
                                                 bool byteswap);
diff --git a/ui/console.c b/ui/console.c
index a4c9151..29f1805 100644
--- a/ui/console.c
+++ b/ui/console.c
@@ -163,6 +163,8 @@ static QemuConsole *active_console;
 static QemuConsole *consoles[MAX_CONSOLES];
 static int nb_consoles = 0;
 
+static void text_console_do_init(CharDriverState *chr, DisplayState *ds);
+
 void vga_hw_update(void)
 {
     if (active_console && active_console->hw_update)
@@ -1323,39 +1325,37 @@ bool dpy_cursor_define_supported(QemuConsole *con)
     return false;
 }
 
-static void dumb_display_init(void)
-{
-    DisplayState *ds = g_malloc0(sizeof(DisplayState));
-    int width = 640;
-    int height = 480;
-
-    if (is_fixedsize_console()) {
-        width = active_console->g_width;
-        height = active_console->g_height;
-    }
-    ds->surface = qemu_create_displaysurface(width, height);
-
-    register_displaystate(ds);
-}
-
 /***********************************************************/
 /* register display */
 
-void register_displaystate(DisplayState *ds)
+/* console.c internal use only */
+static DisplayState *get_alloc_displaystate(void)
 {
-    DisplayState **s;
-    s = &display_state;
-    while (*s != NULL)
-        s = &(*s)->next;
-    ds->next = NULL;
-    *s = ds;
+    if (!display_state) {
+        display_state = g_new0(DisplayState, 1);
+    }
+    return display_state;
 }
 
-DisplayState *get_displaystate(void)
+/*
+ * Called by main(), after creating QemuConsoles
+ * and before initializing ui (sdl/vnc/...).
+ */
+DisplayState *init_displaystate(void)
 {
+    int i;
+
     if (!display_state) {
-        dumb_display_init ();
+        display_state = g_new0(DisplayState, 1);
     }
+
+    for (i = 0; i < nb_consoles; i++) {
+        if (consoles[i]->console_type != GRAPHIC_CONSOLE &&
+            consoles[i]->ds == NULL) {
+            text_console_do_init(consoles[i]->chr, display_state);
+        }
+    }
+
     return display_state;
 }
 
@@ -1365,10 +1365,12 @@ QemuConsole *graphic_console_init(vga_hw_update_ptr update,
                                   vga_hw_text_update_ptr text_update,
                                   void *opaque)
 {
+    int width = 640;
+    int height = 480;
     QemuConsole *s;
     DisplayState *ds;
 
-    ds = (DisplayState *) g_malloc0(sizeof(DisplayState));
+    ds = get_alloc_displaystate();
     trace_console_gfx_new();
     s = new_console(ds, GRAPHIC_CONSOLE);
     s->hw_update = update;
@@ -1377,9 +1379,9 @@ QemuConsole *graphic_console_init(vga_hw_update_ptr update,
     s->hw_text_update = text_update;
     s->hw = opaque;
 
-    ds->surface = qemu_create_displaysurface(640, 480);
-
-    register_displaystate(ds);
+    if (!ds->surface) {
+        ds->surface = qemu_create_displaysurface(width, height);
+    }
     return s;
 }
 
@@ -1505,6 +1507,10 @@ static CharDriverState *text_console_init(ChardevVC *vc)
     s->g_height = height;
     chr->opaque = s;
     chr->chr_set_echo = text_console_set_echo;
+
+    if (display_state) {
+        text_console_do_init(chr, display_state);
+    }
     return chr;
 }
 
@@ -1520,17 +1526,6 @@ void register_vc_handler(VcHandler *handler)
     vc_handler = handler;
 }
 
-void text_consoles_set_display(DisplayState *ds)
-{
-    int i;
-
-    for (i = 0; i < nb_consoles; i++) {
-        if (consoles[i]->console_type != GRAPHIC_CONSOLE) {
-            text_console_do_init(consoles[i]->chr, ds);
-        }
-    }
-}
-
 void qemu_console_resize(QemuConsole *s, int width, int height)
 {
     s->g_width = width;
diff --git a/vl.c b/vl.c
index e2c9706..b05c289 100644
--- a/vl.c
+++ b/vl.c
@@ -4328,8 +4328,7 @@ int main(int argc, char **argv, char **envp)
 
     net_check_clients();
 
-    /* just use the first displaystate for the moment */
-    ds = get_displaystate();
+    ds = init_displaystate();
 
     /* init local displays */
     switch (display_type) {
@@ -4385,9 +4384,6 @@ int main(int argc, char **argv, char **envp)
     }
 #endif
 
-    /* display setup */
-    text_consoles_set_display(ds);
-
     if (foreach_device_config(DEV_GDB, gdbserver_start) < 0) {
         exit(1);
     }
-- 
1.7.9.7

  parent reply	other threads:[~2013-04-04  7:29 UTC|newest]

Thread overview: 32+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-04-04  7:28 [Qemu-devel] [PATCH v3 00/24] console: console overhaul continued Gerd Hoffmann
2013-04-04  7:28 ` [Qemu-devel] [PATCH 01/24] exynos4210_fimd.c: fix display resize bug introduced after console revamp Gerd Hoffmann
2013-04-04  7:28 ` [Qemu-devel] [PATCH 02/24] hw/vmware_vga.c: fix screen " Gerd Hoffmann
2013-04-05 11:21   ` Alexandru Damian
2013-04-04  7:28 ` [Qemu-devel] [PATCH 03/24] hw/vmware_vga.c: add tracepoints for mmio reads+writes Gerd Hoffmann
2013-04-04  7:28 ` [Qemu-devel] [PATCH 04/24] hw/vmware_vga.c: various vmware vga fixes Gerd Hoffmann
2013-04-04  7:28 ` [Qemu-devel] [PATCH 05/24] pixman: add qemu_pixman_color() Gerd Hoffmann
2013-04-04  7:28 ` [Qemu-devel] [PATCH 06/24] pixman: render vgafont glyphs into pixman images Gerd Hoffmann
2013-04-04  7:28 ` [Qemu-devel] [PATCH 07/24] console: use pixman for fill+blit Gerd Hoffmann
2013-04-04  7:28 ` [Qemu-devel] [PATCH 08/24] console: use pixman for font rendering Gerd Hoffmann
2013-04-04  7:28 ` [Qemu-devel] [PATCH 09/24] console: switch color_table_rgb to pixman_color_t Gerd Hoffmann
2013-04-04  7:28 ` [Qemu-devel] [PATCH 10/24] console: add trace events Gerd Hoffmann
2013-04-04  7:28 ` Gerd Hoffmann [this message]
2013-04-04  7:28 ` [Qemu-devel] [PATCH 12/24] console: rename vga_hw_*, add QemuConsole param Gerd Hoffmann
2013-04-04  7:28 ` [Qemu-devel] [PATCH 13/24] console: give each QemuConsole its own DisplaySurface Gerd Hoffmann
2013-04-04  7:28 ` [Qemu-devel] [PATCH 14/24] console: simplify screendump Gerd Hoffmann
2013-04-04  7:28 ` [Qemu-devel] [PATCH 15/24] console: zap g_width + g_height Gerd Hoffmann
2013-04-04  7:28 ` [Qemu-devel] [PATCH 16/24] console: move gui_update+gui_setup_refresh from vl.c into console.c Gerd Hoffmann
2013-04-04  7:28 ` [Qemu-devel] [PATCH 17/24] console: make DisplayState private to console.c Gerd Hoffmann
2013-04-04  7:29 ` [Qemu-devel] [PATCH 18/24] console: add GraphicHwOps Gerd Hoffmann
2013-04-04  7:29 ` [Qemu-devel] [PATCH 19/24] console: gui timer fixes Gerd Hoffmann
2013-04-04  7:29 ` [Qemu-devel] [PATCH 20/24] xen: re-enable refresh interval reporting for xenfb Gerd Hoffmann
2013-04-04 17:06   ` Stefano Stabellini
2013-04-05  7:28     ` Gerd Hoffmann
2013-04-05 10:07       ` Stefano Stabellini
2013-04-04  7:29 ` [Qemu-devel] [PATCH 21/24] console: add qemu_console_is_* Gerd Hoffmann
2013-04-04  7:29 ` [Qemu-devel] [PATCH 22/24] console: allow pinning displaychangelisteners to consoles Gerd Hoffmann
2013-04-04  7:29 ` [Qemu-devel] [PATCH 23/24] gtk: custom cursor support Gerd Hoffmann
2013-04-04  7:29 ` [Qemu-devel] [PATCH 24/24] qxl: register QemuConsole for secondary cards Gerd Hoffmann
  -- strict thread matches above, loose matches on Subject: below --
2013-04-16  9:39 [Qemu-devel] [PULL v4 00/24] console: console overhaul continued Gerd Hoffmann
2013-04-16  9:39 ` [Qemu-devel] [PATCH 11/24] console: displaystate init revamp Gerd Hoffmann
2013-04-24 16:18   ` Markus Armbruster
2013-04-24 16:38     ` Anthony Liguori

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=1365060546-24638-12-git-send-email-kraxel@redhat.com \
    --to=kraxel@redhat.com \
    --cc=aliguori@us.ibm.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).