On Sat, Jan 29, 2011 at 12:45:25PM +0100, Matthieu Herrb wrote: > Hi, > > More last minute X patches... > > mpf@ reported in PR6517 a problem with his 965GM chipset. > > He did some debugging and found that a patch to the kernel i915 drm > driver from one of the X.Org maintaines (Chris Wilson) fixes his > issues. I don't understand the patch (the X.Org bug report is about > i855 cache coherency problems, not about 965GM) but since it helps > both mpf and mcbride@ machines, I would like to see this committed. > > But wider testing is needed. Please apply the patch below to any > machine you have running X with an intel chipset. Report success or > failure to me please, with a dmesg and /var/log/Xorg.0.log. > > Thanks in advance. > > Original bug report: > https://bugs.freedesktop.org/show_bug.cgi?id=27187 > and patch : > https://bugs.freedesktop.org//attachment.cgi?id=41531 > > Index: i915_drv.c > =================================================================== > RCS file: /cvs/OpenBSD/src/sys/dev/pci/drm/i915_drv.c,v > retrieving revision 1.101 > diff -u -r1.101 i915_drv.c > --- i915_drv.c 21 Sep 2010 23:05:41 -0000 1.101 > +++ i915_drv.c 29 Jan 2011 08:32:29 -0000 > @@ -995,16 +995,17 @@ > bus_space_write_4(dev_priv->ifp.i9xx.bst, > dev_priv->ifp.i9xx.bsh, 0, 1); > } else { > - /* > - * I8XX don't have a flush page mechanism, but do have the > - * cache. Do it the bruteforce way. we write 1024 byes into > - * the cache, then clflush them out so they'll kick the stuff > - * we care about out of the chipset cache. > - */ > - if (dev_priv->ifp.i8xx.kva != NULL) { > - memset(dev_priv->ifp.i8xx.kva, 0, 1024); > - agp_flush_cache_range((vaddr_t)dev_priv->ifp.i8xx.kva, > - 1024); > + int i; > + > + wbinvd();
That is a very large hammer. How often is this code called? > + > +#define I830_HIC 0x70 > + > + I915_WRITE(I830_HIC, (I915_READ(I830_HIC) | (1<<31))); > + for (i = 1000; i; i--) { ^^^^^^^^^^^^^^^^^^^^^^ really? > + if (!(I915_READ(I830_HIC) & (1<<31))) > + break; > + delay(100); > } > } > } > > -- > Matthieu Herrb