--- /dev/null
+From 792e1d05c04a65d8cdabde131e28c5fbb700a609 Mon Sep 17 00:00:00 2001
+From: Nick Bowler <nbowler@draconx.ca>
+Date: Tue, 6 Apr 2010 18:05:25 -0400
+Subject: [PATCH] dri2: Delete invalidate compatibility code.
+
+Commit 61d26bc82e7c4100a ("dri2: Event driven buffer validation.")
+introduced severe stuttering on my GM45 when using X server 1.7.
+This appears to have been caused by the compatibility code added
+to handle the case where the server does not emit invalidate events.
+
+Removing the code entirely solves the issue.
+
+Fixes fdo bug #27277.
+
+Signed-off-by: Nick Bowler <nbowler@draconx.ca>
+---
+ src/glx/dri2_glx.c | 10 ----------
+ 1 files changed, 0 insertions(+), 10 deletions(-)
+
+diff --git a/src/glx/dri2_glx.c b/src/glx/dri2_glx.c
+index c4b5cb9..582e4a4 100644
+--- a/src/glx/dri2_glx.c
++++ b/src/glx/dri2_glx.c
+@@ -67,7 +67,6 @@ struct __GLXDRIdisplayPrivateRec
+ int driMinor;
+ int driPatch;
+ int swapAvailable;
+- int invalidateAvailable;
+ };
+
+ struct __GLXDRIcontextPrivateRec
+@@ -327,10 +326,6 @@ dri2FlushFrontBuffer(__DRIdrawable *driDrawable, void *loaderPrivate)
+ __GLXdisplayPrivate *priv = __glXInitialize(pdraw->base.psc->dpy);
+ __GLXDRIdisplayPrivate *pdp = (__GLXDRIdisplayPrivate *)priv->dri2Display;
+
+- /* Old servers don't send invalidate events */
+- if (!pdp->invalidateAvailable)
+- dri2InvalidateBuffers(priv->dpy, pdraw->base.drawable);
+-
+ dri2WaitGL(loaderPrivate);
+ }
+
+@@ -391,10 +386,6 @@ dri2SwapBuffers(__GLXDRIdrawable *pdraw, int64_t target_msc, int64_t divisor,
+ (*pdraw->psc->f->flush)(pdraw->driDrawable);
+ #endif
+
+- /* Old servers don't send invalidate events */
+- if (!pdp->invalidateAvailable)
+- dri2InvalidateBuffers(dpyPriv->dpy, pdraw->drawable);
+-
+ /* Old servers can't handle swapbuffers */
+ if (!pdp->swapAvailable) {
+ dri2CopySubBuffer(pdraw, 0, 0, priv->width, priv->height);
+@@ -682,7 +673,6 @@ dri2CreateDisplay(Display * dpy)
+
+ pdp->driPatch = 0;
+ pdp->swapAvailable = (pdp->driMinor >= 2);
+- pdp->invalidateAvailable = (pdp->driMinor >= 3);
+
+ pdp->base.destroyDisplay = dri2DestroyDisplay;
+ pdp->base.createScreen = dri2CreateScreen;
+--
+1.6.4.4
+