From patchwork Wed Jul 6 12:19:15 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alon Levy X-Patchwork-Id: 103462 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [140.186.70.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (Client did not present a certificate) by ozlabs.org (Postfix) with ESMTPS id 50EDEB6F81 for ; Wed, 6 Jul 2011 22:34:27 +1000 (EST) Received: from localhost ([::1]:60149 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1QeRJ9-0004o3-57 for incoming@patchwork.ozlabs.org; Wed, 06 Jul 2011 08:34:23 -0400 Received: from eggs.gnu.org ([140.186.70.92]:33962) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1QeR4x-0001cr-B0 for qemu-devel@nongnu.org; Wed, 06 Jul 2011 08:19:46 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1QeR4v-0005Bq-7s for qemu-devel@nongnu.org; Wed, 06 Jul 2011 08:19:43 -0400 Received: from mx1.redhat.com ([209.132.183.28]:8236) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1QeR4u-0005BN-KK for qemu-devel@nongnu.org; Wed, 06 Jul 2011 08:19:40 -0400 Received: from int-mx02.intmail.prod.int.phx2.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id p66CJd1I020631 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Wed, 6 Jul 2011 08:19:39 -0400 Received: from bow.redhat.com (vpn-10-220.rdu.redhat.com [10.11.10.220]) by int-mx02.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id p66CJR0m022836; Wed, 6 Jul 2011 08:19:38 -0400 From: Alon Levy To: qemu-devel@nongnu.org Date: Wed, 6 Jul 2011 14:19:15 +0200 Message-Id: <1309954766-9728-7-git-send-email-alevy@redhat.com> In-Reply-To: <1309954766-9728-1-git-send-email-alevy@redhat.com> References: <1309954766-9728-1-git-send-email-alevy@redhat.com> X-Scanned-By: MIMEDefang 2.67 on 10.5.11.12 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 209.132.183.28 Cc: yhalperi@redhat.com, kraxel@redhat.com Subject: [Qemu-devel] [PATCH] qxl: move qemu_spice_create_primary_surface call out of qxl_create_guest_primary X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org From: Gerd Hoffmann Signed-off-by: Gerd Hoffmann --- hw/qxl.c | 44 ++++++++++++++++++++++++++------------------ 1 files changed, 26 insertions(+), 18 deletions(-) diff --git a/hw/qxl.c b/hw/qxl.c index 26f80d5..22714bb 100644 --- a/hw/qxl.c +++ b/hw/qxl.c @@ -855,9 +855,9 @@ void *qxl_phys2virt(PCIQXLDevice *qxl, QXLPHYSICAL pqxl, int group_id) } } -static void qxl_create_guest_primary(PCIQXLDevice *qxl, int loadvm) +static void qxl_create_guest_primary(PCIQXLDevice *qxl, int loadvm, + QXLDevSurfaceCreate *surface) { - QXLDevSurfaceCreate surface; QXLSurfaceCreate *sc = &qxl->guest_primary.surface; assert(qxl->mode != QXL_MODE_NATIVE); @@ -866,24 +866,23 @@ static void qxl_create_guest_primary(PCIQXLDevice *qxl, int loadvm) dprint(qxl, 1, "%s: %dx%d\n", __FUNCTION__, le32_to_cpu(sc->width), le32_to_cpu(sc->height)); - surface.format = le32_to_cpu(sc->format); - surface.height = le32_to_cpu(sc->height); - surface.mem = le64_to_cpu(sc->mem); - surface.position = le32_to_cpu(sc->position); - surface.stride = le32_to_cpu(sc->stride); - surface.width = le32_to_cpu(sc->width); - surface.type = le32_to_cpu(sc->type); - surface.flags = le32_to_cpu(sc->flags); - - surface.mouse_mode = true; - surface.group_id = MEMSLOT_GROUP_GUEST; + surface->format = le32_to_cpu(sc->format); + surface->height = le32_to_cpu(sc->height); + surface->mem = le64_to_cpu(sc->mem); + surface->position = le32_to_cpu(sc->position); + surface->stride = le32_to_cpu(sc->stride); + surface->width = le32_to_cpu(sc->width); + surface->type = le32_to_cpu(sc->type); + surface->flags = le32_to_cpu(sc->flags); + + surface->mouse_mode = true; + surface->group_id = MEMSLOT_GROUP_GUEST; if (loadvm) { - surface.flags |= QXL_SURF_FLAG_KEEP_DATA; + surface->flags |= QXL_SURF_FLAG_KEEP_DATA; } qxl->mode = QXL_MODE_NATIVE; qxl->cmdflags = 0; - qemu_spice_create_primary_surface(&qxl->ssd, 0, &surface); /* for local rendering */ qxl_render_resize(qxl); @@ -921,6 +920,7 @@ static void qxl_set_mode(PCIQXLDevice *d, int modenr, int loadvm) .mouse_mode = true, .mem = devmem + d->shadow_rom.draw_area_offset, }; + QXLDevSurfaceCreate s; dprint(d, 1, "%s: mode %d [ %d x %d @ %d bpp devmem 0x%lx ]\n", __FUNCTION__, modenr, mode->x_res, mode->y_res, mode->bits, devmem); @@ -933,7 +933,8 @@ static void qxl_set_mode(PCIQXLDevice *d, int modenr, int loadvm) qemu_spice_add_memslot(&d->ssd, &memslot); d->guest_primary.surface = surface; - qxl_create_guest_primary(d, 0); + qxl_create_guest_primary(d, 0, &s); + qemu_spice_create_primary_surface(&d->ssd, 0, &s); d->mode = QXL_MODE_COMPAT; d->cmdflags = QXL_COMMAND_FLAG_COMPAT; @@ -1026,11 +1027,16 @@ static void ioport_write(void *opaque, uint32_t addr, uint32_t val) qxl_del_memslot(d, val); break; case QXL_IO_CREATE_PRIMARY: + { + QXLDevSurfaceCreate surface; + PANIC_ON(val != 0); dprint(d, 1, "QXL_IO_CREATE_PRIMARY\n"); d->guest_primary.surface = d->ram->create_surface; - qxl_create_guest_primary(d, 0); + qxl_create_guest_primary(d, 0, &surface); + qemu_spice_create_primary_surface(&d->ssd, 0, &surface); break; + } case QXL_IO_DESTROY_PRIMARY: PANIC_ON(val != 0); dprint(d, 1, "QXL_IO_DESTROY_PRIMARY (%s)\n", qxl_mode_to_string(d->mode)); @@ -1394,6 +1400,7 @@ static int qxl_post_load(void *opaque, int version) uint8_t *ram_start = d->vga.vram_ptr; QXLCommandExt *cmds; QXLDevMemSlot memslot; + QXLDevSurfaceCreate surface; int in, out, i, newmode; dprint(d, 1, "%s: start\n", __FUNCTION__); @@ -1425,7 +1432,8 @@ static int qxl_post_load(void *opaque, int version) qxl_add_memslot(d, i, 0, &memslot); qemu_spice_add_memslot(&d->ssd, &memslot); } - qxl_create_guest_primary(d, 1); + qxl_create_guest_primary(d, 1, &surface); + qemu_spice_create_primary_surface(&d->ssd, 0, &surface); /* replay surface-create and cursor-set commands */ cmds = qemu_mallocz(sizeof(QXLCommandExt) * (NUM_SURFACES + 1));