diff -ruN xserver-4c6a89ee783d62fb75a738339351830c35b19a38/config/x11-input.fdi xserver-4970d757a7364c1d2fb4db4e404e88e8ad989ddb/config/x11-input.fdi
--- xserver-4c6a89ee783d62fb75a738339351830c35b19a38/config/x11-input.fdi	2008-11-05 20:39:01.000000000 +0000
+++ xserver-4970d757a7364c1d2fb4db4e404e88e8ad989ddb/config/x11-input.fdi	2008-12-16 19:19:00.000000000 +0000
@@ -64,8 +64,8 @@
       <merge key="input.x11_options.XkbRules" type="string">base</merge>
 
       <!-- If we're using Linux, we use evdev by default (falling back to
-           keyboard otherwise). -->
-      <merge key="input.x11_driver" type="string">keyboard</merge>
+           kbd otherwise). -->
+      <merge key="input.x11_driver" type="string">kbd</merge>
       <merge key="input.x11_options.XkbModel" type="string">pc105</merge>
       <match key="/org/freedesktop/Hal/devices/computer:system.kernel.name"
              string="Linux">
diff -ruN xserver-4c6a89ee783d62fb75a738339351830c35b19a38/exa/exa_accel.c xserver-4970d757a7364c1d2fb4db4e404e88e8ad989ddb/exa/exa_accel.c
--- xserver-4c6a89ee783d62fb75a738339351830c35b19a38/exa/exa_accel.c	2008-11-05 20:39:01.000000000 +0000
+++ xserver-4970d757a7364c1d2fb4db4e404e88e8ad989ddb/exa/exa_accel.c	2008-12-16 19:19:00.000000000 +0000
@@ -398,6 +398,10 @@
     RegionPtr srcregion = NULL, dstregion = NULL;
     xRectangle *rects;
 
+    /* avoid doing copy operations if no boxes */
+    if (nbox == 0)
+	return;
+
     pSrcPixmap = exaGetDrawablePixmap (pSrcDrawable);
     pDstPixmap = exaGetDrawablePixmap (pDstDrawable);
 
diff -ruN xserver-4c6a89ee783d62fb75a738339351830c35b19a38/hw/xfree86/common/xf86Helper.c xserver-4970d757a7364c1d2fb4db4e404e88e8ad989ddb/hw/xfree86/common/xf86Helper.c
--- xserver-4c6a89ee783d62fb75a738339351830c35b19a38/hw/xfree86/common/xf86Helper.c	2008-11-05 20:39:01.000000000 +0000
+++ xserver-4970d757a7364c1d2fb4db4e404e88e8ad989ddb/hw/xfree86/common/xf86Helper.c	2008-12-16 19:19:00.000000000 +0000
@@ -448,10 +448,6 @@
 #define GLOBAL_DEFAULT_DEPTH 24
 #endif
 
-#ifndef GLOBAL_DEFAULT_FBBPP
-#define GLOBAL_DEFAULT_FBBPP 32
-#endif
-
 _X_EXPORT Bool
 xf86SetDepthBpp(ScrnInfoPtr scrp, int depth, int dummy, int fbbpp,
 		int depth24flags)
@@ -529,7 +525,6 @@
 	    if (depth > 0)
 		scrp->depth = depth;
 	} else {
-	    scrp->bitsPerPixel = GLOBAL_DEFAULT_FBBPP;
 	    scrp->depth = GLOBAL_DEFAULT_DEPTH;
 	}
     }
diff -ruN xserver-4c6a89ee783d62fb75a738339351830c35b19a38/hw/xfree86/os-support/linux/int10/linux.c xserver-4970d757a7364c1d2fb4db4e404e88e8ad989ddb/hw/xfree86/os-support/linux/int10/linux.c
--- xserver-4c6a89ee783d62fb75a738339351830c35b19a38/hw/xfree86/os-support/linux/int10/linux.c	2008-11-05 20:39:01.000000000 +0000
+++ xserver-4970d757a7364c1d2fb4db4e404e88e8ad989ddb/hw/xfree86/os-support/linux/int10/linux.c	2008-12-16 19:19:00.000000000 +0000
@@ -1,6 +1,6 @@
 /*
  * linux specific part of the int10 module
- * Copyright 1999, 2000, 2001, 2002, 2003, 2004 Egbert Eich
+ * Copyright 1999, 2000, 2001, 2002, 2003, 2004, 2008 Egbert Eich
  */
 #ifdef HAVE_XORG_CONFIG_H
 #include <xorg-config.h>
@@ -357,7 +357,10 @@
 		   "shmat(low_mem) error: %s\n",strerror(errno));
 	return FALSE;
     }
-    
+    if (mprotect((void*)0, V_RAM, PROT_READ|PROT_WRITE|PROT_EXEC) != 0)
+        xf86DrvMsg(pInt->scrnIndex, X_ERROR,
+		   "Cannot set EXEC bit on low memory: %s\n", strerror(errno));
+
     if (((linuxInt10Priv*)pInt->private)->highMem >= 0) {
 	addr = shmat(((linuxInt10Priv*)pInt->private)->highMem,
 		     (char*)HIGH_MEM, 0);
@@ -368,6 +371,11 @@
 		       "shmget error: %s\n",strerror(errno));
 	    return FALSE;
 	}
+	if (mprotect((void*)HIGH_MEM, HIGH_MEM_SIZE,
+		     PROT_READ|PROT_WRITE|PROT_EXEC) != 0)
+	    xf86DrvMsg(pInt->scrnIndex, X_ERROR,
+		       "Cannot set EXEC bit on high memory: %s\n",
+		       strerror(errno));
     } else {
 	if ((fd = open(DEV_MEM, O_RDWR, 0)) >= 0) {
 	    if (mmap((void *)(V_BIOS), SYS_BIOS - V_BIOS,
diff -ruN xserver-4c6a89ee783d62fb75a738339351830c35b19a38/hw/xfree86/xaa/xaa.h xserver-4970d757a7364c1d2fb4db4e404e88e8ad989ddb/hw/xfree86/xaa/xaa.h
--- xserver-4c6a89ee783d62fb75a738339351830c35b19a38/hw/xfree86/xaa/xaa.h	2008-11-05 20:39:01.000000000 +0000
+++ xserver-4970d757a7364c1d2fb4db4e404e88e8ad989ddb/hw/xfree86/xaa/xaa.h	2008-12-16 19:19:00.000000000 +0000
@@ -2,6 +2,10 @@
 #ifndef _XAA_H
 #define _XAA_H
 
+#define XAA_VERSION_MAJOR   1
+#define XAA_VERSION_MINOR   2
+#define XAA_VERSION_RELEASE 1
+
 /*
 
    ******** OPERATION SPECIFIC FLAGS *********
diff -ruN xserver-4c6a89ee783d62fb75a738339351830c35b19a38/hw/xfree86/xaa/xaaInitAccel.c xserver-4970d757a7364c1d2fb4db4e404e88e8ad989ddb/hw/xfree86/xaa/xaaInitAccel.c
--- xserver-4c6a89ee783d62fb75a738339351830c35b19a38/hw/xfree86/xaa/xaaInitAccel.c	2008-11-05 20:39:01.000000000 +0000
+++ xserver-4970d757a7364c1d2fb4db4e404e88e8ad989ddb/hw/xfree86/xaa/xaaInitAccel.c	2008-12-16 19:19:00.000000000 +0000
@@ -103,7 +103,9 @@
 	MODINFOSTRING1,
 	MODINFOSTRING2,
 	XORG_VERSION_CURRENT,
-	1, 2, 0,
+	XAA_VERSION_MAJOR,
+	XAA_VERSION_MINOR,
+	XAA_VERSION_RELEASE,
 	ABI_CLASS_VIDEODRV,		/* requires the video driver ABI */
 	ABI_VIDEODRV_VERSION,
 	MOD_CLASS_NONE,
diff -ruN xserver-4c6a89ee783d62fb75a738339351830c35b19a38/hw/xfree86/xaa/xaawrap.h xserver-4970d757a7364c1d2fb4db4e404e88e8ad989ddb/hw/xfree86/xaa/xaawrap.h
--- xserver-4c6a89ee783d62fb75a738339351830c35b19a38/hw/xfree86/xaa/xaawrap.h	2008-11-05 20:39:01.000000000 +0000
+++ xserver-4970d757a7364c1d2fb4db4e404e88e8ad989ddb/hw/xfree86/xaa/xaawrap.h	2008-12-16 19:19:00.000000000 +0000
@@ -48,8 +48,8 @@
     XAAPixmapPtr pixPriv = XAA_GET_PIXMAP_PRIVATE((PixmapPtr)(pDraw));\
     GCFuncs *oldFuncs = pGC->funcs;\
     pGC->funcs = pGCPriv->wrapFuncs;\
-    pGC->ops = pGCPriv->wrapOps
-
+    pGC->ops = pGCPriv->wrapOps; \
+    SYNC_CHECK(pGC)
     
 #define XAA_PIXMAP_OP_EPILOGUE(pGC)\
     pGCPriv->wrapOps = pGC->ops;\
diff -ruN xserver-4c6a89ee783d62fb75a738339351830c35b19a38/mi/miinitext.c xserver-4970d757a7364c1d2fb4db4e404e88e8ad989ddb/mi/miinitext.c
--- xserver-4c6a89ee783d62fb75a738339351830c35b19a38/mi/miinitext.c	2008-11-05 20:39:01.000000000 +0000
+++ xserver-4970d757a7364c1d2fb4db4e404e88e8ad989ddb/mi/miinitext.c	2008-12-16 19:19:00.000000000 +0000
@@ -661,7 +661,8 @@
 #endif
 
 #ifdef GLXEXT
-    GlxPushProvider(&__glXDRISWRastProvider);
+    if (serverGeneration == 1)
+	GlxPushProvider(&__glXDRISWRastProvider);
     if (!noGlxExtension) GlxExtensionInit();
 #endif
 }
diff -ruN xserver-4c6a89ee783d62fb75a738339351830c35b19a38/os/utils.c xserver-4970d757a7364c1d2fb4db4e404e88e8ad989ddb/os/utils.c
--- xserver-4c6a89ee783d62fb75a738339351830c35b19a38/os/utils.c	2008-11-05 20:39:01.000000000 +0000
+++ xserver-4970d757a7364c1d2fb4db4e404e88e8ad989ddb/os/utils.c	2008-12-16 19:19:00.000000000 +0000
@@ -1702,7 +1702,7 @@
     int pid;
 } *pidlist;
 
-void (*old_alarm)(int) = NULL; /* XXX horrible awful hack */
+OsSigHandlerPtr old_alarm = NULL; /* XXX horrible awful hack */
 
 pointer
 Popen(char *command, char *type)
@@ -1726,7 +1726,7 @@
     }
 
     /* Ignore the smart scheduler while this is going on */
-    old_alarm = signal(SIGALRM, SIG_IGN);
+    old_alarm = OsSignal(SIGALRM, SIG_IGN);
     if (old_alarm == SIG_ERR) {
       perror("signal");
       return NULL;
@@ -1737,7 +1737,7 @@
 	close(pdes[0]);
 	close(pdes[1]);
 	xfree(cur);
-	if (signal(SIGALRM, old_alarm) == SIG_ERR)
+	if (OsSignal(SIGALRM, old_alarm) == SIG_ERR)
 	  perror("signal");
 	return NULL;
     case 0:	/* child */
@@ -1914,7 +1914,7 @@
     /* allow EINTR again */
     OsReleaseSignals ();
     
-    if (old_alarm && signal(SIGALRM, old_alarm) == SIG_ERR) {
+    if (old_alarm && OsSignal(SIGALRM, old_alarm) == SIG_ERR) {
       perror("signal");
       return -1;
     }
diff -ruN xserver-4c6a89ee783d62fb75a738339351830c35b19a38/xkb/xkbEvents.c xserver-4970d757a7364c1d2fb4db4e404e88e8ad989ddb/xkb/xkbEvents.c
--- xserver-4c6a89ee783d62fb75a738339351830c35b19a38/xkb/xkbEvents.c	2008-11-05 20:39:01.000000000 +0000
+++ xserver-4970d757a7364c1d2fb4db4e404e88e8ad989ddb/xkb/xkbEvents.c	2008-12-16 19:19:00.000000000 +0000
@@ -109,7 +109,7 @@
 register CARD16	changed,bState;
 
     interest = kbd->xkb_interest;
-    if (!interest)
+    if (!interest || !kbd->key || !kbd->key->xkbInfo)
 	return;
     xkbi = kbd->key->xkbInfo;
     state= &xkbi->state;
@@ -168,6 +168,9 @@
 unsigned	time = 0,initialized;
 CARD16		changed;
 
+    if (!kbd->key || !kbd->key->xkbInfo)
+        return;
+
     xkbi = kbd->key->xkbInfo;
     initialized= 0;
 
@@ -291,7 +294,7 @@
 Time 		 	time = 0;
 
     interest = kbd->xkb_interest;
-    if (!interest)
+    if (!interest || !kbd->key || !kbd->key->xkbInfo)
 	return;
     xkbi = kbd->key->xkbInfo;
  
@@ -401,6 +404,9 @@
 Time 		time = 0;
 XID		winID = 0;
 
+    if (!kbd->key || !kbd->key->xkbInfo)
+        return;
+
     xkbi = kbd->key->xkbInfo;
 
     if ((force||(xkbi->desc->ctrls->enabled_ctrls&XkbAudibleBellMask))&&
@@ -616,11 +622,12 @@
 XkbInterestPtr	 interest;
 Time 		 time = 0;
 
-    xkbi = kbd->key->xkbInfo;
     interest = kbd->xkb_interest;
-    if (!interest)
+    if (!interest || !kbd->key || !kbd->key->xkbInfo)
 	return;
  
+    xkbi = kbd->key->xkbInfo;
+
     initialized = 0;
     pEv->mods= xkbi->state.mods;
     pEv->group= xkbi->state.group;
@@ -996,6 +1003,10 @@
 ClientPtr	client = NULL;
 
     found= False;
+
+    if (!dev->key || !dev->key->xkbInfo)
+        return found;
+
     autoCtrls= autoValues= 0;
     if ( dev->xkb_interest ) {
 	interest = dev->xkb_interest;