All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 12 of 13] fix xenfb frontend and backend
@ 2009-03-02 17:22 Stefano Stabellini
  2009-03-03 17:36 ` Jeremy Fitzhardinge
  0 siblings, 1 reply; 3+ messages in thread
From: Stefano Stabellini @ 2009-03-02 17:22 UTC (permalink / raw)
  To: xen-devel

Due to the DisplayState changes the initialization order is changed
as well.
Now graphic devices are the first to be initialized and only after them
any display frontend is initialized.
Obviously this change has a direct consequence on the xenfb backend and
frontend and this patch takes care of adapting them to the new
initialization order.

Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>

---

diff -r 8aa8f3293ab9 hw/vga.c
--- a/hw/vga.c	Mon Mar 02 16:06:01 2009 +0000
+++ b/hw/vga.c	Mon Mar 02 16:06:41 2009 +0000
@@ -2497,7 +2497,7 @@
 
     xen_vga_state->vram_ptr = vram;
 #ifdef CONFIG_STUBDOM
-    xenfb_pv_display_start(vram);
+    xenfb_pv_display_vram(vram);
 #endif
 }
 
@@ -2539,13 +2539,13 @@
     s->get_offsets = vga_get_offsets;
     s->get_resolution = vga_get_resolution;
 
+    s->ds = graphic_console_init(vga_update_display, vga_invalidate_display,
+                                 vga_screen_dump, vga_update_text, s);
+
     if (!restore) {
         xen_vga_populate_vram(VRAM_RESERVED_ADDRESS, s->vram_size);
         s->vram_gmfn = VRAM_RESERVED_ADDRESS;
     }
-
-    s->ds = graphic_console_init(vga_update_display, vga_invalidate_display,
-                                 vga_screen_dump, vga_update_text, s);
 
     vga_bios_init(s);
     switch (vga_retrace_method) {
diff -r 8aa8f3293ab9 hw/xen_backend.h
--- a/hw/xen_backend.h	Mon Mar 02 16:06:01 2009 +0000
+++ b/hw/xen_backend.h	Mon Mar 02 16:06:41 2009 +0000
@@ -89,6 +89,6 @@
 extern struct XenDevOps xen_kbdmouse_ops;     /* xen_framebuffer.c */
 extern struct XenDevOps xen_framebuffer_ops;  /* xen_framebuffer.c */
 
-void xen_set_display(int domid, DisplayState *ds);
+void xen_set_display(int domid);
 
 #endif /* QEMU_HW_XEN_BACKEND_H */
diff -r 8aa8f3293ab9 hw/xen_machine_pv.c
--- a/hw/xen_machine_pv.c	Mon Mar 02 16:06:01 2009 +0000
+++ b/hw/xen_machine_pv.c	Mon Mar 02 16:06:41 2009 +0000
@@ -68,7 +68,7 @@
     xen_be_register("vfb", &xen_framebuffer_ops);
 
     /* setup framebuffer */
-    xen_set_display(xen_domid, ds);
+    xen_set_display(xen_domid);
 }
 
 QEMUMachine xenpv_machine = {
diff -r 8aa8f3293ab9 hw/xenfb.c
--- a/hw/xenfb.c	Mon Mar 02 16:06:01 2009 +0000
+++ b/hw/xenfb.c	Mon Mar 02 16:06:41 2009 +0000
@@ -86,7 +86,6 @@
     int               feature_update;
     int               refresh_period;
     int               bug_trigger;
-    int               have_console;
 
     struct {
 	int x,y,w,h;
@@ -347,12 +346,6 @@
 {
     struct XenInput *in = container_of(xendev, struct XenInput, c.xendev);
 
-    if (!in->c.ds) {
-        /* xen_set_display() below will set that and trigger us again */
-        xen_be_printf(xendev, 1, "ds not set (yet)\n");
-	return -1;
-    }
-
     xenstore_write_be_int(xendev, "feature-abs-pointer", 1);
     return 0;
 }
@@ -702,6 +695,9 @@
     int i;
     struct DisplayChangeListener *l;
 
+    if (!xenfb->width || !xenfb->height)
+        return;
+
     if (xenfb->feature_update) {
 #ifdef XENFB_TYPE_REFRESH_PERIOD
         int period = 99999999;
@@ -841,12 +837,6 @@
 {
     struct XenFB *fb = container_of(xendev, struct XenFB, c.xendev);
 
-    if (!fb->c.ds) {
-        /* xen_set_display() below will set that and trigger us again */
-	xen_be_printf(xendev, 1, "ds not set (yet)\n");
-	return -1;
-    }
-
     fb->refresh_period = -1;
 
 #ifdef XENFB_TYPE_RESIZE
@@ -879,15 +869,6 @@
     rc = xenfb_map_fb(fb);
     if (0 != rc)
 	return rc;
-
-    if (!fb->have_console) {
-        fb->c.ds = graphic_console_init(xenfb_update,
-                                        xenfb_invalidate,
-                                        NULL,
-                                        NULL,
-                                        fb);
-        fb->have_console = 1;
-    }
 
     if (-1 == xenstore_read_fe_int(xendev, "feature-update", &fb->feature_update))
 	fb->feature_update = 0;
@@ -977,8 +958,16 @@
     xen_be_check_state(xendev);
 }
 
-void xen_set_display(int domid, DisplayState *ds)
+void xen_set_display(int domid)
 {
+    struct XenDevice *xendev = xen_be_find_xendev("vfb", domid, 0);
+    struct XenFB *fb = container_of(xendev, struct XenFB, c.xendev);
+    DisplayState *ds = graphic_console_init(xenfb_update,
+            xenfb_invalidate,
+            NULL,
+            NULL,
+            fb);
+
     xen_set_display_type(domid, "vkbd", ds);
     xen_set_display_type(domid, "vfb", ds);
 }
diff -r 8aa8f3293ab9 qemu-xen.h
--- a/qemu-xen.h	Mon Mar 02 16:06:01 2009 +0000
+++ b/qemu-xen.h	Mon Mar 02 16:06:41 2009 +0000
@@ -101,7 +101,7 @@
 
 /* xenfbfront.c */
 int xenfb_pv_display_init(DisplayState *ds);
-int xenfb_pv_display_start(void *vram_start);
+int xenfb_pv_display_vram(void *vram_start);
 int xenfb_connect_vkbd(const char *path);
 int xenfb_connect_vfb(const char *path);
 
diff -r 8aa8f3293ab9 xenfbfront.c
--- a/xenfbfront.c	Mon Mar 02 16:06:01 2009 +0000
+++ b/xenfbfront.c	Mon Mar 02 16:06:41 2009 +0000
@@ -14,13 +14,14 @@
     struct semaphore kbd_sem;
     struct kbdfront_dev *kbd_dev;
     struct fbfront_dev *fb_dev;
-    void *vga_vram, *nonshared_vram;
+    void *nonshared_vram;
     DisplayState *ds;
 } XenFBState;
 
 XenFBState *xs;
 
 static char *kbd_path, *fb_path;
+static void *vga_vram;
 
 static unsigned char linux2scancode[KEY_MAX + 1];
 static DisplayChangeListener *dcl;
@@ -58,7 +59,7 @@
     if (!fb_dev)
         return;
     if (!(ds->surface->flags & QEMU_ALLOCATED_FLAG))
-        offset = ((void *) ds_get_data(ds)) - xs->vga_vram;
+        offset = ((void *) ds_get_data(ds)) - vga_vram;
     else
         offset = vga_ram_size;
     fbfront_resize(fb_dev, ds_get_width(ds), ds_get_height(ds), ds_get_linesize(ds), ds_get_bits_per_pixel(ds), offset);
@@ -68,7 +69,7 @@
 {
     XenFBState *xs = ds->opaque;
     struct fbfront_dev *fb_dev = xs->fb_dev;
-    int offset = ((void *) ds_get_data(ds)) - xs->vga_vram;
+    int offset = ((void *) ds_get_data(ds)) - vga_vram;
     if (!fb_dev)
         return;
     fbfront_resize(fb_dev, ds_get_width(ds), ds_get_height(ds), ds_get_linesize(ds), ds_get_bits_per_pixel(ds), offset);
@@ -216,6 +217,13 @@
 
 int xenfb_pv_display_init(DisplayState *ds)
 {
+    struct fbfront_dev *fb_dev;
+    int kbd_fd, fb_fd;
+    unsigned long *mfns;
+    int offset = 0;
+    int i;
+    int n = vga_ram_size / PAGE_SIZE;
+
     if (!fb_path || !kbd_path)
         return -1;
 
@@ -238,27 +246,10 @@
     dcl->dpy_setdata = xenfb_pv_setdata;
     dcl->dpy_refresh = xenfb_pv_refresh;
     register_displaychangelistener(ds, dcl);
-    return 0;
-}
 
-int xenfb_pv_display_start(void *data)
-{
-    DisplayState *ds;
-    struct fbfront_dev *fb_dev;
-    int kbd_fd, fb_fd;
-    int offset = 0;
-    unsigned long *mfns;
-    int n = vga_ram_size / PAGE_SIZE;
-    int i;
-
-    if (!fb_path || !kbd_path)
-        return 0;
-
-    ds = xs->ds;
-    xs->vga_vram = data;
     mfns = malloc(2 * n * sizeof(*mfns));
     for (i = 0; i < n; i++)
-        mfns[i] = virtual_to_mfn(xs->vga_vram + i * PAGE_SIZE);
+        mfns[i] = virtual_to_mfn(vga_vram + i * PAGE_SIZE);
     for (i = 0; i < n; i++)
         mfns[n + i] = virtual_to_mfn(xs->nonshared_vram + i * PAGE_SIZE);
 
@@ -271,7 +262,7 @@
     free(fb_path);
 
     if (!(ds->surface->flags & QEMU_ALLOCATED_FLAG)) {
-        offset = (void*) ds_get_data(ds) - xs->vga_vram;
+        offset = (void*) ds_get_data(ds) - vga_vram;
     } else {
         offset = vga_ram_size;
     }
@@ -290,3 +281,9 @@
     xs->fb_dev = fb_dev;
     return 0;
 }
+
+int xenfb_pv_display_vram(void *data)
+{
+    vga_vram = data;
+}
+

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

* Re: [PATCH 12 of 13] fix xenfb frontend and backend
  2009-03-02 17:22 [PATCH 12 of 13] fix xenfb frontend and backend Stefano Stabellini
@ 2009-03-03 17:36 ` Jeremy Fitzhardinge
  2009-03-03 17:59   ` Stefano Stabellini
  0 siblings, 1 reply; 3+ messages in thread
From: Jeremy Fitzhardinge @ 2009-03-03 17:36 UTC (permalink / raw)
  To: Stefano Stabellini; +Cc: xen-devel

Stefano Stabellini wrote:
> Due to the DisplayState changes the initialization order is changed
> as well.
> Now graphic devices are the first to be initialized and only after them
> any display frontend is initialized.
> Obviously this change has a direct consequence on the xenfb backend and
> frontend and this patch takes care of adapting them to the new
> initialization order.
>   

Does anything here need to be merged into the pvops kernel xenfb frontend?

    J
> Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
>
> ---
>
> diff -r 8aa8f3293ab9 hw/vga.c
> --- a/hw/vga.c	Mon Mar 02 16:06:01 2009 +0000
> +++ b/hw/vga.c	Mon Mar 02 16:06:41 2009 +0000
> @@ -2497,7 +2497,7 @@
>  
>      xen_vga_state->vram_ptr = vram;
>  #ifdef CONFIG_STUBDOM
> -    xenfb_pv_display_start(vram);
> +    xenfb_pv_display_vram(vram);
>  #endif
>  }
>  
> @@ -2539,13 +2539,13 @@
>      s->get_offsets = vga_get_offsets;
>      s->get_resolution = vga_get_resolution;
>  
> +    s->ds = graphic_console_init(vga_update_display, vga_invalidate_display,
> +                                 vga_screen_dump, vga_update_text, s);
> +
>      if (!restore) {
>          xen_vga_populate_vram(VRAM_RESERVED_ADDRESS, s->vram_size);
>          s->vram_gmfn = VRAM_RESERVED_ADDRESS;
>      }
> -
> -    s->ds = graphic_console_init(vga_update_display, vga_invalidate_display,
> -                                 vga_screen_dump, vga_update_text, s);
>  
>      vga_bios_init(s);
>      switch (vga_retrace_method) {
> diff -r 8aa8f3293ab9 hw/xen_backend.h
> --- a/hw/xen_backend.h	Mon Mar 02 16:06:01 2009 +0000
> +++ b/hw/xen_backend.h	Mon Mar 02 16:06:41 2009 +0000
> @@ -89,6 +89,6 @@
>  extern struct XenDevOps xen_kbdmouse_ops;     /* xen_framebuffer.c */
>  extern struct XenDevOps xen_framebuffer_ops;  /* xen_framebuffer.c */
>  
> -void xen_set_display(int domid, DisplayState *ds);
> +void xen_set_display(int domid);
>  
>  #endif /* QEMU_HW_XEN_BACKEND_H */
> diff -r 8aa8f3293ab9 hw/xen_machine_pv.c
> --- a/hw/xen_machine_pv.c	Mon Mar 02 16:06:01 2009 +0000
> +++ b/hw/xen_machine_pv.c	Mon Mar 02 16:06:41 2009 +0000
> @@ -68,7 +68,7 @@
>      xen_be_register("vfb", &xen_framebuffer_ops);
>  
>      /* setup framebuffer */
> -    xen_set_display(xen_domid, ds);
> +    xen_set_display(xen_domid);
>  }
>  
>  QEMUMachine xenpv_machine = {
> diff -r 8aa8f3293ab9 hw/xenfb.c
> --- a/hw/xenfb.c	Mon Mar 02 16:06:01 2009 +0000
> +++ b/hw/xenfb.c	Mon Mar 02 16:06:41 2009 +0000
> @@ -86,7 +86,6 @@
>      int               feature_update;
>      int               refresh_period;
>      int               bug_trigger;
> -    int               have_console;
>  
>      struct {
>  	int x,y,w,h;
> @@ -347,12 +346,6 @@
>  {
>      struct XenInput *in = container_of(xendev, struct XenInput, c.xendev);
>  
> -    if (!in->c.ds) {
> -        /* xen_set_display() below will set that and trigger us again */
> -        xen_be_printf(xendev, 1, "ds not set (yet)\n");
> -	return -1;
> -    }
> -
>      xenstore_write_be_int(xendev, "feature-abs-pointer", 1);
>      return 0;
>  }
> @@ -702,6 +695,9 @@
>      int i;
>      struct DisplayChangeListener *l;
>  
> +    if (!xenfb->width || !xenfb->height)
> +        return;
> +
>      if (xenfb->feature_update) {
>  #ifdef XENFB_TYPE_REFRESH_PERIOD
>          int period = 99999999;
> @@ -841,12 +837,6 @@
>  {
>      struct XenFB *fb = container_of(xendev, struct XenFB, c.xendev);
>  
> -    if (!fb->c.ds) {
> -        /* xen_set_display() below will set that and trigger us again */
> -	xen_be_printf(xendev, 1, "ds not set (yet)\n");
> -	return -1;
> -    }
> -
>      fb->refresh_period = -1;
>  
>  #ifdef XENFB_TYPE_RESIZE
> @@ -879,15 +869,6 @@
>      rc = xenfb_map_fb(fb);
>      if (0 != rc)
>  	return rc;
> -
> -    if (!fb->have_console) {
> -        fb->c.ds = graphic_console_init(xenfb_update,
> -                                        xenfb_invalidate,
> -                                        NULL,
> -                                        NULL,
> -                                        fb);
> -        fb->have_console = 1;
> -    }
>  
>      if (-1 == xenstore_read_fe_int(xendev, "feature-update", &fb->feature_update))
>  	fb->feature_update = 0;
> @@ -977,8 +958,16 @@
>      xen_be_check_state(xendev);
>  }
>  
> -void xen_set_display(int domid, DisplayState *ds)
> +void xen_set_display(int domid)
>  {
> +    struct XenDevice *xendev = xen_be_find_xendev("vfb", domid, 0);
> +    struct XenFB *fb = container_of(xendev, struct XenFB, c.xendev);
> +    DisplayState *ds = graphic_console_init(xenfb_update,
> +            xenfb_invalidate,
> +            NULL,
> +            NULL,
> +            fb);
> +
>      xen_set_display_type(domid, "vkbd", ds);
>      xen_set_display_type(domid, "vfb", ds);
>  }
> diff -r 8aa8f3293ab9 qemu-xen.h
> --- a/qemu-xen.h	Mon Mar 02 16:06:01 2009 +0000
> +++ b/qemu-xen.h	Mon Mar 02 16:06:41 2009 +0000
> @@ -101,7 +101,7 @@
>  
>  /* xenfbfront.c */
>  int xenfb_pv_display_init(DisplayState *ds);
> -int xenfb_pv_display_start(void *vram_start);
> +int xenfb_pv_display_vram(void *vram_start);
>  int xenfb_connect_vkbd(const char *path);
>  int xenfb_connect_vfb(const char *path);
>  
> diff -r 8aa8f3293ab9 xenfbfront.c
> --- a/xenfbfront.c	Mon Mar 02 16:06:01 2009 +0000
> +++ b/xenfbfront.c	Mon Mar 02 16:06:41 2009 +0000
> @@ -14,13 +14,14 @@
>      struct semaphore kbd_sem;
>      struct kbdfront_dev *kbd_dev;
>      struct fbfront_dev *fb_dev;
> -    void *vga_vram, *nonshared_vram;
> +    void *nonshared_vram;
>      DisplayState *ds;
>  } XenFBState;
>  
>  XenFBState *xs;
>  
>  static char *kbd_path, *fb_path;
> +static void *vga_vram;
>  
>  static unsigned char linux2scancode[KEY_MAX + 1];
>  static DisplayChangeListener *dcl;
> @@ -58,7 +59,7 @@
>      if (!fb_dev)
>          return;
>      if (!(ds->surface->flags & QEMU_ALLOCATED_FLAG))
> -        offset = ((void *) ds_get_data(ds)) - xs->vga_vram;
> +        offset = ((void *) ds_get_data(ds)) - vga_vram;
>      else
>          offset = vga_ram_size;
>      fbfront_resize(fb_dev, ds_get_width(ds), ds_get_height(ds), ds_get_linesize(ds), ds_get_bits_per_pixel(ds), offset);
> @@ -68,7 +69,7 @@
>  {
>      XenFBState *xs = ds->opaque;
>      struct fbfront_dev *fb_dev = xs->fb_dev;
> -    int offset = ((void *) ds_get_data(ds)) - xs->vga_vram;
> +    int offset = ((void *) ds_get_data(ds)) - vga_vram;
>      if (!fb_dev)
>          return;
>      fbfront_resize(fb_dev, ds_get_width(ds), ds_get_height(ds), ds_get_linesize(ds), ds_get_bits_per_pixel(ds), offset);
> @@ -216,6 +217,13 @@
>  
>  int xenfb_pv_display_init(DisplayState *ds)
>  {
> +    struct fbfront_dev *fb_dev;
> +    int kbd_fd, fb_fd;
> +    unsigned long *mfns;
> +    int offset = 0;
> +    int i;
> +    int n = vga_ram_size / PAGE_SIZE;
> +
>      if (!fb_path || !kbd_path)
>          return -1;
>  
> @@ -238,27 +246,10 @@
>      dcl->dpy_setdata = xenfb_pv_setdata;
>      dcl->dpy_refresh = xenfb_pv_refresh;
>      register_displaychangelistener(ds, dcl);
> -    return 0;
> -}
>  
> -int xenfb_pv_display_start(void *data)
> -{
> -    DisplayState *ds;
> -    struct fbfront_dev *fb_dev;
> -    int kbd_fd, fb_fd;
> -    int offset = 0;
> -    unsigned long *mfns;
> -    int n = vga_ram_size / PAGE_SIZE;
> -    int i;
> -
> -    if (!fb_path || !kbd_path)
> -        return 0;
> -
> -    ds = xs->ds;
> -    xs->vga_vram = data;
>      mfns = malloc(2 * n * sizeof(*mfns));
>      for (i = 0; i < n; i++)
> -        mfns[i] = virtual_to_mfn(xs->vga_vram + i * PAGE_SIZE);
> +        mfns[i] = virtual_to_mfn(vga_vram + i * PAGE_SIZE);
>      for (i = 0; i < n; i++)
>          mfns[n + i] = virtual_to_mfn(xs->nonshared_vram + i * PAGE_SIZE);
>  
> @@ -271,7 +262,7 @@
>      free(fb_path);
>  
>      if (!(ds->surface->flags & QEMU_ALLOCATED_FLAG)) {
> -        offset = (void*) ds_get_data(ds) - xs->vga_vram;
> +        offset = (void*) ds_get_data(ds) - vga_vram;
>      } else {
>          offset = vga_ram_size;
>      }
> @@ -290,3 +281,9 @@
>      xs->fb_dev = fb_dev;
>      return 0;
>  }
> +
> +int xenfb_pv_display_vram(void *data)
> +{
> +    vga_vram = data;
> +}
> +
>
>
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@lists.xensource.com
> http://lists.xensource.com/xen-devel
>   

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

* Re: [PATCH 12 of 13] fix xenfb frontend and backend
  2009-03-03 17:36 ` Jeremy Fitzhardinge
@ 2009-03-03 17:59   ` Stefano Stabellini
  0 siblings, 0 replies; 3+ messages in thread
From: Stefano Stabellini @ 2009-03-03 17:59 UTC (permalink / raw)
  To: Jeremy Fitzhardinge; +Cc: xen-devel

Jeremy Fitzhardinge wrote:

> Stefano Stabellini wrote:
>> Due to the DisplayState changes the initialization order is changed
>> as well.
>> Now graphic devices are the first to be initialized and only after them
>> any display frontend is initialized.
>> Obviously this change has a direct consequence on the xenfb backend and
>> frontend and this patch takes care of adapting them to the new
>> initialization order.
>>   
> 
> Does anything here need to be merged into the pvops kernel xenfb frontend?

Nothing, this patch series is for qemu-xen (xenfbfront runs in a stubdom
and hw/xenfb in qemu-dm).

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

end of thread, other threads:[~2009-03-03 17:59 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-03-02 17:22 [PATCH 12 of 13] fix xenfb frontend and backend Stefano Stabellini
2009-03-03 17:36 ` Jeremy Fitzhardinge
2009-03-03 17:59   ` Stefano Stabellini

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.