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/
Home Products Support Community News


[Xen-devel] [PATCH]: QEMU: Additional error checking in Cirrus setup

To: xen-devel@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-devel] [PATCH]: QEMU: Additional error checking in Cirrus setup
From: Chris Lalancette <clalance@xxxxxxxxxx>
Date: Fri, 24 Aug 2007 14:21:06 -0400
Delivery-date: Fri, 24 Aug 2007 11:21:34 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxx
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/cgi-bin/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
User-agent: Thunderbird (X11/20070719)
     Attached is a patch to do some additional error checking in QEMU when
setting up the Cirrus Logic video device.  In particular, it may be the case
that that set_mm_mapping() fails because of xc_domain_populate_physmap().  In
this case, we should not blindly go on; the xc_map_foreign_batch() that follows
will cause a page fault and, at best, get mapped in a zeroed page from the dom0
(which is not what we want).  While I'm in here, fix a memory leak on an error 

The patch is against 3.1.0, but should apply fairly easily to xen-unstable.

Signed-off-by: Chris Lalancette <clalance@xxxxxxxxxx>
diff -urp xen-3.1.0-src.orig/tools/ioemu/hw/cirrus_vga.c 
--- xen-3.1.0-src.orig/tools/ioemu/hw/cirrus_vga.c      2007-05-18 
10:45:21.000000000 -0400
+++ xen-3.1.0-src/tools/ioemu/hw/cirrus_vga.c   2007-08-24 09:58:43.000000000 
@@ -2554,7 +2554,11 @@ static void *set_vram_mapping(unsigned l
     for (i = 0; i < nr_extents; i++)
         extent_start[i] = (begin + i * TARGET_PAGE_SIZE) >> TARGET_PAGE_BITS;
-    set_mm_mapping(xc_handle, domid, nr_extents, 0, extent_start);
+    if (set_mm_mapping(xc_handle, domid, nr_extents, 0, extent_start) < 0) {
+        fprintf(logfile, "Failed set_mm_mapping\n");
+        free(extent_start);
+        return NULL;
+    }
     vram_pointer = xc_map_foreign_batch(xc_handle, domid,
@@ -2562,6 +2566,7 @@ static void *set_vram_mapping(unsigned l
     if (vram_pointer == NULL) {
         fprintf(logfile, "xc_map_foreign_batch vgaram returned error %d\n",
+        free(extent_start);
         return NULL;
Xen-devel mailing list
<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-devel] [PATCH]: QEMU: Additional error checking in Cirrus setup, Chris Lalancette <=