WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-devel

答复: Re: [Xen-devel][PATCH]qemu-xen: let xenfb_guest_copy() handle depth=

To: "Stefano Stabellini" <stefano.stabellini@xxxxxxxxxxxxx>
Subject: 答复: Re: [Xen-devel][PATCH]qemu-xen: let xenfb_guest_copy() handle depth=32 case
From: "Chun Yan Liu" <cyliu@xxxxxxxxxx>
Date: Mon, 25 Oct 2010 00:26:05 -0600
Cc: "xen-devel@xxxxxxxxxxxxxxxxxxx" <xen-devel@xxxxxxxxxxxxxxxxxxx>
Delivery-date: Sun, 24 Oct 2010 23:26:58 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
In-reply-to: <alpine.DEB.2.00.1010211522500.10348@kaball-desktop>
List-help: <mailto:xen-devel-request@lists.xensource.com?subject=help>
List-id: Xen developer discussion <xen-devel.lists.xensource.com>
List-post: <mailto:xen-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe>
References: <4CBF292202000066000192D9@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx> <alpine.DEB.2.00.1010211522500.10348@kaball-desktop>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
Dear Stefano,
 
Thanks for you comments. Something to clarify:
1. (when bpp == 32, depth should be 24), I think not all places follow that rule. Change xenfb_configure_fb( ) only still has problem.
In my testing, the initialization process: fb_connect -> xenfb_configure_fb(), it sets xenfb->depth to fb_page->depth,  it's 32. The graphic display after VM is started is fine.
But if we change xenfb->depth to 24, the graphic display after VM is started is corrupted.
2.  About the second comment, if (xenfb->depth == bpp), buffer should be shared. Actually, in our testing, do CTRL+ALT+2, then CTRL+ALT+1, in xenfb_guest_copy( ), xenfb->depth=32, bpp=32, buffer is NOT shared. If we do not add the if(xenfb->depth == bpp ) part, the screen can not be restored.
 
Thanks,
Chunyan

>>> Stefano Stabellini <stefano.stabellini@xxxxxxxxxxxxx> 2010/10/21 22:32 >>>
On Wed, 20 Oct 2010, Chun Yan Liu wrote:
> In hw/xenfb.c, xenfb_guest_copy() function doesn't handle xenfb->depth=32 case. When xenfb->depth=32, it will report error
> and won't copy data from the guest framebuffer region into QEMU's displaysurface, thus when enter CTRL+ALT+2 to qemu
> monitor console then CTRL+ALT+1 back to guest X window, the screen cannot be restored.
>
> This patch adds two things:
> 1. when xenfb->depth equals destination bpp, do not need data translation, simply copy data from guest framebuffer into
> QEMU's displaysurface.
> 2. when xenfb->depth and destination bpp differs, add processing for xenfb->depth=32 case.
>

The source of the confusion is that in the xenfb protocol depth actually
means bpp (when bpp == 32, depth should be 24).

It would be good to rename xenfb->depth to xenfb->bpp or at least add
a comment in xenfb_configure_fb to explain that depth is actually
bpp in that case.


> Signed-off by Chunyan Liu <cyliu@xxxxxxxxxx>
> ??
> diff -r e4f337bb97f7 tools/ioemu-qemu-xen/hw/xenfb.c
> --- a/hw/xenfb.c??Wed Oct 20 19:39:28 2010 +0800
> +++ b/hw/xenfb.c??Wed Oct 20 21:42:37 2010 +0800
> @@ -612,6 +612,12 @@
> ???????? uint8_t *data = "">> ??
> ???????? if (!is_buffer_shared(xenfb->c.ds->surface)) {
> +?????????????? if (xenfb->depth == bpp) {
> +?????????????????????????????? for (line = y; line < (y+h); line++) {
> +?????????????????????????????????????????????? memcpy (data + (line * linesize) + (x * bpp / 8), xenfb->pixels + xenfb->offset + (line *
> xenfb->row_stride) + (x * xenfb->depth / 8), w * xenfb->depth / 8);
> +?????????????????????????????? }
> +?????????????? }
> +?????????????? else{

This is not needed because if (xenfb->depth == bpp) the buffer should be
shared.
See xenfb_update and the call to qemu_create_displaysurface_from.


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
<Prev in Thread] Current Thread [Next in Thread>