Blame SOURCES/vesa-2.3.0-no-virt-shadowfb.patch

2fabc5
From 5abddb02644d2a63d5dff21c936374d6ac3df31e Mon Sep 17 00:00:00 2001
2fabc5
From: Adam Jackson <ajax@redhat.com>
2fabc5
Date: Wed, 16 Feb 2011 17:19:00 -0500
2fabc5
Subject: [PATCH] Turn shadowfb off on virtualized hardware
2fabc5
2fabc5
There's no benefit to shadowfb, since the framebuffer is in the same
2fabc5
memory domain as host memory; all you're doing is adding extra copies.
2fabc5
2fabc5
Signed-off-by: Adam Jackson <ajax@redhat.com>
2fabc5
---
2fabc5
 src/vesa.c |   34 +++++++++++++++++++++++++++++++---
2fabc5
 1 files changed, 31 insertions(+), 3 deletions(-)
2fabc5
2fabc5
diff --git a/src/vesa.c b/src/vesa.c
2fabc5
index 61d3550..9fd166f 100644
2fabc5
--- a/src/vesa.c
2fabc5
+++ b/src/vesa.c
2fabc5
@@ -841,9 +841,37 @@ VESAPreInit(ScrnInfoPtr pScrn, int flags)
2fabc5
     memcpy(pVesa->Options, VESAOptions, sizeof(VESAOptions));
2fabc5
     xf86ProcessOptions(pScrn->scrnIndex, pScrn->options, pVesa->Options);
2fabc5
 
2fabc5
-    /* Use shadow by default */
2fabc5
-    if (xf86ReturnOptValBool(pVesa->Options, OPTION_SHADOW_FB, TRUE)) 
2fabc5
-	pVesa->shadowFB = TRUE;
2fabc5
+    /* Use shadow by default, for non-virt hardware */
2fabc5
+    if (!xf86GetOptValBool(pVesa->Options, OPTION_SHADOW_FB, &pVesa->shadowFB))
2fabc5
+    {
2fabc5
+	switch (pVesa->pciInfo->vendor_id) {
2fabc5
+	    case 0x1234: /* bochs vga (not in pci.ids) */
2fabc5
+	    case 0x15ad: /* vmware */
2fabc5
+	    case 0x1b36: /* qemu qxl */
2fabc5
+	    case 0x80ee: /* virtualbox */
2fabc5
+	    case 0xaaaa: /* parallels (not in pci.ids) */
2fabc5
+		pVesa->shadowFB = FALSE;
2fabc5
+		break;
2fabc5
+
2fabc5
+	    case 0x1013: /* qemu's cirrus emulation */
2fabc5
+		if (pVesa->pciInfo->subvendor_id == 0x1af4)
2fabc5
+		    pVesa->shadowFB = FALSE;
2fabc5
+		else
2fabc5
+		    pVesa->shadowFB = TRUE;
2fabc5
+		break;
2fabc5
+
2fabc5
+	    case 0x1414: /* microsoft hyper-v */
2fabc5
+		if (pVesa->pciInfo->device_id == 0x5353)
2fabc5
+		    pVesa->shadowFB = FALSE;
2fabc5
+		else
2fabc5
+		    pVesa->shadowFB = TRUE;
2fabc5
+		break;
2fabc5
+
2fabc5
+	    default:
2fabc5
+		pVesa->shadowFB = TRUE;
2fabc5
+		break;
2fabc5
+	}	    
2fabc5
+    }
2fabc5
 
2fabc5
     if (xf86ReturnOptValBool(pVesa->Options, OPTION_DFLT_REFRESH, FALSE))
2fabc5
 	pVesa->defaultRefresh = TRUE;
2fabc5
-- 
2fabc5
1.7.3.5
2fabc5